NIGHT RELAYBUILD LOG · how this page was made

23:00 · the brief

One scrubber. One state machine. The whole night obeys it.

This site was built blind against another model's version of the same concept — neither builder saw the other's work. Below: the brief as received, the one technique it demanded, and what three hostile critique passes found.

site
night-relay · NIGHT RELAY · the courier city's graveyard shift
concept
a dispatch console for a city's overnight courier relay — scrub the shift from 23:00 to 06:00 and watch jobs spawn, route, hand off and land.
palette
soot #0d0c0a · amber phosphor #ffb454 · dim ash #8a8072 · alert cyan #6fd3c7 (sparingly)
type
IBM Plex Mono — everything. a true console; weight and size do the hierarchy.
signature
a scrubbable state machine — one timeline scrubber (drag / arrow keys) drives the whole console: city map dots, job log stream, load graphs, handoff arcs.
required interactions
shift scrubber · click a job row to follow its route · pause/live toggle · console flicker easter egg at 03:33
voice
dispatch log laconic; timestamps carry the story

00:30 · the signature technique

132 jobs are computed once. Time is just a lookup.

Nothing on the console is keyframed. At boot, a seeded RNG deals 132 parcels across a real eight-hub graph (BFS-routed, dog-leg streets), each with a full segment schedule — wait, leg, handoff, leg, doorstep drop. Every pixel is then a pure function of one number, T, in shift-minutes. Scrub T, and the night replays; the same night, every visit, because the seed is the company's founding board number.

The core is small enough to quote whole — this is the actual function the map, log, stats and follow-card all ask:

/* the entire night, asked one question: where is job j at time T? */
function jobState(j,T){
  if(T<j.sp)return{ph:'queued'};
  if(T>=j.doneT)return{ph:'done'};
  for(let i=0;i<j.segs.length;i++){const s=j.segs[i];
    if(T>=s.t0&&T<s.t1){
      if(s.type==='dwell')return{ph:i===0?'waiting':'handoff',hub:s.hub,seg:s,i};
      const f=(T-s.t0)/(s.t1-s.t0);
      return{ph:'leg',p:posAlong(s.P,f),seg:s,i,f};
    }}
  return{ph:'done'};
}

Because state is derived, not accumulated, the scrubber can jump from 01:56 to 04:40 and every rider, ring and log line is instantly correct. The log is a binary search over a pre-sorted event list; the load curve under the scrubber is the per-minute active-job count, computed once at boot. First frame boots at T=161.4 — the console is already mid-shift, already alive, before the visitor touches anything.

03:33 · the three passes

What the hostile art director found, and what it cost the page.

PASS 1 — structure & dead air 1440×900 + 390×844 · top/mid/bottom
PASS 2 — rhythm & contrast 1440×900 + 390×844 · top/mid/bottom
PASS 3 — interaction proof 375 / 768 / 1440 · keyboard · touch
PASS 4 — resume & cohesion 1440 / 768 / 375 · re-shot clean

06:00 · sign-off

Single HTML file. No images, no build step, no framework — one font family and one number called T. The constitution that governed it (real copy, one deep technique, motion on every screenful, keyboard paths, ≤90KB) is the same one every site in this collection obeys.