Notes on Night Shift
The thesis
Lifeline made players wait for a character to walk somewhere. The Longing made waiting the whole game. But real-time narrative still mostly pauses politely when you leave — the world holds its breath until you come back, and calls itself a clock.
Night Shift doesn’t. You hold the 23:00–07:00 radio watch at Point Hollis Relay, and the night proceeds on a real clock whether you are present or not. Absence is not a pause — it’s a choice the story notices. Every event in the night is authored twice: the version you witness, and the version you find in the station log afterward. Some things only resolve well if you were at the desk. One thread resolves better if you were gone at the right moment — there is a voice on the dead band that only speaks to an empty channel. Waiting, static, and dead air are content here, not loading states.
The real-time contract, honestly
- One shift is 8 fictional hours mapped to about 25 real minutes (1 fictional minute ≈ 3.1 seconds). The schedule is authored in fictional timestamps and computed from a persisted anchor — nothing is simulated on a server, nothing phones home, and the math is the same whether the tab is open or not.
- Closing the tab does not stop the night. When you return, elapsed wall-clock time converts to fictional time and everything you missed is applied in order, using its “found in the log after” variant. Come back after the full 25 minutes and you get the whole night at once, plus a dawn debrief that quotes your absence plainly.
- Fast mode is honest. The ×4 “log-summary mode” is available from the start, framed diegetically, and produces the identical event sequence — it changes the map between real and fictional minutes, never the night itself. Community norms rightly punish forced waiting; here waiting is a choice with texture, not a hostage situation.
The backgrounded tab is a channel
As far as we can tell, nobody has used the Page Visibility API as a narrative instrument, so this experiment claims it. When the tab is open but backgrounded, the station keeps signaling through the browser chrome itself: the tab title carries live radio traffic and the fictional clock, and the favicon swaps between the station’s console-lamp states — dark, amber for activity, red for a window that’s closing without you. A pinned Night Shift tab reads as an instrument on a panel.
The machinery
No AI at runtime, no server, no requests. The night is a deterministic function: a pure clock module converts wall time to fictional time; a pure station module applies authored events, window closures, and your transmissions in fictional-time order. Everything is replayable — reloading, backgrounding, fast mode, and a five-hour absence all route through the same reducer, which is why the log never contradicts itself. A node validator simulates full shifts (attentive, silent, absent, and ×4) against the same modules the page runs.
The transmitter’s capacitor bank allows about twelve sends a shift, recharging slightly during long silence. Scarcity is what makes the chatter mean something: every reply you spend on a dog or a lonely voice is one you won’t have when a fishing boat starts drifting toward the shoals.