Jellybean sits in front of a family Jellyfin server and splits it into two experiences: a stripped-down streaming client for the kids that only shows what’s been approved, and an admin web app where a parent curates that list. The catalog, artwork, and actual video streaming all still come from Jellyfin - Jellybean just decides what’s visible and gets out of the way.
How it works
- One Go service, two embedded apps. A single Go binary serves the parent curation
UI at
/and the kids client at/kids, both React SPAs compiled in. It runs as a sibling container to Jellyfin, not a proxy in front of it. - Read-only against Jellyfin. Jellybean never writes tags, collections, or metadata back. Curation is the app’s own state.
- SQLite is the source of truth. Visibility decisions live in a local SQLite database, deliberately kept separate from Jellyfin’s own metadata.
- Split auth. Parents authenticate through Jellyfin and need an admin role; each kid profile gets a per-device API key stored on the TV and mapped server-side to a Jellyfin user.
Notes
It’s a personal home-server project - Go backend, distroless multi-arch image, built to sit alongside an existing Jellyfin plus *arr setup. Not a product, just a saner way to hand my kids a remote.
snapshot
reflects jellybean@cff9bb8captured Aug 12, 2026