🐦 Inspiration
"Kauwa udd! Kabootar udd! ... Sher udd!" — every kid who grew up in India knows this game. A caller shouts out things; you raise a finger for whatever flies (crow, pigeon) and you're out if you get tricked into raising for something that can't (a lion!). Pure, joyful, instant reaction.
We set out to digitize and globalize the world's childhood games — starting with Kauwa Udd — so anyone, anywhere, can play the games we grew up with, in their own language, with friends across the room or across the planet.
🎮 What it does
Hold. Release. React. Everyone holds a button; each round an object is announced (by AI voice or image). Release if it flies; keep holding if it can't. You get a 3-second window — the fastest correct reactions score, wrong moves get penalized.
- Rooms — create a room, share a link, friends join from any device. A synchronized hold-to-ready countdown starts everyone at the same instant.
- Solo vs AI — practice with configurable rounds, language, and announce style.
- Localized — every object is translated across languages; play in your own, or pick a foreign one to learn vocabulary while you play.
- Leaderboards — global daily/weekly, plus a public per-room leaderboard you can share.
- Modes — Classic (points) and Elimination.
🏗️ How we built it
- Frontend: scaffolded with Vercel v0, then built as a Next.js 16 / React 19 PWA (Tailwind, shadcn/ui, Framer Motion), deployed on Vercel.
- Database: Amazon DynamoDB (single-table design), connected through the Vercel ↔ AWS integration using OIDC — the app assumes an IAM role at runtime, so no AWS keys are ever stored. A GSI powers top-N leaderboards.
- Authoritative game loop: a Vercel Workflow (durable function) runs per room — it picks objects, opens the 3-second window, collects reactions, ranks 1st/2nd/3rd, applies scoring/elimination, and is crash-safe across the whole match.
- Realtime: Ably channels + presence push round events and live scores to every player; reactions are recorded server-side for authoritative, cheat-resistant scoring.
- Auth: Auth.js with zero-friction guest play.
- Polish: synthesized Web Audio sound effects (license-free), Web Speech voice announcements, full PWA.
📈 Built to scale (million-scale global app)
The architecture is sharded by room: each live game is one independent Vercel Workflow + one Ably channel + one DynamoDB partition. There's no central bottleneck — millions of concurrent players simply means millions of independent rooms. DynamoDB's serverless, single-digit-millisecond, horizontally-scaling model (with Global Tables for multi-region) makes it the same architecture at 5 players or 5 million.
🧗 Challenges we ran into
- Server-authoritative realtime on serverless — keeping scoring fair and crash-safe without a stateful server, solved with a durable Vercel Workflow per room plus DynamoDB as the reaction buffer.
- Key-free AWS access — wiring OIDC so production assumes an IAM role instead of storing credentials.
- Realtime gotchas — an Ably
clientId/token bug that blocked connections, and clock-skew in the ready-gate countdown. - The feel — translating a physical playground mechanic into one intuitive button, with a synchronized hold-to-ready start so everyone reacts together.
🎓 What we learned
Durable workflows make "stateful" real-time game logic genuinely possible on serverless; DynamoDB single-table + OIDC is a production-grade, key-free data layer; and a tiny, focused mechanic plus localization can turn a local folk game into something globally playable.
▶️ What's next
More childhood games as content packs, native mobile share, ranked seasons, and exact-rank analytics on Aurora DSQL.
Built With
- ably
- amazon-dynamodb
- auth.js
- aws-iam
- aws-sdk
- framer-motion
- next.js
- node.js
- pwa
- react
- shadcn-ui
- tailwindcss
- typescript
- v0
- vercel
- vercel-oidc
- vercel-workflow
- web-audio-api
- web-speech-api
Log in or sign up for Devpost to join the conversation.