README, TODO and the viewport README say what the tree does (closes #24)
needs-checks
check / check (push) Successful in 2m42s
Rate limit password attempts on /metrics (closes #104)
needs-checks
check / check (push) Successful in 3m26s
Latency statistics written once, thresholds read from CONFIG (closes #102)
needs-checks
check / check (push) Successful in 3m24s
Report handler panics to Sentry when SENTRY_DSN is set (closes #95)
needs-checks
check / check (push) Successful in 3m12s
Add make add-dependency and make tidy (closes #45)
needs-checks
check / check (push) Successful in 3m5s
Target names, URLs and log lines reach the page as text (closes #29)
needs-checks
check / check (push) Successful in 3m13s
Serve Prometheus metrics at /metrics behind basic auth (closes #94)
needs-checks
check / check (push) Successful in 2m47s
Shim make dev and make build, format backend/ markdown (closes #28)
needs-checks
check / check (push) Successful in 3m13s
Move tailwind off the deprecated module.register() (closes #32)
needs-checks
check / check (push) Successful in 3m15s
Frontend unit tests cover durations, colours, statistics and health (closes #21)
needs-checks
check / check (push) Successful in 2m44s
Log fx through slog, snake_case health check keys (closes #27)
needs-checks
check / check (push) Successful in 3m34s
Lint the frontend with eslint in its own Docker stage (closes #47)
needs-checks
check / check (push) Successful in 3m54s
Tap-target check expects a pin button per WAN host row (closes #46)
needs-checks
check / check (push) Successful in 3m25s
Each target's row shows its result as soon as its check ends (closes #91)
needs-checks
check / check (push) Successful in 2m22s