1. readsLaunch Library's T−0 times
  2. becomesimminence → mass, recomputed every second
  3. writes--w
  4. you seethe next launch literally gains weight as T−0 approaches — time itself drives the field

No canvas is drawn here — the field is invisible; these variables are its only output. Without it you would build: a countdown per row and a cron that re-sorts.

Data honesty

Data source
Real Launch Library 2 data (thespacedevs.com) — upcoming rocket launches with T−0 times, free API (attribution).
Snapshot
Committed snapshot in src/data/examples/, stamped snapshotAt on refresh via scripts/snapshot-examples.mjs — the build never fetches, so it is deterministic.
Live refresh
Upgrades to live in the browser; additionally, imminence (mass) is recomputed every second in-page as T−0 approaches. The committed snapshot is the SSR baseline.
Not claimed
The field reads imminence as mass. It does not predict whether a launch will happen on time or succeed — it makes the countdown drive weight in real time.

Fundamental · invisible fields · calendar

The next launch pulls hardest.

A launch schedule lists every mission at the same weight: a rocket lifting off in nineteen hours sits in the same row style as one penciled in for the end of the month. This is the same schedule from Launch Library 2 run as a field: imminence is gravitational mass, and the weight ramps as T−0 approaches — heavier type, darker ink, a stronger left anchor.

This is the one page where the field's input is time itself. The soonest launch is the biggest thing on the wall — a featured "next up" card with the countdown as its centerpiece — and the rest lay out as a day agenda, a seven-column week, or a month grid: three calendar geometries over the same thirty launches. A 1-second clock recomputes every weight and re-picks the featured launch in whichever view is mounted, so when a window passes the wall advances on its own; passed and undated launches drift to a dimmed "unscheduled" cluster. Toggle the field off and the wall flattens — but the countdowns keep ticking, because they're data, not field.

Field
Layout
Color by

size = imminence — weight ramps as T−0 approaches, recomputed every second · color = launch status — Go is confirmed, TBC awaits confirmation

Next up

Falcon 9 Block 5 | Starlink Group 17-45

SpaceX · Falcon 9 Block 5

Space Launch Complex 4E · Vandenberg SFB, CA, USA

T− 16:53:50 Go

Thursday, June 25UTC

  1. Falcon 9 Block 5 | Starlink Group 17-45 SpaceX · Falcon 9 Block 5 Space Launch Complex 4E · Vandenberg SFB, CA, USA
    T− 16:53:50 Go LEO

Saturday, June 27UTC

  1. Pegasus XL | Swift Boost Mission Northrop Grumman Space Systems · Pegasus XL Kwajalein Atoll · Air launch to orbit
    T− 2d 22:34:29 Go LEO

Sunday, June 28UTC

  1. Falcon 9 Block 5 | Starlink Group 17-40 SpaceX · Falcon 9 Block 5 Space Launch Complex 4E · Vandenberg SFB, CA, USA
    T− 4d 03:34:29 Go LEO

Monday, June 29UTC

  1. Falcon 9 Block 5 | Sirius SXM-11 SpaceX · Falcon 9 Block 5 Space Launch Complex 40 · Cape Canaveral SFS, FL, USA
    T− 4d 15:59:29 Go GTO
  2. South Korean ADD Solid-Fuel SLV | Demo Flight Agency for Defense Development · South Korean ADD Solid-Fuel SLV ADD Offshore launch platform · Sea Launch
    T− 4d 18:34:29 Go LEO

Thursday, July 2UTC

  1. Falcon 9 Block 5 | Starlink Group 17-46 SpaceX · Falcon 9 Block 5 Space Launch Complex 4E · Vandenberg SFB, CA, USA
    T− 7d 15:34:29 Go LEO
  2. Atlas V 551 | Amazon Leo (LA-08) United Launch Alliance · Atlas V 551 Space Launch Complex 41 · Cape Canaveral SFS, FL, USA
    T− 7d 17:58:29 Go LEO

Friday, July 3UTC

  1. Falcon 9 Block 5 | Starlink Group 10-50 SpaceX · Falcon 9 Block 5 Space Launch Complex 40 · Cape Canaveral SFS, FL, USA
    T− 9d 00:54:29 Go LEO

Tuesday, July 14UTC

  1. Soyuz 2.1a | Soyuz MS-29 Russian Federal Space Agency (ROSCOSMOS) · Soyuz 2.1a 31/6 · Baikonur Cosmodrome, Republic of Kazakhstan
    T− 20d 04:17:29 TBC LEO

Thursday, August 6UTC

  1. H3-22 | Michibiki 7 (QZS-7) Mitsubishi Heavy Industries · H3-22 Yoshinobu Launch Complex LP-2 · Tanegashima Space Center, Japan
    T− 43d 09:04:29 Go GTO

Unscheduledwindow passed · date TBD

  1. Falcon 9 Block 5 | Project Starfall Demonstration Mission SpaceX · Falcon 9 Block 5 Space Launch Complex 40 · Cape Canaveral SFS, FL, USA
    window passed · snapshot Success LEO
  2. Electron | Ten Owl Of Ten (StriX Launch 10) Rocket Lab · Electron Unknown Pad · Rocket Lab Launch Complex 1, Mahia Peninsula, New Zealand
    TBD TBD SSO
  3. Electron | The Grain Goddess Provides (iQPS Launch 7) Rocket Lab · Electron Unknown Pad · Rocket Lab Launch Complex 1, Mahia Peninsula, New Zealand
    TBD TBD LEO
  4. Smart Dragon 3 | Unknown Payload China Rocket Co. Ltd. · Smart Dragon 3 Haiyang offshore launch location · Haiyang Oriental Spaceport
    TBD TBD
  5. Themis Demonstrator | T1H-1 European Space Agency · Themis Demonstrator Launch Complex 3B · Esrange Space Center
    TBD TBD Sub
  6. Nebula-1 | Demo Flight Deep Blue Aerospace · Nebula-1 Land Launch Pad 1 · Haiyang Oriental Spaceport
    TBD TBD Sub
  7. Electron | LOXSAT 1 Rocket Lab · Electron Unknown Pad · Rocket Lab Launch Complex 1, Mahia Peninsula, New Zealand
    TBD TBD LEO
  8. Falcon 9 Block 5 | Globalstar 2-R Mission 1 (x 9) SpaceX · Falcon 9 Block 5 Space Launch Complex 40 · Cape Canaveral SFS, FL, USA
    TBD TBD LEO
  9. Falcon 9 Block 5 | Transporter 17 (Dedicated SSO Rideshare) SpaceX · Falcon 9 Block 5 Space Launch Complex 4E · Vandenberg SFB, CA, USA
    TBD TBD SSO
  10. GSLV Mk II | GISAT-1A (EOS-05) Indian Space Research Organization · GSLV Mk. II Satish Dhawan Space Centre Second Launch Pad · Satish Dhawan Space Centre, India
    TBD TBD GTO
  11. H3-24 | HTV-X2 Mitsubishi Heavy Industries · H3-24 Yoshinobu Launch Complex LP-2 · Tanegashima Space Center, Japan
    TBD TBD LEO
  12. Long March 10B | Demo Flight China Aerospace Science and Technology Corporation · Long March 10B Commercial LC-2 · Wenchang Space Launch Site, People's Republic of China
    TBD TBD
  13. Spectrum | Onward and Upward Isar Aerospace · Spectrum Orbital Launch Pad · Andøya Spaceport
    TBD TBD SSO
  14. Starship | Flight 13 SpaceX · Starship V3 Orbital Launch Pad 2 · SpaceX Starbase, TX, USA
    TBD TBD Sub
  15. Electron | Aspera Rocket Lab · Electron Unknown Pad · Rocket Lab Launch Complex 1, Mahia Peninsula, New Zealand
    TBD TBD LEO
  16. Ariane 62 | MTG-I2 Arianespace · Ariane 62 Ariane Launch Area 4 · Guiana Space Centre, French Guiana
    TBD TBD GTO
  17. Falcon Heavy | Nancy Grace Roman Space Telescope SpaceX · Falcon Heavy Launch Complex 39A · Kennedy Space Center, FL, USA
    TBD TBD L2
  18. Electron | StriX Launch 11 Rocket Lab · Electron Unknown Pad · Rocket Lab Launch Complex 1, Mahia Peninsula, New Zealand
    TBD TBD SSO
  19. Falcon 9 Block 5 | BlueBird Block 2 #6-8 SpaceX · Falcon 9 Block 5 Space Launch Complex 40 · Cape Canaveral SFS, FL, USA
    TBD TBD LEO
  20. Falcon 9 Block 5 | Dragon CRS-2 SpX-35 SpaceX · Falcon 9 Block 5 Unknown Pad · Cape Canaveral SFS, FL, USA
    TBD TBD LEO

How it's built

Every launch is an ordinary <li> with its NET timestamp in a data attribute. A 1-second clock turns distance-to-T−0 into a weight, writes it back as a CSS custom property, and the type carries the measurement. No canvas, no chart library — the only moving part is time. On top of the clock sit two live channels the engine writes back every frame — --d (local density, gathered by data-hot on hover) and --field-attention (the pattern's eased attention) — which touch only ink; the 1 Hz weight ramp is untouched. The day / week / month toggle re-renders the records zone from the same launch list and re-applies the scoped field over the new bodies — full cards in day, compact cards in week, chips in month — and every channel keeps working.

1 — each launch is a field body

HTML
<!-- each launch is a body. data-feedback: the engine writes
     --d (live local density) back every frame. data-hot:
     hover/focus a card and the field gathers toward it —
     hold the hero and its countdown burns brighter. -->
<li
  data-body="attract"
  data-strength="1.43"
  data-feedback
  data-hot
  data-net="2026-06-11T04:00:00Z"
  data-status="Go"
  style="--w: 0.646; --cat: #2dd4bf;"
>
  <!-- name · provider · countdown -->
</li>
  • data-net — the no-earlier-than instant the clock measures against
  • data-strength — gravitational mass, re-set every second
  • --cat — the status color the CSS mixes in
  • data-feedback — opt in to --field-* writebacks (--d)
  • data-hot — hover/focus gathers the field toward this card

2 — one clock, three geometries

// the world-time kernel — 1 at T−0,
// log-ramping from 0 across the horizon:
import { imminence, weightToStrength }
  from "@fundamental-engine/core";

// every second, for every launch:
const netMs = Date.parse(row.dataset.net);
const w = netMs > Date.now()
  ? Math.max(0.08, // the page's floor
      imminence(netMs, Date.now(),
        30 * 24 * 36e5)) // 30-day horizon
  : 0.08; // window passed · snapshot

row.style.setProperty("--w", w);
row.dataset.strength =
  weightToStrength(w).toFixed(2);
// the 0.4..2.0 attract-body contract

// the scoped field runs invisible (renderless)
// and asks for the attention metric lane —
// the pipeline writes --field-attention per
// card (eased 0..1):
field = applyPattern(zone, base, {
  renderless: true,
  extraMetrics: ["attention"],
  /* …bodies below */
});

The soonest launch is the heaviest; as its T−0 approaches the ramp steepens, so the page's center of gravity slides toward the pad. The day / week / month toggle swaps the entire geometry under the same bodies — the field doesn't care about the layout; it measures whatever geometry you give it. That's the lesson of this page.

3 — CSS reads the field's output

CSS
.cal-row {
  /* --w = imminence (1 Hz clock) · --d = live engine
     density, data-hot gathers it · --field-attention =
     the pattern's eased attention */
  --live: var(--d, 0);
  opacity: calc(0.58 + var(--w) * 0.42);
  box-shadow: 0 0 calc(var(--live) * 16px) -6px
    color-mix(in srgb,
      var(--cat) calc(var(--live) * 55%), transparent);
}
/* the rail dot charges with the density */
.cal-row::before {
  transform: translateY(-50%)
    scale(calc(1 + var(--live) * 0.35));
}
/* hold the hero — the T-minus digits burn brighter */
.cal-hero-count {
  text-shadow: 0 0 calc(var(--live) * 18px)
    color-mix(in srgb,
      var(--cat) calc(var(--live) * 65%), transparent);
}