First login & admin
Your Haven is up and you’ve made an account. Now let’s make you its keeper — an admin — and look around.
Accounts, briefly
Section titled “Accounts, briefly”There are two ways to sign in, and they coexist:
- Mnemonic (12-word phrase). No email, no password, no mail server needed. Your account is a key derived from the phrase, entirely on your device. Best for getting started. Lose the phrase, lose the account — there is no reset.
- Email + password. Familiar, and supports verification + password reset — but it needs an SMTP mail server configured (see Backend environment).
Both are invite-gated: nobody can register without a valid invite code, so your site stays private. See Accounts & the login wall for the full model.
Becoming an admin
Section titled “Becoming an admin”Admin powers (user management, minting invites, forcing metadata re-syncs, health
stats) are granted to accounts whose email is listed in the backend’s
ADMIN_EMAILS setting. Because admin seeding is by email, the admin account must
be an email + password account.
- Configure SMTP and register an email account — see Backend environment → SMTP.
- Add that email to your backend
.env:ADMIN_EMAILS=you@example.com - Recreate the backend container so it picks up the change:
Terminal window docker compose up -d - Log in with that account — you’re now an admin. The Admin entry appears in
the site, and
GET /account/mereturns"is_admin": true.
The admin dashboard
Section titled “The admin dashboard”Once you’re an admin, the dashboard gives you:
- Users — list, promote/demote admins, manage accounts.
- Security — the gatekeeper’s ledger: failed logins, invalid invite codes, rate-limit trips and admin actions, with threat tiles, an activity chart and the top offending IPs (see the security ledger).
- Lumi — the optional in-app chatbot: the master switch, which provider and model answers, the spend guards, and what she has cost so far. Asleep until you wake her, and every member still needs an individual grant on the Users tab.
- Invites — mint shared or single-use invite codes to let new members in.
- Metadata — force a re-sync of the TMDB↔AniList mapping, or trigger a catalogue backfill.
- Health — runtime stats, database-pool usage, and the Source Health view (which only shows your operator-owned sources — Local / Cache / Jellyfin — since the backend itself scrapes nothing).
- Proxy — if you’ve configured the CORS proxy, a live view of which edge hosts are healthy.
Inviting your first members
Section titled “Inviting your first members”Two ways to let people in:
- A shared code — set
SIGNUP_INVITE_CODEto one or more codes (comma-separated). Reusable; hand it to whoever you trust. - Single-use codes — mint them from the admin dashboard, or run the optional Discord invite bot so one trusted operator can mint them with a chat command. Each works exactly once.
Next steps
Section titled “Next steps”- Make playback real: Adding your own sources.
- Offload video bandwidth: The CORS proxy and The companion extension.
- Go production: Single host → Swarm.