Skip to content
AJ Uppal
← Back to selected work

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.

Keep exploring.

The whole collection →
A sailboat beneath a rising sun, with a warm path of light across the ocean in Saltline. saltline Simulation / multiplayer Ember Wilds in Fallowmere at dusk: a level-30 character in a voxel landscape. Ember Wilds Voxel MMORPG murmuration in ribbon style: a dense violet and white form of drawn-out particle streaks against black, filling most of the frame. murmuration Audio / WebGPU