{"id":50357045,"url":"https://github.com/wvogel/uptime-kuma-status","last_synced_at":"2026-05-29T23:04:47.967Z","repository":{"id":349517841,"uuid":"1202657929","full_name":"wvogel/uptime-kuma-status","owner":"wvogel","description":"Compact status page for multiple Uptime Kuma instances — hundreds of monitors in a dense, Apple System Status-style layout","archived":false,"fork":false,"pushed_at":"2026-04-18T16:03:58.000Z","size":126,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-18T17:30:29.255Z","etag":null,"topics":["dashboard","devops","docker","fastapi","monitoring","oauth2-proxy","python","self-hosted","status-page","uptime-kuma","uptime-monitoring","valkey"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wvogel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-06T09:03:45.000Z","updated_at":"2026-04-18T16:04:02.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/wvogel/uptime-kuma-status","commit_stats":null,"previous_names":["wvogel/uptime-kuma-status"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/wvogel/uptime-kuma-status","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wvogel%2Fuptime-kuma-status","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wvogel%2Fuptime-kuma-status/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wvogel%2Fuptime-kuma-status/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wvogel%2Fuptime-kuma-status/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wvogel","download_url":"https://codeload.github.com/wvogel/uptime-kuma-status/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wvogel%2Fuptime-kuma-status/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33673683,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-29T02:00:06.066Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dashboard","devops","docker","fastapi","monitoring","oauth2-proxy","python","self-hosted","status-page","uptime-kuma","uptime-monitoring","valkey"],"created_at":"2026-05-29T23:04:47.891Z","updated_at":"2026-05-29T23:04:47.957Z","avatar_url":"https://github.com/wvogel.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Uptime Kuma Status\n\nCompact status page for multiple [Uptime Kuma](https://github.com/louislam/uptime-kuma) instances. Displays hundreds of monitors across instances in a dense, Apple System Status-style layout — because Uptime Kuma's built-in status pages waste too much space.\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![Python](https://img.shields.io/badge/python-3.12-blue.svg)](https://www.python.org/)\n[![FastAPI](https://img.shields.io/badge/FastAPI-0.115-009688.svg)](https://fastapi.tiangolo.com/)\n[![Docker](https://img.shields.io/badge/docker-ready-2496ED.svg?logo=docker\u0026logoColor=white)](Dockerfile)\n[![Uptime Kuma](https://img.shields.io/badge/Uptime%20Kuma-compatible-5CDD8B.svg)](https://github.com/louislam/uptime-kuma)\n[![Changelog](https://img.shields.io/badge/changelog-keepachangelog-orange.svg)](CHANGELOG.md)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md)\n\n## Features\n\n- **Compact Layout** — Apple-inspired design with masonry grid, colored status dots, monitor hierarchy\n- **Multi-Instance** — Aggregate monitors from multiple Uptime Kuma instances\n- **Real-Time Updates** — WebSocket + 10s HTTP polling, Valkey-backed shared cache\n- **Admin GUI** — Manage instances, hide/show monitors, incidents, footer, settings (behind oauth2-proxy)\n- **Bilingual** — German / English, switchable on both pages\n- **Theme** — Light / Dark / Auto with live OS preference detection\n- **Incidents** — Severity levels, end time with auto-resolve (30 min grace period), updates timeline with severity changes, drag \u0026 drop sorting\n- **Smart Outage List** — Groups fail as \"degraded\" when partially down, redundant/duplicate monitor names are collapsible with `+` indicator and hover tooltip\n- **Optional Public SSO** — Put the public page behind oauth2-proxy as well, logged-in user and logout button shown automatically\n- **Fullscreen / Wall Display Mode** — Real F11 fullscreen triggers scaled-up layout (1080p / 2K / 4K tiers) for distance readability\n- **Monitor Search** — Client-side instant filter for large monitor lists in the admin\n- **No Direct DB Access** — Uses [uptime-kuma-api](https://github.com/wvogel/uptime-kuma-api) sidecar proxy for secure read-only access\n\n## Architecture\n\n![Architecture](docs/architecture-en.svg)\n\n- **Admin app** fetches from uptime-kuma-apis every 10s, writes to Valkey + manages SQLite config\n- **Public app** reads from Valkey (monitors) + SQLite (settings, incidents, footer) — no writes\n- **SQLite** stores configuration: instances, hidden monitors, incidents, settings, footer items\n- **Valkey** stores the live monitor/heartbeat data as shared cache\n\n## Quick Start\n\n### 1. Deploy uptime-kuma-api sidecars\n\nAdd [uptime-kuma-api](https://github.com/wvogel/uptime-kuma-api) to each Uptime Kuma instance's `docker-compose.yml`. The admin GUI generates the snippet with API key when you add an instance.\n\n### 2. Deploy uptime-status\n\n```bash\ngit clone https://github.com/wvogel/uptime-kuma-status.git\ncd uptime-kuma-status\ncp .env.example .env\ncp oauth2-proxy.env.example oauth2-proxy.env\n# Edit both .env files\ndocker compose up -d\n```\n\n### 3. Configure\n\n- Open the admin page (behind oauth2-proxy)\n- Add Uptime Kuma instances (name + uptime-kuma-api URL)\n- Copy the generated docker-compose snippet to each Kuma instance\n- Configure footer, incidents, logos, and settings\n\n## Docker Compose Services\n\n| Service | Purpose | Port | Network |\n|---------|---------|------|---------|\n| `uptime-status-admin` | Admin UI + API fetcher | 80 | default |\n| `uptime-status-public` | Public status page | 80 | default + shared-npm |\n| `uptime-status-oauth2-proxy` | Auth proxy for admin | 80 | default + shared-npm |\n| `valkey` | Shared cache (Redis-compatible) | 6379 | default |\n\n## Environment Variables\n\n### .env\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `SECRET_KEY` | *required* | Fernet key for API key encryption |\n| `DATABASE_PATH` | `data/uptime-status.db` | SQLite database path |\n| `CACHE_INTERVAL` | `10` | Fetch interval in seconds |\n\nGenerate a secret key:\n```bash\npython3 -c \"import base64,os;print(base64.urlsafe_b64encode(os.urandom(32)).decode())\"\n```\n\n### oauth2-proxy.env\n\nSee `oauth2-proxy.env.example` for OIDC configuration. Uses Valkey for session storage.\n\n## Screenshots\n\n### Status Page (Light)\nCompact masonry grid with colored status dots. Monitor groups from Uptime Kuma hierarchy. Incidents and affected services at top.\n\n### Status Page (Dark)\nFull dark mode support with automatic theme detection.\n\n### Admin — Instances\nSortable instance list with connection status and docker-compose snippet generation.\n\n### Admin — Monitors\nTree view with hierarchy, toggle visibility per monitor, sidebar navigation by instance.\n\n### Admin — Incidents\nDraggable incident list with severity levels, bilingual titles, and datetime.\n\n## Tech Stack\n\n- **Backend**: Python, FastAPI, SQLAlchemy, httpx\n- **Frontend**: Vanilla JS, Jinja2 templates, CSS custom properties\n- **Cache**: Valkey (Redis-compatible)\n- **Auth**: oauth2-proxy (OIDC)\n- **Database**: SQLite (config), Valkey (monitor cache)\n- **API Proxy**: [uptime-kuma-api](https://github.com/wvogel/uptime-kuma-api)\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwvogel%2Fuptime-kuma-status","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwvogel%2Fuptime-kuma-status","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwvogel%2Fuptime-kuma-status/lists"}