Notes on Night Shift

EXPERIMENT 04 · REAL-TIME FICTION · WHY THIS EXISTS

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

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.

Fair warning, in the spirit of the contract: one transmission in the night can only be read from the tab title — it is spoken to the room you’re not in, and it never appears in the log or the debrief. If you spend the whole shift staring at the console, you will miss it, and that is the point.

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.

← take the watch · the lab