Personal project / Party game
Afterhours.
Your friends write the punchlines. The room picks the winner.
Open project Live in a browser
My work
The multiplayer game engine, host and phone interfaces, original prompt library, and voice narration.
Working with
React · TypeScript · Socket.IO · ElevenLabs · Fly.io
Inside the build
A group chat with a scoreboard.
Context
Everyone must see the same round while answers, authors, votes, and reconnecting seats stay consistent.
How it works
The server owns timers, phase transitions, scoring, and filtered player views. Phase IDs reject stale actions; room sessions recover seats after a refresh.
In the work
900 authored prompts across three packs. Simulated 50 complete games per pack without a prompt repeat, then verified host and phone play over the public service.
- Replayability
- Each pack has 300 prompts. Room history prevents authored repeats for 50 six-prompt games; player names and a group topic personalize the setups.
- Voice hosts
- Alistair, Pierre, and Baz have separate voices and rotating banter. The game host chooses one for the match; narration is optional and credentials stay on the server.
- Hosting
- A single Fly machine serves the interface and WebSocket game engine. Rooms live in memory and survive browser reconnects, but end when the server restarts.