Dashboard
The ops dashboard lives at web.level147.net and is protected by Cloudflare Access + Authentik SSO. It is a Next.js app served from a Docker container behind a Cloudflare tunnel.
Access
- Navigate to
https://web.level147.net - Cloudflare Access prompts for your identity (Authentik OIDC)
- After authentication the dashboard loads directly
Layout
The dashboard uses an 8-column CSS grid (4-column on smaller screens) with rows of 160 px. Widgets can be dragged to reorder and resized to any supported size.
Edit mode
Click the pencil icon (top-right of the dashboard) to enter edit mode. Each widget shows:
- A drag handle at the top — drag to reorder within the section
- A size picker at the bottom — select from 1×1, 1×2, 2×2, 4×2, 2×4, 4×4, 8×2
Click the lock icon to exit edit mode and lock the layout. Sizes and order are saved in the browser (localStorage).
Adaptive rendering
Every widget renders meaningfully at each size — not just scaled. Each size key has a distinct layout:
| Size | Semantic | What you see |
|---|---|---|
| 1×1, 1×2 | Tiny/glance | Icon + single number |
| 2×2 | Compact | Hero KPI + status |
| 4×2 | Strip | KPI panel left, detail right |
| 2×4 | Detail | KPI top, scrollable list |
| 4×4, 8×4 | Expanded | Full panel with all data |
| 8×2 | Banner | Full-width headline + summary |
Sections
The dashboard is divided into sections — each section has its own independent drag context:
| Section | Contents |
|---|---|
| Network | Tailscale, Cloudflared, Host Resources |
| Containers | Docker, Portainer |
| Monitoring | Uptime Kuma |
| Infrastructure | Prometheus multi-host |
| Security | Fail2ban |
Widgets
See Widgets for the full widget reference including data sources, API routes, and development guide.
v0.1.0 · d0d7a20 · 2026-06-26