Inspiration

Picking something to watch takes longer than watching it. Everyone's been there — four people on the couch, scrolling through three different apps, vetoing each other's suggestions for 30 minutes until someone just puts on something nobody's excited about. We wanted to flip that: tell your TV how you're feeling, and let AI plan the whole evening.

What it does

Vibe replaces the scroll with one question: how are you feeling?

From your mood, your time budget and your local clock, it builds an energy arc for the evening — an easy opener, a main event, a soft landing — and fills each slot with titles you can actually play on your streaming services in your country.

  • Live, not a spinner. The plan streams to the TV in real time: you see the shortlist being built, tools the agent calls, and each pick landing as soon as it's decided, with a reason tied to its place in the night.
  • "Not this one" swaps a single pick instantly; Vibe remembers what you rejected.
  • Adaptive check-in: after each title finishes, choose wind me down / keep going / pick it up — the rest of the night is re-planned around how you feel now.
  • Couch Mode: everyone scans a QR code and adds their mood, notes (voice or text) and hard no's from their phone. Vibe blends the room. A majority skip vote swaps a pick live on the TV.
  • Voice via Alexa+ MCP: "Alexa, plan a chill movie night" — the lineup builds live on the linked TV. A self-hosted MCP server (spec 2025-11-25, Streamable HTTP) with tools for planning, swapping, and browsing the lineup.
  • Household profiles and Kids mode, with a feedback loop (thumbs + pacing) that tunes future plans.
  • Designed for the remote: spatial D-pad navigation everywhere, 10-foot typography, cinematic UI.

How we built it

Fire TV / Vega OS: A React Native for Vega app hosts the web UI in @amazon-devices/webview, forwarding the Back key and exiting cleanly. The web app (React + Vite + Tailwind) has its own geometric spatial-navigation engine with focus scopes and full remote key handling (Back, Select, Play/Pause, Menu), scaling from 960×540 WebViews to 4K.

Planning engine (FastAPI): A deterministic energy arc appears instantly. A TMDB /discover shortlist — filtered by region, streaming services, runtime, quality, and kids-safety — is prefetched the moment a mood is chosen. Then one streamed Amazon Bedrock ConverseStream conversation with Claude writes one pick per line. The model may call tools (search, more-like-this, details). Every pick is validated (no invented IDs, fits the slot) and hydrated with real posters, runtimes and providers before it reaches the TV. Heartbeats, a hard deadline and a deterministic fallback mean the viewer is never left waiting.

MCP server: MCP spec 2025-11-25 over Streamable HTTP (official Python SDK), mounted at /mcp, with tools: link_tv, plan_movie_night (reports progress live), whats_next, swap_pick, mark_watched, tonight_lineup.

AWS infrastructure: App Runner (API + MCP), RDS PostgreSQL, S3 + CloudFront (web app with /api and /mcp routed to App Runner on one domain), Secrets Manager, ECR — one CloudFormation template and one deploy script.

AWS services used

Service Purpose
Amazon Bedrock (Claude Sonnet 4.6 + Haiku 4.5) Streaming planner with tool use (ConverseStream), swap explanations, mood parsing
AWS App Runner Hosts FastAPI API and MCP server
Amazon RDS for PostgreSQL Plans, picks, profiles, feedback
Amazon S3 + CloudFront Serves the web app; routes API and MCP to App Runner
AWS Secrets Manager DB password and TMDB key
Amazon ECR Backend container image

Challenges we ran into

  • IAM permission limits: The account had a 2048-character inline policy limit, so we had to split deploy permissions across two customer managed policies and debug each permission individually.
  • VPC subnet coverage: RDS required subnets in 2+ availability zones; the default VPC only had one, so we had to recreate it.
  • Vega SDK WebView bundling: Getting the React Native JS bundle properly included in the Vega package required manual Metro bundling — the build toolchain is still early.
  • D-pad navigation from scratch: No existing library handled geometric spatial navigation with focus scopes for TV web apps, so we built one and open-sourced it as tv-dpad-focus.

What we learned

  • Amazon Bedrock's ConverseStream API with tool use is powerful for building real-time AI experiences — the streaming approach makes AI feel instant instead of making users wait.
  • Building for the 10-foot UI forces discipline: every element needs to be reachable by four arrow keys, visible from across the room, and responsive to a single "OK" press.
  • The Vega SDK is young but capable — WebView apps are a practical path to bringing web experiences to Fire TV.

What's next for Vibe

  • Deep linking into streaming apps so plans go from "what to watch" to "watching" in one remote press
  • Voice input directly on the TV remote for mood selection
  • Watch-history sync across household members
  • Social features: share your evening plan with friends

Built With

Share this project:

Updates

Submission history