sys://home online

🖥️ home control deck

Live telemetry, app fleet, logs, stress lab and a utility belt for this box.

Resource graphs graphs are drawn from the stored history — they survive a refresh

System

CPU
Cores
Load avg (1m)
Memory
Swap
CPU temp
Containers
Uptime
Platform
CPU %
overall utilisation across all cores
Memory · RAM %
used of total
Storage · Disk
filesystem usage
GPU · VRAM
video memory in use
🎮 No GPU detected on this host VRAM graphing activates automatically if an NVIDIA GPU is exposed.
Network · Latency
round-trip latency to the internet
🌐 Measuring network…
Requests · per second /s
HTTP requests hitting this server
Funnel restarts · last 24h
how often the public Tailscale Funnel had to be restarted
livestreaming a sample every second…

Apps on this server

Discovered live from Docker — every app published via the edge proxy shows up here automatically. The ☰ button jumps to that app's logs.

All containers

ContainerStateCPUMemoryImageStatus

Everything running on this box's Docker, not just the routed apps. CPU/MEM sampling asks dockerd for a real 1-second delta, so it takes a moment.

Filters

Querying this box's logs…

Searches this server's VictoriaLogs — Docker container output, infra error logs and the host journal — shipped by the logger agent. Newest first. Click a row to expand it; click a container or level to filter by it.

TimeSourceContainerLevelMessage

Filters

Tailing the edge proxy…

Every request that reaches this box's edge proxy (Caddy), tailed live from its access log in VictoriaLogs. Newest first. Click a row to expand it — full headers, forward chain and the request body; click a client, method, status or app to filter by it. Bodies are not captured on credential routes (/auth, /vault) or large-upload routes (/apps, /llm).

TimeClientMethodStatusAppPathmsSize

Weekly cross-server backup

Loading backup state…

Every week this box pushes its data to its peer box and stores the peer's snapshots in return, so one dead disk never loses data. Every database is included (MySQL dump, SQLite stores, volume DBs); anything re-downloadable from the internet (fetched media, model caches) is not. Managed by infra backup in the infra repo.

Push runs from this box

TimeResultDetail

Peer snapshots held on this box

Full benchmark suite

Forty-odd tests across CPU, runtime, crypto, compression, memory, disk and network — scored, and kept in their real units.

Every test repeats a fixed unit of work for a fixed time, so the numbers compare across boxes. Scores are relative to one njvhost core — 1000 means njvhost-class per core, 2000 means twice that. Each test also keeps its own unit, because a score is for ranking and MB/s is for deciding. Run it on every box at once from the fleet dashboard's Lab tab.

Run a test

Pick a test. Work runs on the server, not your browser.

Each worker is a real OS thread grinding a heavy math kernel for a fixed time budget. The numbers are work throughput — bigger is better. Knobs are clamped server-side so the box can't be melted. Watch the Monitor tab to see the cores light up.

HTTP load test

Fire real HTTP requests at this server and measure how many it can handle.

The box fires real HTTP requests at its own listener over loopback against a tiny endpoint, as many in flight at once as you ask for. The load is generated from worker threads on other cores, so the server's event loop is the only thing under test (not sharing its core with the load generator), and keep-alive connections are warmed up first — so the numbers reflect the server's real steady-state capacity. It reports throughput (requests/sec) and the latency distribution. The sweep ramps concurrency 1→N so you can see where req/s plateaus and tail latency starts to climb. Watch the Requests graph on the Monitor tab light up.

Push it to failure

Climbs concurrency until the server starts dropping requests, its throughput collapses, or tail latency blows up — then reports where it broke.

⚠️ Aggressive — this is built to find the breaking point, so the server may drop requests or briefly restart under it. Each run is time-bounded and only stresses this one container, which recovers when it ends. Keep-alive runs warm their connections first, so the break reflects real request-handling saturation (and so varies by hardware). New connection per request is the harshest setting and measures something different — connection-setup limits: it churns sockets and can exhaust ports. Pair it with the heavy /metrics target to push hardest.

Make a QR code

0 bytes

Generated entirely in your browser — nothing is sent to the server. Higher error correction survives more damage/dirt on the printed code but holds less data. Point any phone camera at the result to scan it.

🔳 Type or paste something above to generate a QR code.