Status Portal
Self-hosted ยท Flask + SQLite ยท AGPL-3.0

Status Portal

A personal status portal for your home server โ€” no Flask knowledge or HTML editing required.

home-lab-status.local
Status Portal public status page showing service groups, an announcement banner and live incidents, light mode Status Portal public status page showing service groups, an announcement banner and live incidents, dark mode Status Portal public status page showing service groups, an announcement banner and live incidents, light mode Status Portal public status page showing service groups, an announcement banner and live incidents, dark mode
Why this one

Built for a home lab, not a SaaS dashboard

Three things most status pages don't even attempt.

01
๐Ÿค–

Discord bot integration

A real Discord bot โ€” not just a webhook โ€” that keeps a self-editing status message live in a channel and answers a /snapshot slash command with full incident detail on demand. Per-server, per-channel and per-user access controls included.

02
๐Ÿ–ฅ๏ธ

Hyper-V VM & host controls

Restart or shut down the host machine, or start and stop individual Hyper-V VMs, straight from the admin panel โ€” gated behind step-up two-factor confirmation before anything destructive actually runs.

03
๐Ÿ”„

Self-updating, with rollback

One click in the admin panel, or one update.py command, pulls the latest release, verifies its integrity, and installs it โ€” backing itself up first, so a bad update rolls back instead of taking your portal down.

Everything else

A full status page, admin panel, and notification system

Nothing here needs a restart to change, and almost nothing needs a code edit.

๐Ÿฉบ

Automated health checks

Per-service checks with retries, a startup grace period, and a "slow" tier โ€” not just up or down.

๐Ÿšจ

Auto-opened incidents

A service going down opens an incident by itself; recovering resolves it. No manual bookkeeping.

๐Ÿ› ๏ธ

Scheduled maintenance

Windows that flip services to "maintenance" and back automatically, covering multiple services at once.

โฑ๏ธ

Scheduled tasks

An admin page for every recurring background job the portal runs โ€” enable, reschedule, or run any of them now.

๐Ÿ‘ค

Jellyfin-backed sign-in

Optional visitor accounts backed by your real Jellyfin logins, fully separate from the admin account.

๐Ÿ”Ž

Unified search

Search Jellyfin and Jellyseerr together, and request anything that's missing in one click.

๐Ÿšฉ

Report a problem

A public form feeds a real admin inbox, with two-way replies per report.

๐Ÿ””

Discord / ntfy / email

Three independent notification channels, all optional, all firing together.

๐Ÿ”Œ

Notification delegation API

Let another app on your server send through your existing channels via a simple authenticated endpoint, instead of building its own.

๐Ÿ”

Two-factor auth

TOTP for the admin login, plus step-up confirmation before any destructive action.

๐Ÿ“›

Custom branding

Your own logo and favicon from the admin panel โ€” no template to fork.

๐Ÿ“ˆ

Uptime & badges

30-day uptime tracking with embeddable SVG badges for any service.

๐Ÿ“ฐ

RSS feed

Subscribe to incidents and maintenance windows the old-fashioned way.

Speaks your stack

Reads live health & activity from the services you already run

Every integration is optional โ€” add only what you run, and each one degrades independently if it's down.

๐ŸŽฌ
Jellyfin
๐ŸŽฅ
Radarr
๐Ÿ“บ
Sonarr
๐Ÿ›ฐ๏ธ
Prowlarr
๐Ÿ’ฌ
Bazarr
โš™๏ธ
Tdarr
๐Ÿ›ก๏ธ
Byparr
๐Ÿ™‹
Seerr
โฌ‡๏ธ
qBittorrent
๐Ÿ–ฅ๏ธ
Hyper-V
๐ŸŽฎ
Games Portal

Trademarks belong to their respective projects. Status Portal isn't affiliated with any of them โ€” it just talks to their APIs.

See it

The public page and the admin panel

Real screenshots, not mockups โ€” including the demo data seeded for documentation.

bash
# clone and install
git clone https://github.com/Adam4125-officiel/Status-Portal.git
cd Status-Portal
pip install -r requirements.txt

# optional: configure webhooks, ports, etc.
cp .env.example .env

# run it
python app.py
Quick start

Running in under a minute

Open http://localhost:5000 for the public page and http://localhost:5000/admin to set the admin password on first launch โ€” the database is a single SQLite file, created automatically.

  • For continuous or production use, run python serve_waitress.py instead of app.py.
  • Docker is also supported, via the included Dockerfile and docker-compose.yml.
  • Updating later is one click in the admin panel, or python update.py.
Full install & config guide on the Wiki โ†’