-
-
Lisa's TV time for today is a jar of marbles. One marble is ten minutes.
-
Lisa's jar on a Fire TV Stick, and Dad's phone.
-
Lisa says she did it. Dad gets it on his phone and answers Yes or Not yet.
-
Dad taps yes, and a marble drops into her jar.
-
With the jar full, the next job earns a new character.
-
Puzzles earn stars. Five stars earn a character.
-
Lisa types her idea. An LLM draws it in code, and the TV app moves its parts.
-
At bedtime the TV locks until morning, whatever is left in the jar.
-
Strict mode counts her minutes in every video app. When the jar is empty, the cartoon stops.
-
Amazon Kids mode: Dad's phone says how many minutes to add as bonus time.
Inspiration
Letting your children watch TV without any restrictions gets out of hand fast, because of how addicting it is.
When I grew up, we had five channels and two shows I wanted to watch. I would watch them and that was it. Today there's always another show. Parents of young kids argue about screens for about 96 hours a year, and the next biggest fight at home is chores. A time limit can stop the TV, but it can't get a kid to do a chore. I wanted kids to earn their TV time by helping at home, so I built MarbleTime.
What it does
- The jar is today's TV time. Each kid has a jar of marbles on the TV, and one marble is 10 minutes. The jar's size is the daily maximum from health guidance (60 minutes under 7, 90 from 7). Every day starts with the jar half full, and kids get that half without doing anything.
- Jobs fill the rest. Parents write the jobs in the phone app ("Toys away"). The kid picks one with the remote and presses "I did it!". The parent gets a notification with "Yes" and "Not yet", and on a yes the marbles drop into the jar on the big screen.
- Extra jobs earn a character. A job done when the jar is already full, or five puzzle stars, earns a new character. The kid types what it should be ("a dragon who loves pancakes"), an LLM draws it in code (an SVG with every body part separate), code and a second model check the drawing, and the TV app moves the parts, so the character breathes, blinks, waves and talks. On AWS this part doesn't work yet, because Amazon Bedrock is blocked on our account. The video shows it on our local setup, which uses another LLM.
- For kids who can't read yet, the Fire OS app reads its lines aloud, in English, Estonian, German and Spanish.
- Three ways to enforce the time, set per TV:
- Amazon Kids: Amazon Kids keeps its own daily limit, and the phone app tells the parent how many earned minutes to add as bonus time (the Appstore path, on Fire OS and Vega).
- Strict (a sideloaded Fire OS prototype): a native service counts the time each kid watches in any video app, locks video apps when a jar is empty or at bedtime, and keeps the TV's settings and the uninstall screen behind the parents' PIN.
- API demo: the same flow on the Earned Time API we propose to Amazon.
How we built it
- One React Native codebase, from Amazon's multi-TV starter, built for Fire OS (Expo TV) and Vega OS, with platform files only where the two differ.
- Strict mode is a Kotlin Expo module: a foreground service that uses Android's usage stats and an overlay. Its rules sit in a pure engine with unit tests.
- The phone app is a React web app with push notifications.
- The backend is TypeScript, contract first (OpenAPI), and the same code runs locally and on AWS: API Gateway (HTTP, and WebSocket for live updates), Lambda, DynamoDB, Cognito, S3 and CloudFront, deployed with the CDK.
- Characters: an art-director model turns the kid's words into a brief, a drawing model writes a layered SVG, code checks it (size, position, a mouth that can open to talk), and a second model looks at the rendered picture.
- Puzzles come from banks written by AI ahead of time and checked by code.
- Design numbers come from research (screen-time guidance, rewards and motivation) or are marked as assumptions to test, with sources in the repo.
- A coding agent (Claude Code) did most of the building and checked each TV change on a Fire TV Stick 4K Plus over ADB, or on the Vega Virtual Device.
Challenges we ran into
- Bedrock was blocked on our new AWS account ("Error 002") for every model, from our first try on Oct 5 to our last on Oct 23. The backend is wired for Bedrock. For the prototype, another LLM draws the characters on a local server.
- Amazon Kids isn't offered on Fire TV in Estonia, where we built MarbleTime, so the Amazon Kids mode follows the docs but couldn't be tried.
- An app can't hear what a kid says to the remote: the microphone always goes to Alexa. So kids type their character's description, or a grown-up types it in the phone app.
- Vega's OK button didn't press anything until the manifest listed two audio services, and no error pointed there.
- Closing gaps in strict mode: our lock tests found that a kid could stop the app from the TV's settings, so the settings now ask for the PIN.
Accomplishments that we're proud of
- On a Fire TV Stick, strict mode puts YouTube, Prime Video and Netflix behind "Who's watching?" within a second of opening, "Alexa, open YouTube" included.
- The same app runs on Fire OS and on the Vega simulator.
- 619 automated tests across the backend, the phone app, the TV's rules and the strict-mode engine.
What we learned
- Research favours a daily budget with a part kids always get over paying for every task. The jar makes that budget visible to a kid who can't read the clock.
- On Fire OS an app can enforce time only with a lock screen and permissions granted over ADB, and on Vega not at all. That is why the platform needs an API for it.
What's next for MarbleTime
- The Earned Time API: one call for a parent-approved app to add time to a kid's Amazon Kids profile, on Fire OS and Vega. Strict mode is a prototype of what it would do.
- Bedrock for the characters once our account may use it. Polly in Estonian would let all four languages use AWS voices.
- Human-made puzzles where they exist, starting with Oak National Academy's free quizzes for ages 5–11 (in English).
- Sound on Vega, and an Appstore release of the Amazon Kids mode.
Built With
- amazon-api-gateway
- amazon-bedrock
- amazon-cloudfront
- amazon-cognito
- amazon-dynamodb
- amazon-polly
- amazon-web-services
- aws-cdk
- aws-lambda
- claude-code
- expo.io
- kotlin
- react
- react-native
- react-native-tvos
- typescript
- vega-sdk
- vite
- web-push

Log in or sign up for Devpost to join the conversation.