Media/hub design inventory: the specs already exist, and so does a gap audit

READ-ONLY. Nothing designed, built or mounted.

THE HEADLINE: this inventory was largely already done. specs/
design-vs-build-gap-audit.md is a 61-item design-vs-build audit from
2026-07-31, every claim grep-verified, with a wave-ordered build plan. The
useful work is reconciling it, not redoing it.

WHAT ALREADY HAS A FULL DESIGN SPEC (and is NOT built):
- Offseason hub -- Vyndr Offseason.dc.html, 119KB: hub home desktop+390, an
  NBA Summer-League variant with an OUTLOOK ONLY / NOT GRADED honesty
  block, season-long board, season-read reveal with WHAT WOULD CHANGE THIS
  READ, news/outlook feed row anatomy, quiet-wire empty state.
- Article media (S3) -- hero template plus four hero graphic archetypes,
  all GENERATED data visuals never stock, inline figures with a one-pull-
  quote max and a caption law that every figure names its data, article
  card, OG 1200x630 with the master already rasterised.
- Movement strip (E1) -- steps not curves, green only when the move favours
  the read, FLAT as hairline. THIS CORRECTS MY 2026-08-07 BOARD, which
  listed it UNKNOWN and possibly satisfied by GradeShift. It is a specified
  primitive that does not exist.

THE WIRE is BUILT (vyndr/Ticker on real ticker exhaust) and is a DIFFERENT
thing from NewsWire.tsx, which is the offseason news/outlook feed.

THE ONE REAL DESIGN GAP: the hub's information architecture across seasons.
The Offseason file specifies an OFFSEASON hub; nothing specifies what that
surface is IN-season, or how content, articles, wire and the live slate
share one navigation. Every component exists on paper; their composition
into a year-round media surface does not.

A FINDING AGAINST MY OWN RECENT WORK: I built a card renderer at 1080x1350
without checking whether a designed card system existed. It does -- five
master sizes with defined layouts and rasterised PNGs in exports/. The
content engine's cards are a parallel invention. Not wrong, but they should
conform to E16/F8 rather than diverge, and that is a design decision.

CORRECTION: the order lists content API, preview page, book-comparison
mount and guard widening as still pending. All four shipped at c575a70,
and book comparison was never unmounted -- my earlier board grepped only
web/src/app and missed component-level mounting.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W1sivYNqY2TS5ftykmHBU9
This commit is contained in:
Kev
2026-08-07 19:18:36 -04:00
parent c575a708c7
commit 7a318ccce0
+92
View File
@@ -0,0 +1,92 @@
# What "media hub" already means in VYNDR's design language
Read-only inventory. Nothing designed, built or mounted.
## PHASE 0 — the design source of truth exists, and so does a gap audit
| artifact | what it is |
|---|---|
| `specs/DESIGN-SPEC.md` | **DESIGN SPEC v2** — governing laws, colour contract, entity layer, data-display standard, motion, archetype system, conversion architecture, empty/error system. 84 lines, supersedes v1. |
| `specs/design-reference/` (Jul 22) | **The design package itself** — 7 `.dc.html` surface files, 83 archetype glyph SVGs + MANIFEST, 7 rasterised share-card PNG masters. |
| `specs/design-reference/HANDOFF.md` | The code handoff: exact tokens, brand, glyph library, behaviour, laws. |
| **`specs/design-vs-build-gap-audit.md`** | **A 61-item design-vs-build audit already exists** (2026-07-31, audited at `bf7c0a3`), every claim grep-verified, with a wave-ordered build plan. |
**The inventory this order asks for was largely already done on 2026-07-31.** The
useful work is reconciling it, not redoing it.
## PHASE 1 — per media surface: spec, and build state
| surface | design spec? | built state | evidence |
|---|---|---|---|
| **Offseason hub** | **YES — a full surface file** | **NOT-STARTED** | `Vyndr Offseason.dc.html` (119KB) defines hub home (NFL desktop + 390), an **NBA Summer-League variant with an `OUTLOOK ONLY / NOT GRADED` honesty block**, a season-long board (open→NOW→VYNDR triplet), a season-read reveal with `WHAT WOULD CHANGE THIS READ`, a news/outlook feed with row anatomy, and a **quiet-wire empty state**. Gap audit: F9/F10/F11, *"design complete, no blocker but big."* |
| **Article media** | **YES — surface S3** | **NOT-STARTED** | Hero template + **4 hero graphic archetypes** (line path / distribution / mark-at-scale / matchup card — *all generated data visuals, never stock*), inline figures (stat-callout triptych, comparison bars, pull quote — **one max**), **caption law: every figure names its data**, article card, OG 1200×630 (master already rasterised in `exports/`). Gap audit F5. Zero components built. |
| **THE WIRE** | **YES** | **BUILT** (E19) | Spec'd in `Vyndr System.dc.html`: timestamped entry, ~6s hold, tag coloured by meaning. Built as `vyndr/Ticker` on real `/api/ticker` exhaust. **`NewsWire.tsx` is a different thing** — the offseason news/outlook feed, mounted in ExploreHub. |
| **Movement strip** | **YES — E1, a named primitive** | **ABSENT** | *"steps not curves, green only when the move favours the read, FLAT = hairline + `FLAT · [N]D`"*, row 86×20 silent / full-width annotated on reveal. **This corrects my 2026-08-07 board, which listed it UNKNOWN / possibly-satisfied-by-GradeShift.** It is a specified primitive that does not exist. |
| **Share-card masters ×5** | **YES — E16** | **ABSENT as product** | settle 1080×1350, story 1080×1920, square 1080, X 1200×675, record 1080×1350, article OG 1200×630. PNG masters in `exports/`; `ShareCard.tsx` has **0 importers**. Gap audit blocks it on the resolution tail having no share-card generation step. |
| **Calibration curve** | YES — E9 | ABSENT | dots vs dashed perfect line, dot size = sample, buckets under N30 hollow. |
| **The Report email / `/report` archive** | YES — E10/E12 | PARTIAL / ABSENT | `newsletterService` builds an email; the designed dark-billboard-over-light-paper hybrid is not built. `/report` redirects to `/blog`. |
| **ExploreHub** | **NO SPEC** | BUILT | Not a designed surface. It is where `NewsWire` currently lives — a de-facto host, not the intended hub. |
## PHASE 2 — what an on-site media hub would consist of
**From surfaces already designed** (no new design needed):
1. **Offseason hub shell** — F9/F10/F11, fully spec'd including its honesty block and quiet-wire empty state.
2. **News/outlook feed** — spec'd row anatomy; `NewsWire.tsx` is a partial implementation of it.
3. **Article media** — S3, fully spec'd hero + figure system.
4. **THE WIRE** — built, reusable.
5. **Share/OG cards** — designed at exact sizes, masters exported.
### The gap that needs design work authored
**Only one thing is genuinely un-designed: the hub's INFORMATION ARCHITECTURE
across seasons.** The Offseason file specifies an *offseason* hub; there is no
spec for what the same surface is **in-season**, or how content, articles, wire
and the live slate share one navigation. Every component exists on paper; **their
composition into a year-round media surface does not.**
### One finding that touches work I just shipped
**I built a card renderer at 1080×1350 without checking whether a designed card
system existed. It does** — five master sizes with defined layouts, and
rasterised PNGs in `exports/`. The content engine's cards are a parallel
invention. They are not wrong, but they should conform to E16/F8 rather than
diverge, and that reconciliation is a design decision, not a code one.
## PHASE 3 — the map
| surface | spec? | built | part of hub? | needs design work? |
|---|---|---|---|---|
| Offseason hub shell | ✅ | ❌ | **core** | no — build it |
| News/outlook feed | ✅ | partial | **core** | no |
| Article media (S3) | ✅ | ❌ | **core** | no — build it |
| THE WIRE | ✅ | ✅ | yes | no |
| Movement strip (E1) | ✅ | ❌ | adjacent | no |
| Share/OG cards (E16) | ✅ | ❌ | yes | **reconcile with content-engine cards** |
| Content-engine posts | ❌ | ✅ | **yes** | **yes — no spec exists** |
| ExploreHub | ❌ | ✅ | host today | **yes — is it the hub or a placeholder?** |
| **Year-round hub IA** | ❌ | ❌ | **the spine** | **YES — the real design gap** |
### Coordination with the social-strategy chat
These should be decided **there first**, then reflected on-site:
- **The content formula/calendar** determines what the hub's recurring slots
*are*. Designing slots before the formula exists risks a surface shaped around
guesses.
- **Card format reconciliation** — off-site posts and on-site share cards should
be one system. E16's five masters vs the content engine's renderer is the same
decision on both sides.
- **Voice**: `specs/VOICE.md` governs; the content engine templates encode a
sharper register. Whether the hub speaks in that register is a brand call.
### Correction to the still-buildable list
The order lists content API, preview page, book-comparison mount and guard
widening as pending. **All four shipped at `c575a70`.** Book comparison was never
unmounted — my earlier board grepped only `web/src/app` and missed
component-level mounting.
**Genuinely buildable now, design-complete, no clock impact:** Offseason hub
(F9F11), article media (F5), movement strip (E1), calibration curve (E9), the
Report email + archive (E10/E12). The gap audit's own wave ordering already
sequences these.