feat(cloud-status): open availability history straight from the grid
The page rendered the same two axes twice: the table showed location x server
type, and a separate section below made you re-pick one of them from a dropdown
to see its history. The table is now the selector -- click a server-type row, a
location column, or a single cell, and the heatmap opens directly beneath it,
scoped accordingly. The dropdowns are gone.
A cell click needs a scope the chart could not express, so CloudAvailability
Chart gains a 'pair' viewMode that narrows on both axes and renders one row.
The chart itself is otherwise untouched: same matrix, shading, and uptime
maths.
Also in this pass:
- prev/next interval buttons, bounded by the ~30 days of retained transitions
and by the live window; the banner drops its "Last" prefix once stepped back
- tooltips state each bucket's full span, not just its start, since buckets are
sub-day at every range
- frameless layout: the map/filters/table lose the card frame and run to the
full width, scrolling horizontally only when columns genuinely do not fit
- filters fit one line at xl and up
- scope is deep-linkable via hist/range/off, clamped to retained history
feat(insights): add computed insight blocks to cloud-status and configurations
Adds a short block of statements derived from each page's own data: which
locations offer ARM at all, the widest and narrowest location by in-stock
share, the scarcest type, anything out of stock everywhere; on configurations,
the entry price, best value per core, the per-TB floor, ECC share and GPU
count.
Every sentence carries a number or name computed at request time, and a
sentence whose precondition does not hold is dropped rather than softened into
something generic -- so a quiet day yields fewer sentences, never filler. The
generators are pure functions colocated with each page and capped at four
statements, which keeps this from drifting into a keyword dump.
Both pages load server-side, so the text is in the initial HTML rather than
appearing only after hydration. /statistics is deliberately left out: it reads
from client-side DuckDB WASM, so text there would be invisible to crawlers
without a new server-side aggregate.
refactor(landing): redesign sections below the hero
Give everything below the (unchanged) hero a cohesive radar/monitoring
visual language: shared app.css utilities (radar grid, signal pulse, hover
edge) and a reusable SectionEyebrow, applied across features, configurations,
statistics, screenshots, FAQ and the open-source banner.
Replace the five shaking metric cards with a grounded, full-width social-proof
band flush under the hero showing four rounded figures (users, active alerts,
alerts sent, auctions tracked) — approximate, never exact. Unify all sections
to max-w-5xl for consistent edges. Spec in docs/specs/landing-redesign.md.