Live wind from launch stations
Vendor adapters read whatever hardware you run into one documented contract. Build your own UI on the data, or render it with components that live natively in your design system.
Any vendor
WindNerd anemometer kits, WeatherFlow Tempest, Campbell Scientific dataloggers — or your own loader on the same wire.
Headless core
The contract, derivations, chart geometry, and polling stores are framework-free — components optional.
Rendered natively
Dial, graded history, wind rose, daily pattern — the full station-page vocabulary, no iframe.
Two peer bindings
React or framework-free custom elements. Byte-identical DOM; neither is the reference.
loading…
- Capabilities are declared, never inferred. Absence stays absent.
- Degrade, don’t lie. An outage renders with a reason, not stale numbers.
- No prose on the wire. Codes and degrees travel; words and colours are yours.
- Your thresholds, your palette. Banding follows your limits and your tokens.
Two ways in
The same summer-midday points, once as the object windRose() returns and once as the component that draws it — the headless core and the bindings are peers; take either.
Headless — the object
import { windRose, filterByMonth, filterByTimeOfDay, METEOROLOGICAL_SEASON_MONTHS } from "@azohra/meteo.station"; const summer = filterByMonth(history, METEOROLOGICAL_SEASON_MONTHS.summer); const midday = filterByTimeOfDay(summer, 9 * 60, 15 * 60); const rose = windRose(midday, 16); // ↓ the object below
Headed — the same data, drawn
<meteo-wind-rose id="rose"></meteo-wind-rose> rose.points = midday;The station card
Childless, <meteo-station-card> composes the full card; give it children and you pick the pieces — the second card is chart and summary only.
Current conditions
A live instrument beside a dead one — the outage keeps its card and says why, instead of vanishing.
History, graded and plain
The same six hours with your thresholds banding the trace, and with thresholds="none" opting out into the neutral accent. The third panel holds four days of history alone: window-hours re-slices it to 6/12/24 h, and compare-offset-days overlays a prior day’s trace shifted onto today’s own x-axis, both a plain client-side re-slice of the same fetched points.
With thresholds — 12 · 20 · 28 km/h
Without thresholds
History Lab — four days fetched, window-hours + compare-offset-days
Wind roses
Launch Ridge wears its 260°–340° launch window as a judgment ring; the petals keep reporting distribution.
Launch Ridge — graded, launch window ring
Summit Logger — plain
A season, not a window
Fourteen months of history behind one rose and one typical day — All/Month/Season pick what filterByMonth narrows to (a season is just a fixed three-month group), filterByTimeOfDay narrows further; <meteo-daily-pattern> vector-averages the lot into a day.
<meteo-wind-rose> — of the year’s samples
<meteo-daily-pattern> — the whole 14 months, vector-averaged
Trends
Temperature and sea-level pressure over the window — the 20-minute dropout breaks both traces, never interpolated over.
Temperature — Launch Ridge
Pressure — Launch Ridge
Air and precipitation
The whole atmosphere folds into<meteo-air-matrix>behind a live trigger line; only the conditions-capable station earns a column.
The fleet, on one table
One row per station, unavailable rows keep their geometry — no attributes at all, the provider supplies everything.
Strips
The table row as a standalone one-liner —<meteo-station-strip>, provider-fed here, and the outage keeps its line at full height.
Primitives
The smallest pieces, one at a time — then composed. Every atom is a plain inline element you can drop into your own markup.
The atoms — the feed’s primary station, one element at a time
<meteo-speed><meteo-gust><meteo-lull><meteo-direction><meteo-temperature><meteo-pressure station-id="valley-tempest"><meteo-updated-at><meteo-band-chip> + labels<meteo-sparkline>Composed — the atoms disappear into your own prose
Right now at Launch Ridge it’s blowing
Right now at {station.name} it's blowing <meteo-speed> from the <meteo-direction>, gusting <meteo-gust> — updated <meteo-updated-at>.Band chips across the fleet — five words over 5 · 12 · 20 · 28 km/h
The bare dial — one 160-unit drawing, any size
Strips with sparklines — the board-row pairing
Freshness — the presenter, all three words
<meteo-freshness-badge> is the presenter for rows you compose yourself — the cards and table above judge their own freshness from the feed’s clocks and re-judge between polls.
No provider, explicit props
This instrument renders outside the provider: station, clocks, thresholds, and unit all arrive as props.