Inspiration
Every movie night starts with the same 30-minute argument. One person scrolls, everyone else vetoes, and half the room gives up and goes along with it. I wanted the TV to act like a referee: everyone votes privately on their own phone, and the TV calls one fair pick.
What it does
The TV referees movie night. Everyone votes on their own phone, and the TV picks one movie, with a reason and where to watch it.
- Start a room on the TV. One press shows a QR code and a 4-letter room code.
- Join from any phone. Scan, type a name and pick a mood. No app, no account.
- Set ground rules with the remote. Which streaming services you have and the longest movie you'll sit through.
- Swipe 15 movies in 90 seconds. Yes, no, one veto and one super-yes per round, with undo. The TV shows a countdown and everyone's progress, never their votes.
- The verdict. A whistle, the winner, a one-line reason and where to stream it. Runner-up and Rematch are one press away.
- Nobody agrees? Five fresh cards go to sudden death. A dead heat ends in an on-screen coin toss, so the night always ends with one pick.
How we built it
- TV app: React Native for Vega on Vega OS, built and tested on the Vega Virtual Device with full D-pad navigation.
- Phone: a lightweight Preact web page opened from the QR code, with swipe gestures and haptic-style feedback.
- Server: Fastify + WebSockets. The server owns each room and sends every screen only its own view, so the TV never receives anyone's votes. A shared Zod schema keeps TV, phone and server in sync.
- Referee engine: fixed, testable rules. Vetoes are out, a unanimous yes wins first, then points, then a seeded coin toss. Covered by property-based tests (146 tests in total).
- AI: Claude Haiku 4.5 on Amazon Bedrock turns the room's moods into the shortlist and writes the verdict sentence. It never picks the winner, and the game falls back to rules if the AI is slow or unavailable.
- AWS: an AWS CDK stack for ECS Fargate behind CloudFront, with a DynamoDB room table.
- Demo content: 60 invented films with posters made from CC0 photos, invented streaming services and synthesized sounds, so there are no trademarks anywhere.
- Design: every screen, the logo and the colour tokens were designed in Figma first.
Challenges we ran into
- Garbled WebSocket messages on Vega made the TV freeze at random. I fixed it by having the TV re-fetch its current screen over HTTP whenever a message looks wrong.
- Sound on the virtual device only worked one way: AAC audio fed through MediaSource.
- AWS account activation blocked Bedrock, CloudFront and Fargate for the whole build. The AI code was checked against the real account: the calls reach Bedrock and are refused, and the game falls back to the rules in about 150 ms.
- Monorepo builds: Metro couldn't resolve pnpm workspace packages until I hoisted the layout and added watch folders.
Accomplishments that we're proud of
- My first Fire TV app. It runs smoothly on Vega with remote-only navigation.
- A referee that is provably fair: vote privacy is enforced by the server, and the tie-breaking rules are tested.
- The game never gets stuck. With or without AI, with ties or with no yes votes at all, it always ends with one pick.
- An end-to-end demo video recorded from the real TV app and four real phone sessions, not mockups.
What we learned
- Designing for a 10-foot screen and a D-pad is very different from designing for touch: focus order, spatial navigation and readable sizes matter on every screen.
- Server-owned state makes multi-device apps much simpler to reason about, and it makes privacy a property of the design rather than a promise.
- Treat AI as an assistant to the rules, not the decision-maker: it gets the friendly wording, and the deterministic code gets the final say.
What's next for CouchConsensus
- Turn on Bedrock and deploy to AWS as soon as the account is activated.
- Store rooms in DynamoDB so they survive restarts.
- A real movie catalog, and opening the chosen title directly in its streaming app.
- Remembering whose super-yes won last time, to break future ties more fairly.
Built With
- amazon-bedrock
- amazon-cloudfront
- amazon-dynamodb
- amazon-ecs
- anthropic
- aws-cdk
- aws-fargate
- claude
- docker
- fast-check
- fastify
- figma
- fire-tv
- node.js
- pnpm
- preact
- react-native
- react-native-for-vega
- typescript
- vega-os
- vite
- vitest
- websockets
- zod
Log in or sign up for Devpost to join the conversation.