Every exposed component gets the house widget contract: its own windowable URL, params on the index card, data source named in-page (or "driven — no fetch"), profile behavior (wall / laptop / narrow, plus tv when that profile lands), a transparent/composed mode so it sits on other surfaces without a seam, an embed handle where interactive, honest empty/stale states, and a receipt. Extraction is verbatim capture of what the hub does today — the LOOK stays the Visuals lane's to change, and the whole point is they get to change it in one place afterward. Cockpit untouched throughout: components mirror the hub; the hub adopts them only on your say-so.
.big — mono at weight 700, 26px, with the tone glow
(text-shadow: 0 0 14px at half alpha — green for bull, red for bear), riding a ramp from 9.5px
tracked-uppercase labels to a 34px top end, tabular-nums in 36 places. Live sample:
+4.83% −2.17%
One fork worth a ruling: the hub carries two mono stacks (--mono and the geiger
summary's --gs-mono).Why first: it's the dependency of the other two — the bars are labeled in it, the table is full of it — and it's the piece that makes every surface read as one product. It also carries zero data risk: pure tokens plus a formatting contract. And the TV wall lives or dies on it — 10-foot legibility is a size-ramp question, and the ramp should belong to the component, not to each page.
To stand alone it needs: a tokens sheet lifted verbatim (both mono stacks — flagged, not silently merged — weights, size ramp, tracking scale, tone set, glow recipe); a tiny format contract (value · kind: price/pct/signed · tone: auto-by-sign or pinned · size step · the hub's minus and dash conventions · tabular-nums always); a hook for the basis chip — when the raw→adjusted ruling lands, the numeral is where "adjusted or raw" gets stated everywhere at once; and a specimen route /type showing the full ramp and tones on a handful of live prints, so Visuals restyles against one page instead of nine.
gsMbar (composite meter), gsTrend (trend ladder), gsMtf (RSI/W%R
multi-timeframe), gsMacdHist (histogram), gsVArc/gsVRing (volume rings).
Data: explicit provider Geiger plus raw FMP provider indicators. Never recomputed.Why second: the data path is already proven in /geiger; the work is cutting the bar free of the 6-tile page so one bar can live anywhere at any size — a pulse row, a table cell, a TV pane, a Visuals demo.
To stand alone it needs: a bar-only route (/bars) rendering one chosen instrument
— ?bar=composite|trend|mtf|macd|rings for ?t= — that fills whatever box it's
given (percent geometry, the scene system's native language), with ?bg=0 transparent mode and
?labels=0 for tiny panes; two feed modes — live (fetches its own composite, cache-first
like /geiger) and driven, an embed handle in the same idiom as the Visuals crossover piece
(row 89, h.set(v)) so a parent page can push values and the two lanes converge on one embed
convention instead of growing two; minimum-size honesty per bar type; numerals from component 1
for its labels; and the house STALE badge when the feed is old.
<table class="mytab"> instances —
the consensus grids (analyst_estimates) and the ETF holdings table — and none ships naked: every
one sits under a numbered .estsec band ("01·b Consensus grid") with a source chip, inside a
zone. The holdings table even carries a bar column — table × bar composition is existing hub
practice, not a new idea.Why a bare table "looks weird": it's missing its frame. The component boundary is therefore
not <table> — it's the board: header band (title · source chip · freshness
stamp · optional rank/breadth chip) + table + footer, numerals from component 1 in the cells, optional
inline bar cells from component 2. The rule rides with the component: a board never registers as a
bare full-bleed scene — its documented pairings (board + pulse; board inside research-style scenes)
are the composed look you asked for.
Why third: it consumes both earlier components, and it has the widest spec surface.
To stand alone it needs: a declarative column spec (key · label · kind → numeral contract
· optional bar · link-through to /chart); density profiles (full grid on wall/laptop, card rows on
narrow — the profile switch already exists); two first instances on proven reads — the
sector-rotation board (sector_rankings: rank, score, freshness) and the favorites board
(hub_favorites × provider quotes × provider Geiger); and its pairing defaults written into
the scene fallbacks, so the board arrives already composed.
Numeral → Bars → Board. Each is the next one's ingredient; risk ramps from no-data to one-proven-read to multi-read; and every step upgrades all three fronts at once, because the routes compose through the existing scene system the moment they exist. Rough weight: the numeral is the smallest piece (tokens + contract + specimen), bars and board are each about one queue item. Nothing here redesigns anything — the geiger math stays untouched, the look stays yours-and-Visuals', the cockpit stays sealed.
An edit or a blessing on the order; a ruling on the two-mono-stack fork (unify or keep both); and a go — on the first item alone or the set. Standing note: /type is also the natural landing pad for the basis ruling and for whatever Visuals picks as winners — one restyle point instead of nine pages.