A television across a dark room showing a still dusk lake, the time, and a small join code in the corner.

The box · In development

Homie

Runs anything. Knows who’s in the room. Makes you a game.

A Mac Mini sits behind the television and the television stops being a menu. Join the wifi, scan the code on the wall, and your phone is already a controller, a buzzer, a private card only you can see.

Seats
32
Party games
3
Light cues
21
Cue to sound
144 ms

The wall and your hand

SEATS 00
A television showing a live baseball game, with a scan-to-join panel and QR code down the right-hand side.
The wall. Whatever is on, plus a door. The code is always in the same place, at the same size, in every state — a guest who has to be told how to join is a defect, not a feature.
A phone showing the Homie room: the live game, a watch button, the remote, and a reply from Homie with two quick answers.
Your hand. Scan it and you are in — no app, no account, nothing left behind when you go home. The phone renders whatever control scheme the thing on the wall asked for.

What it does

SEATS 00

Stop building a store.
Build a place.

Four of the five things below are running on a television tonight. The fifth is not, and this page says so where it gets to it.

01 The seat

Every phone is a private screen

Join the wifi, scan the code, and you have a seat. No app, no signup, nothing left on your phone when you go home. Thirty-two seats, each one its own web origin, each one showing something different at the same instant. A shared wall plus N private screens is a shape no console can make.

MAX_SEATS = 32 in packages/protocol. Four seats held on four different pictures at once with zero cross-seat press leak — fifty checks, all pass.

Running today

02 The night

Three party games, shipped

Traitor at Dinner: everyone is told what is on the plate, one of you wasn’t. Night · Secret: dinner is safe, one phone was told otherwise. Punchline: the wall gives the setup, your phone holds the joke, the room votes. Nobody is eliminated. Nothing goes negative. Last place still plays every round.

14,063 lines across three games, each with a manifest declaring its own capability grants, each installing through the same loader as anything else.

Running today

03 The house

The room is the speaker

Not smart-home control as a tile on a grid. A reveal drops the wash to red across four light buses in forty milliseconds, buzzes the phone that needs to feel it, and stings the room. All of it precomputed. None of it decided in the moment.

21 named cues in the catalogue, addressed by gesture — wash_warm, hold_still, flash_hard, tick, punch, bed — never by what happens in a game.

Running today

04 The room

It knows who is here

Presence is participation, not association. A phone left on the kitchen counter is nearby, and does not make the room seven years old. Walk out mid-game and your seat is held, never renumbered — because reshuffling seats is how a hidden-role game quietly tells everyone who the traitor is.

Four presence values on the wire: playing, here, nearby, gone. The youngest person actually in the room sets the room’s rating.

Running today

05 The one that isn’t here yet

Ask for a game, get a game

Not shipping yet

Five gates, cheapest first: schema, compile, loader, capability ceiling, then probes that play the game through. There is no force flag, and no path that hands back an installable package alongside a list of failures.

Say what you want and something playable comes back: a four-minute joke built for the six people here tonight, about something that happened at dinner. Played twice, never again, perfect. Most of them should be thrown away. That is not failure, it is the format.

It’s wild we’re almost at the point where, instead of buying a game on a console store and waiting for it to download, you just describe a game and wait for it to generate.

Ryan Campbell
A long dinner table on the television, plates cleared, wine glasses catching a low warm light.
Traitor at Dinner Everyone will be told what is on the plate. One of you will not.
A dark hallway on the television, a door ajar and cold blue light falling through a curtained window.
Night · Secret Phones in. The table is about to be set.
An empty comedy club stage on the television, a single amber spotlight on the microphone and two stools.
Punchline The TV gives the setup. Your phone holds the joke.

Where it lives

SEATS 00
A night baseball game filling the television, the stadium bowl lit under floodlights with a city skyline and water behind it.
Live · ten minutes left A television first. This is the video surface the box owns end to end, which is the only place the room’s own light can sit over moving pictures.

The largest object in the room, doing nothing.

Every TV box shipped in the last fifteen years is a vending machine: a grid of rectangles that launches other companies’ apps. It knows nothing about you, nothing about the room, and it can only ever retrieve — never make. Most of its life it is a dead black mirror hanging on your wall.

So the answer is not a better store. The screen is never off; it is a hearth. Real weather outside becomes weather inside it. Dusk falls when dusk falls. It stirs when someone comes home, and it goes quiet at midnight.

You do not open it. You walk past it, and it is already on.

The guide on the television: a large cover image over rows of on-now tiles, with the time, the date, the town and the outside temperature set in the top corner.
06:48 · Parksville, BC · 12.8° and sunny The weather on the wall is the weather outside the window. The clock is the room’s clock. Nothing here was retrieved from a store.

The shape

SEATS 00

One wall.
Thirty-two screens.

The television holds what everyone can see. Every phone in the room holds something only that person can. They are separate origins on the same wifi, so nothing on one phone can reach another, and the house lights are wired to both.

Press the button. The cue below is the one the room fires when something is revealed, at the speed it actually fires.

The television showing the Punchline title over a lit comedy stage, with thirty-two joined names listed along the bottom rail.
The wall 3840 × 2160 · 32 seats joined

Six of thirty-two phones, at the same instant

  • Ryan · pad‑01

    Decaf, but make it a secret.

    writing

  • Nicole · pad‑02

    writing

  • Alex · pad‑03

    Sent. Waiting on four.

    answered

  • Sam · pad‑04

    It knows. It always knew.

    writing

  • Jules · pad‑05

    Sent. Waiting on four.

    answered

  • Mo · pad‑06

    You’re in the room. Nothing to do yet.

    here

flash_red · 1 of 21 cues

Cues are addressed by gesture, not by event. The catalogue knows what a reveal looks like; it has never been told there is a game on.

  1. 000 ms Cue fired. Expansion is local: light, haptics, audio and a glass event, with nothing on the path waiting on a network call.
  2. 040 ms Wash to #c62828 at 0.95. Front bus ramped.
  3. 060 ms Side buses follow. Every phone that needed to feel it has buzzed.
  4. 144 ms The sting is audible in the room. Measured at 48 kHz through a microphone on the sofa, p50 and worst of seven fires.
  • bus 01 · wash40 ms
  • bus 02 · front40 ms
  • bus 03 · side60 ms
  • bus 04 · side60 ms

The room’s palette is not a mood board. It is the light packet, read back out of the cue catalogue.

  • #ffb060pulse_amber_left
  • #ffcc80wash_warm
  • #546e7awash_cool
  • #607d8bpulse inward
  • #c62828flash_red

On the wall

SEATS 00
The television at dusk showing a still lake, with three dense rows of small joined-seat initials stacked in the top-left corner beside the clock.
12:34, the room fillsThirty-two initials in the corner. The join code has not moved a pixel.
The television showing a show poster with a small spoken-request card floating over it offering two choices.
Said out loud9.92 s from the end of the sentence to the picture on the panel.
A Punchline prompt on the television with a rail of typed answers beside it, one of them containing raw markup.
Answers landingWhatever a guest types is rendered as text, always.
The television showing a stadium at night with a large four-line headline naming the game and the minutes left.
Between thingsTime, title, what is left. Nothing else asking to be clicked.

The build

SEATS 00

Measured, then written down.

Every number on this page came off an instrument, not an estimate. The ones below are the ones that decide whether the room feels alive or feels like software: how long a cue takes to reach your ears, how long a sentence takes to reach the panel, and how much of the surface is deny-by-default.

Status · honest

The last full gate is recorded as a fail: 53 things measured and right, 4 measured and wrong, 18 not measured at all, with multi-guest join and occupancy drain both falling over under churn. Three games, the seat protocol, the light cues and the presence model are running. The rest is mid-flight. That is why the label at the top of this page says in development.

Flinch

144 ms

Cue fire to audible onset. p50 and worst across seven serial fires on the production path, at 48 kHz through a real microphone — comfortably inside the project’s own 400 ms flinch law.

Expansion

< 50 ms

A named cue expands into light, haptics, audio and a glass event with no model anywhere in the path, so a reveal never waits on a network call.

Tool surface

49 tools / 20 capabilities

The capability table is deny-by-default: a tool absent from it is refused to everyone, and the daemon’s catalogue throws at import if the two sets ever disagree.

Voice

9.92 s

End of “put the Jays on” to the streaming app live on the panel, hands-free. The mechanical half of that path — request to app frontmost — is 0.39–0.49 s. The rest is thinking time.

Own surface

83 ms to arm

HLS on the video surface the box controls end to end, measured on public test media — the only place the room’s own lights and composition can sit over live moving pictures.

Panel

3840 × 2160 at DPR 2

An UltraFine framebuffer behind a 1920 × 1080 CSS viewport, verified with a nonce marker in frame so a capture cannot quietly be of the wrong window.

Front door

Decoded at 32 people

The join code was captured and re-decoded at 0, 1, 3, 6, 12 and 32 occupants, and again at quarter scale to simulate a phone camera from across the room. The door may never be lost behind a crowd.

Vocabulary

16 named constants

A generated game is closed-schema JSON, not JavaScript, compiled by hand-debugged code. “Too floaty” edits one typed, range-checked number instead of regenerating anything.

Source

226,968 lines / 474 files

Hand-written TypeScript and ES modules across 13 packages and 3 games, excluding vendored three.js, postprocessing and hls.js.

Instruments

158 probes

Out of 204 tool scripts and 127 harnesses on disk. Every probe injects a known fault and has to go red on it — a self-test that did not execute is reported blocked, never green.

3Party games shipped
13Packages
49Tools on the surface
32Seats in a room
21Light cues
158Probes that must go red

Not finished. Running.

The screen is never off.

Homie is not a download and there is nothing to open yet. The four games it will eventually hold are already playable in a browser tab.