Inspiration

Bedtime is the one screen-time moment every family shares, yet almost everything on a TV is designed to keep kids watching. We wanted to flip that: a TV app where the child is the storyteller and the story is designed to end in sleep.

What it does

Nightlight is a bedtime story studio for Fire TV (Vega OS). A parent and child build a story together using only the remote:

  • Story wizard (6 steps, all D-pad): hero (preset or "draw your own"), world, art style, tonight's lesson (bravery, sharing, kindness…), length and narrator.
  • Illustrated player: slow pan-and-zoom art, word-by-word captions, and choice points, where the child picks what happens next with the remote, with a soft countdown that chooses a default.
  • Wind-down mode: every page is calmer than the last. The screen warms and dims, the pace slows, and the story ends on a goodnight scene and a night-light sleep screen with a timer.
  • Library & series: saved heroes and past stories, so "Pip's next adventure" can continue tomorrow.
  • Parent settings (PIN): allowed lessons, length limits, captions.

How we built it

  • React Native for Vega (RN 0.83) on Vega SDK 0.24, run on the Vega Virtual Device. 10-foot UI throughout: a 1920×1080 design grid, large focus targets with a clear focus ring, and Back always works.
  • Amazon Devices Builder Tools (ADBT): the MCP server, Agent Skills and steering docs, version-pinned and committed so every teammate and agent has the same context.
  • Original content only: illustrations are drawn in code from shapes, so there's no third-party IP.
  • Reproducible monorepo: pnpm workspace, shared API/event types, pinned toolchain (toolchain.json). From clone to a running app is:
pnpm bootstrap && pnpm tv:sim
  • CI runs lint + typecheck + 14 tests on Ubuntu and Windows.
  • AWS backend skeleton (CDK): HTTP API → Lambda (Node 24, arm64), DynamoDB, private S3 + CloudFront. It's ready for the planned all-Amazon AI stack: Nova 2 Lite on Bedrock for story text and drawing-to-hero vision, Polly neural voices with speech marks for synced captions, and Bedrock Guardrails for child-safe content.

Wind-down is planned around a story "energy" value \( e \in [0, 1] \) that falls page by page. Narration speed will follow it:

$$ \text{rate}(e) = 80\% + 20\% \cdot e $$

so the voice slows from 100% at the start to about 80% by the goodnight page.

Challenges we ran into

  • Retired image models: both Amazon image models (Nova Canvas and Titan Image) reached end of life before the deadline, so we moved to curated original art.
  • Polly generative voices don't return speech marks, so we chose neural voices to keep word-highlighted captions.
  • Remote key names: Vega OS 1.2 sends raw names (enter, play) that differ from the documented ones. We measured them on the simulator and normalized them in one place.
  • No simulator screenshots: we verified the UI with key injection, log reading and a small network "probe".
  • A broken test mock: the Kepler Jest preset's BackHandler mock is broken, so we wrote our own.
  • AWS credits didn't arrive in time to switch on live generation, so we shipped the full flow as a polished showcase first.

Every issue is in our friction log, with severity and workaround, and every design choice is in our decision record.

What we learned

  • Designing for the couch and the D-pad changes everything, from focus states to how long a choice countdown should feel.
  • Agent tooling (MCP + skills) speeds up platform work a lot, as long as you pin versions.
  • Check that AI models still exist early. Two of ours were retired mid-hackathon.

What's next

Switching on live AI once AWS credits land:

  • Story text: Nova 2 Lite with Guardrails.
  • Narration: Polly, with speed that follows wind-down.
  • Draw your own hero: the kid draws on paper and a parent snaps it with a phone via a QR code on the TV.
  • Device testing: on a physical Fire TV.

Built With

Share this project:

Updates

Submission history