Welcome.

Holo

240 × 160 · MULTIPLAYER · NO INSTALL

REPLAY

A cooperative family scenario game about online harm, where every player is deliberately given a different, incomplete view of the same incident — and the credits turn what they missed into a conversation.

Jul–Aug 2026· Python engine · Phaser 4 client· Authoritative WebSocket rooms

Replay scene: the caregiver notices light under a bedroom door, week 1, turn 1
Week 1 · The Alert — the caregiver's view tap to open full size ↗
84%of Singapore residents have met harmful online content (MDDI, 2025)
8%of bullied youths told a parent (MCI, 2024) — the gap this is built for
32,768decision paths checked exhaustively, not sampled
0cross-role information leaks across live one-to-four-seat tests

WEEK 1·THE PROBLEM


turn 1

Everyone sees a
different fragment.

CAREGIVER
A young person sees the message. A caregiver notices changed behaviour. A friend sees what is circulating at school. Ordinary single-player training collapses those views into one all-knowing screen — and so it trains a conversation nobody actually has.

Replay keeps the information gap instead of closing it. Each role receives only what that person could realistically know, and chooses privately. The awkwardness of the real conversation is the mechanic, not a bug to design away.

There is no score and no correct answer. Both choices carry costs. The learning is in comparing perspectives afterwards.

WEEK 2·THE DESIGN


turn 2

Six steps, one room code.

No account, no install, no app store. A host opens a room; everyone else joins from their own browser with six characters.

  1. 01 · HostPick a source-grounded local case, or ask the AI authoring lane for a fresh one.
  2. 02 · JoinPlayers enter a six-character code from their own device and take distinct roles.
  3. 03 · KnowEach role is dealt only the information that person could realistically hold.
  4. 04 · ChooseEveryone decides privately. Nobody can outvote the young person the incident targets.
  5. 05 · ResolveDeterministic code combines the decisions and plays out the consequence.
  6. 06 · DebriefThe credits reveal the real case, what each role missed, and genuine help routes.
DESIGN NOTE
The credits are not decoration after the lesson — they are the re-enactment engine. While the case is still emotionally present, the family swaps roles and replays it to test whether holding someone else's information changes what they would do.
The private choice menu: save the message, or ask the classmate who sent it
A private choice. The other seats never see this menu. tap to open full size ↗

WEEK 3·THE MACHINE


turn 3

Seven layers.
Facts flow up only.

The generative part authors stories; it never authors truth. Evidence sits at the bottom, source-locked and PII-scrubbed, and every layer above may only read downward. The engine is deterministic Python with no I/O at all, which is what makes 32,768 paths checkable rather than merely testable.

L0Evidence Source-locked capsules, PII scrubbed.
L1Scenario Pure data graphs — one authored, the rest generated.
L2Engine Deterministic Python. No I/O, no clock, no network.
L3Server Authoritative rooms over WebSocket.
L4Client DOM lobby plus a Phaser 4 story at 240×160.
L5Debrief Engine-derived; it cannot invent what happened.
L6Art & audio 16-colour cells, synthesised effects.

L2 never reads L3  ·  L4 never computes truth

THE GATE
Generated scenarios face deterministic gates before anyone can play them. A story is refused for unsupported facts, fake choices, spectator roles, privacy leaks or unreachable endings. A beautiful, non-branching story was rejected — that refusal is on the demo reel deliberately.

SCREENS·THE BUILD


live

Running, not mocked.

Every frame below is the working browser prototype.

The lobby room where players gather before the scenario starts
The room, before anyone has chosen anything. tap ↗
The outcome screen after the server resolves everyone's private choices
The resolution, once the server has combined the seats. tap ↗
The five-page debrief reconstructing the real case and each role's decisions
The debrief — the real case, what each seat knew, what it missed, and where to get help. tap to open full size ↗

WEEK 4·THE JOURNEY


turn 4

What the build actually cost.

  1. The three-player assumption "Three players" was never engine law. N is whatever roles the scenario file declares — any literal 3 outside a scenario is a bug, and several were.
  2. Private state, honestly Per-role point-of-view had to hold under reconnects and refreshes. Live tests across one to four seats found zero cross-role leaks.
  3. The gate earned its keep The AI lane produced a genuinely good-looking scenario that had no real branching. The gate refused it. Keeping that refusal visible was worth more than a cleaner reel.
  4. Handover Built inside an agent fleet, then handed over with the engine and server frozen at working and the client slated for teardown.