Repository navigation
[Feature] Family features: admin PIN, QR approval, managed accounts, time limits #1912
Copy link
Copy link
Open
Description
What problem does this solve?
Moonfin already has a per-user sign-in PIN, a Kids Mode with its own PIN, and an admin
editor for access schedules. For a family sharing one TV, some pieces are still missing:
- Nothing nudges an admin to set a PIN, and the PIN is per device and not synced.
- The Quick Connect screen shows a code, but approving it means typing that code on another
device. - Setting up every family member on a new TV means signing each one in by hand, and the
picker shows every user on the server, not just the family using this TV. - Access schedules are editable but not enforced in the client. A denied login shows a
generic failure, and there is no "your time is up" experience while using the app.
Proposed solution
Each item is independent and can ship as its own PR. The plugin-backed ones follow the
Moonfin-Client/Plugin proposal and must degrade to today's behavior without it.
- Server-backed PIN (needs the plugin proposal). Verify against the plugin when
present, with the current local PIN as the fallback and as the offline cache. A PIN set
on one device applies on all. The plugin's config page shows which administrators have
no PIN, so a parent sets it there or in the client's PIN settings. - Admin PIN prompt, only without a server-side PIN. When the plugin is absent or
unusable, offer an administrator "Set PIN / Not now" after sign-in and remember a
decline. With a server-side PIN available there is no prompt, since the PIN is managed
through the plugin. Uses the existing PIN dialog and lockout. - QR on Quick Connect. Show a QR that opens jellyfin-web's
…/web/index.html#!/quickconnect?code=<code>so a phone that is already signed in
approves with one tap.qr_flutteris already a dependency. Hide it when the server
is Emby or jellyfin-web isn't served at/web/. - Managed accounts (needs the plugin proposal). After an admin signs in, the picker shows
only the users that admin manages, and a "Set up Family Accounts" action in the admin's
settings (so it's behind the normal sign-in and PIN) signs in the members through
Quick Connect authorize using the current session. Without the plugin the picker is
unchanged and the action offers all public users. - Time's up. Enforce Jellyfin access schedules in the client: a "Time's up" screen
with the next allowed time instead of a generic login error, and an in-app block when
the window ends, including during playback, since Jellyfin rejects the user's requests
from that moment anyway. The policy is fetched fresh at the gate, and the screen clears
when access returns. This needs no plugin and uses the device clock.
Kids Mode is a per-device lock and stays as it is. These are per-account features, so
they complement it.
Platform
Android TV, Android
Server
Jellyfin
Alternatives considered
- Reusing Kids Mode for time limits. It's a UI restriction, not a schedule.
- Making the admin PIN mandatory. Left optional, so the no-plugin prompt can be declined.
Additional context
- Plugin proposal: [Feature] Managed accounts and server-side PIN Plugin#328
- I'd start with 3 (small, self-contained) and 5, then the plugin-dependent items.
- I used an AI assistant (Claude) to help research and draft this and will disclose it on
each PR. I can test on Android TV and Android phone and will say which device. I have no iOS, tvOS, desktop or web target to test, so I'll keep the changes shared and call out anything platform-specific.
Reactions are currently unavailable
Activity
github-actions commentedon Oct 18, 2026
Thanks for the report, @benklop.
Before anyone can pick this up it needs a little more from you, so it has been labelled Missing Template.
This issue skipped the issue form
It was opened without one of the forms, so the fields that say which app version, platform, server and media this involves are all missing.
The forms also decide how an issue gets labelled, and those labels are what tell this bot whether to ask you for a screenshot or a diagnostic log. Skipping the form means nobody was prompted for the one thing the report actually needs.
Please open a fresh one from New issue and pick the form that fits, then this can be closed as a duplicate. If you would rather not start over, answer the form's fields in a comment below, each under a heading named after the field, such as
### Moonfin version,### Platformand### Server, and they will be picked up.Each label comes off automatically once that piece is sorted.
RadicalMuffinMan commentedon Oct 18, 2026
BEN! Havent seen you since the old repo! How have you been!
benklop commentedon Oct 18, 2026
been doing pretty good! had some difficult family stuff come up for a while and had to put projects on hold, but things are doing better nowdays. I've got a handful of features I'd built on the old repo and wanted to port them over if I can :)
Added a QR code to the Quick Connect sign in screen so a signed in ph…
Added a QR code to the Quick Connect sign in screen so a signed in ph…
Added a QR code to the Quick Connect sign in screen so a signed in ph…
Explained a refused sign in with its own message instead of "Connecti…
Added a Time's up screen that covers the app and stops playback when …