Live Experience + Full-Stack Build

Assassins.

A city-wide live elimination game. Designed, built, and played IRL.

Role
Solo Developer & Product Designer
Status
Live · Pilot May 2nd
Platform
PWA · Any phone, no app store
Scroll
Live assassins-ivory.vercel.app · Pilot game May 2nd
React Vite Supabase Mapbox GL Twilio SMS Vercel PWA
3
Core pages: Home, Lobby, Game. Each a distinct UX surface with its own state.
6
Character game code. Anyone can join from any device, no account required.
0
App store downloads required. Open a link, install as PWA, play immediately.
Players until one remains. Circular chain algorithm, no manual reassignment ever.
The game

Everyone is hunting someone. Everyone is being hunted.

Players are secretly assigned a target. You hunt them across the city. When you eliminate them with photo evidence, you inherit their target and the chain continues until one player remains. Assassins is a live game people have been playing for decades. This is the version with a full app behind it.

"The design problem was making the paranoia feel good. Just enough information to act on, not so much that strategy collapses."

— Design intent
Circular target chain
Players form a closed loop. Eliminate your target and you inherit theirs — no manual reassignment, no admin overhead. The algorithm handles it in real-time. Last one standing wins.
Real-time multiplayer
Supabase Realtime subscriptions keep every player's game view in sync: new eliminations, player status changes. No refresh required. Polling fallback handles edge cases.
PWA on Vercel
Full PWA configuration. Installable from a link on any phone, fullscreen, offline-capable. No app store. CI/CD via GitHub pushes. Minimum 3 players, host controls game start.
Photo evidence + map
Eliminations require photographic proof. Mapbox GL powers host-drawn boundaries, safe zones, voluntary check-ins, and the Spotted feature. Plus once-per-hour target pings.
SMS auth
Phone authentication via Supabase Auth + Twilio A2P 10DLC. Production SMS delivery registered and compliant. Guest mode available with a soft account nudge after first game.
See it in action

How a game actually plays out

Six screens. One game. Click through to see what each player sees from join to victory.

ASSASSINS
trust no one

A live elimination game played across the city. Get assigned a target. Hunt them down.

🎯
Create an account
Sign in with your phone number
✓ Track stats ✓ Build profile ✓ Win rate
Sign up with phone →
👤
Play as guest
Continue as guest
ASSASSINS
live game
Waiting for players 5 joined
Share this code
A3X9K2
Players
SG
Shriya Host
🐺
Ghost
🦊
Viper
🐱
Raven
Start game (5 players)
ASSASSINS
live game
● Alive 4 remaining 2 kills
Target
Feed
Players
Your target
🐺
Ghost
ID: 7F3A2E
Report elimination
🗺️ Open map
🛡️ Home
🛡️ Office
📍
👁️
🎯
← Back
Live map
📍 Check in
👁️ Spotted
🎯 Ping
🎯 Target last seen 12m ago
ASSASSINS
live game
Your target
🐺
Ghost
Confirm you eliminated Ghost?
📸 Add evidence photo
📷 Camera
🖼️ Gallery
Confirm kill ☠
Cancel
ASSASSINS
live game
👑 Winner 1 remaining 3 kills
Target
Feed
Players
👑
VICTORY
You are the last one standing.
01
Welcome
Sign up or play as guest. SMS auth via Twilio.
02
Lobby
Share the 6-digit code. Host starts when ready.
03
Get your target
Secret assignment. Only you know who you're hunting.
04
Track on the map
Ping, check in, report sightings. Everyone sees something different.
05
Report elimination
Photo proof. Confirm the kill. Inherit their target.
06
Last one standing
Chain runs until one player remains. Game over.
The map — built in v1

The city is the board.

Mapbox GL is live in v1. The host draws the game boundary before play begins, designates safe zones, and players interact through check-ins, pings, and the Spotted reporting system. Each feature has different visibility by design.

📍
Host-drawn boundaries
The game master draws the play zone on the map before the game starts. Eliminations outside the boundary don't count.
🛡
Safe zones
Designated areas where eliminations are off-limits: workplaces, hospitals, anywhere the game shouldn't follow you.
📡
Voluntary check-ins
Players can share their location voluntarily. A strategic move, a taunt, or a way to signal you're in play.
👁
Spotted reports
Any player can report a sighting. Only the spotted player's assassin sees it. Everyone else is in the dark. Exactly how it should be.
🎯
Target ping
Once per hour, you can ping your target for a rough location. The one-hour cooldown is a design decision. It creates urgency without eliminating strategy.
🗺
Mapbox GL
Token-configured across local and production environments, with custom styling to match the game's dark aesthetic.
Under the hood

Built to be actually deployed.

This isn't a portfolio project that lives in a Figma file. It's a real app, live on Vercel, with production SMS delivery, legal pages, and proper auth. Built solo, end to end.

React 18 + Vite Frontend framework & build tool Live
Supabase Postgres · Realtime · Auth · Storage Live
Vercel + PWA Hosting · CI/CD · Installable on any phone Live
Mapbox GL Interactive map · Boundaries · Safe zones Live
Twilio SMS A2P 10DLC · Phone auth · Notifications Live
Key design decisions

Every tradeoff had a reason. These were the ones that mattered most.

Why PWA instead of native?
Instant shareability. Players just open a link. No App Store, no friction, no one dropping out because they didn't want to download something. The game lives or dies on how easy it is to join.
Why can only the assassin see Spotted reports?
Asymmetric information is the design. If everyone saw sighting reports, the game collapses into surveillance. Restricting visibility to one player creates tension without chaos.
Why a one-hour ping cooldown?
Balance. Unlimited pings would make the game a GPS tracker. No pings would make the map useless. An hour forces you to decide: act now or wait for better intel?
Why require a photo to join a game?
Your target needs a face to find. If players can join without uploading a photo, the hunt has no anchor in reality. It's also a gentle commitment signal — if you uploaded a photo, you're playing.
The pilot

Game 1 is May 2nd.

The app is built and deployed. The first real game runs May 2nd with a small group of friends across the city, testing every feature under actual conditions. Results will be posted here after.

Pilot date May 2nd, 2025
Format City-wide, live action, ~1 day
Auth SMS via Twilio A2P 10DLC
Evidence Photo required, stored in Supabase
Host Shriya, solo developer & game master
Results Posting after May 2nd