This website requires JavaScript.
863a1d549d
Deploy main 5e572ce to prod (#198 )
prod
clawbot
2026-10-26 13:10:55 +01:00
5e572ce7f8
next → main: data directory safe as root, version from git, 80% target timeout, report retention (#85 )
main
sneak
2026-10-26 13:10:15 +01:00
437e0ea80c
Merge branch 'main' into next
next
sneak
2026-10-26 13:09:53 +01:00
0d08a75793
README.md rewritten sentence by sentence (closes #189 )
clawbot
2026-10-26 08:12:59 +01:00
8ce69b7b40
test/viewport/README.md rewritten sentence by sentence
clawbot
2026-10-26 06:40:20 +01:00
83a095b572
TODO.md rewritten sentence by sentence
clawbot
2026-10-26 04:59:21 +01:00
8a62f12802
Targets whose home page redirects are checked at /robots.txt (closes #194 )
clawbot
2026-10-26 04:11:48 +01:00
a72797a403
Checks send no Referer header, so Hetzner answers (closes #191 )
clawbot
2026-10-26 02:10:43 +01:00
0c36d79131
main into prod: netwatch as one container, ready for upaas (#74 )
sneak
2026-10-25 02:39:56 +01:00
db5eb507c1
server.go starts listenAndServe in an anonymous function (closes #162 )
v1.0.0-rc2
clawbot
2026-10-19 08:24:49 +02:00
6e4c44b3d6
Match .gitignore, .editorconfig and .golangci.yml to sneak/prompts (closes #174 )
clawbot
2026-10-19 08:22:05 +02:00
91eb3d6771
package.json drops its version field and is private (closes #158 )
clawbot
2026-10-19 08:16:29 +02:00
edcf7f8c3c
TODO.md Status says where release candidates are tagged (closes #157 )
clawbot
2026-10-19 08:13:00 +02:00
5b01b50bc7
netwatch-server refuses arguments it does not understand (closes #179 )
clawbot
2026-10-19 08:09:13 +02:00
7a3c706fe6
main() is one call into internal/cli (closes #160 )
clawbot
2026-10-19 07:53:09 +02:00
7a2b6b0494
script/build stamps lightweight tags too (closes #156 )
clawbot
2026-10-19 07:45:17 +02:00
a42a220bb7
.dockerignore keeps root test binaries and coverage out (closes #155 )
clawbot
2026-10-19 07:42:43 +02:00
65c0b6bcbe
CI checkout fetches all history and tags (closes #153 )
clawbot
2026-10-19 07:32:35 +02:00
8879aeb68e
Bootstrap keeps yarn at its pinned version and node at its pinned major (closes #154 )
clawbot
2026-10-19 07:20:42 +02:00
0ea169ec46
Entrypoint steps are functions called from main (closes #163 )
clawbot
2026-10-19 07:17:32 +02:00
9285591563
Health check answers 503 while report files cannot be written (closes #142 )
clawbot
2026-10-19 06:55:51 +02:00
9677c73e0a
Report file writes run one at a time (closes #150 )
clawbot
2026-10-19 06:02:11 +02:00
f5aa81f024
DEBUG turns debug logging on for any non-empty value (closes #159 )
clawbot
2026-10-19 05:48:20 +02:00
4e3943f02f
Check builds keep Go's modules and caches between runs (refs #118 )
clawbot
2026-10-19 04:26:25 +02:00
648c225919
Discarded-check unit tests check nothing was recorded (closes #151 )
clawbot
2026-10-19 03:44:13 +02:00
be6dc93eaa
Unusable DATA_DIR error names DATA_DIR; report file number is atomic.Int64 (closes #148 , closes #161 )
clawbot
2026-10-19 03:15:35 +02:00
6df743f7fa
Page is sent with Cache-Control: no-cache (closes #141 )
clawbot
2026-10-19 03:10:39 +02:00
984047e6ca
README states what refused reports, one sender and nginx's 413 do (closes #145 , closes #146 , closes #147 )
clawbot
2026-10-19 02:55:29 +02:00
007190b541
Clock errors no longer stop probing; legend reads >=500ms (closes #149 , closes #152 )
clawbot
2026-10-19 01:34:45 +02:00
fd32f348b7
prepare-data-dir leaves files with a second name to their owner (closes #143 )
clawbot
2026-10-19 01:11:41 +02:00
2532da55e9
Client address is the right-most untrusted X-Forwarded-For entry (closes #144 )
clawbot
2026-10-19 00:28:18 +02:00
e43a710114
Summary reads --/-- after an interval change, not 0/26 in red (closes #140 )
clawbot
2026-10-18 23:00:35 +02:00
2861be1c4d
Stopping the server waits for report file writes under way (closes #122 )
v1.0.0-rc1
clawbot
2026-10-14 14:47:01 +02:00
580d12a934
make test no longer runs the frontend's production build (refs #118 )
clawbot
2026-10-14 14:30:03 +02:00
12f3dd5b07
Debug log adds each line instead of drawing the whole panel (closes #131 )
clawbot
2026-10-14 14:13:03 +02:00
2a47fb9a8e
Unset TRUSTED_PROXIES trusts RFC 1918, empty trusts none (closes #129 )
clawbot
2026-10-14 14:01:37 +02:00
cff7b07bbc
Reports refused while report files cannot be written (closes #123 )
clawbot
2026-10-14 13:47:14 +02:00
e628dfe6cf
A handler's panic is logged and counted as 500 (closes #125 )
clawbot
2026-10-14 13:30:11 +02:00
cbcde098dc
Unset TRUSTED_PROXIES trusts the RFC 1918 ranges (closes #119 )
clawbot
2026-10-14 13:01:34 +02:00
73b39e485b
Reports are taken only as application/json (closes #126 )
clawbot
2026-10-14 12:43:25 +02:00
03bc282871
Interval change keeps unreported samples for the reporter (closes #124 )
clawbot
2026-10-14 12:23:13 +02:00
406e073aee
Move to the layout REPO_POLICIES.md gives (closes #30 )
clawbot
2026-10-14 12:01:32 +02:00
b1eefe0c29
Re-vendor the shared files from sneak/prompts at dd4027b (closes #113 )
clawbot
2026-10-07 13:41:50 +02:00
dcdee6bfab
Hetzner checks answer again; failed checks go to the console (closes #114 )
clawbot
2026-10-07 12:24:51 +02:00
186f932eb8
Footer no longer says IPv4 only (closes #111 )
clawbot
2026-10-04 07:38:06 +02:00
64e142c17f
README, TODO and the viewport README say what the tree does (closes #24 )
clawbot
2026-10-04 07:03:05 +02:00
161f955ae2
Latency statistics written once, thresholds read from CONFIG (closes #102 )
clawbot
2026-10-04 06:51:24 +02:00
d40e67d4ab
Rate limit password attempts on /metrics (closes #104 )
clawbot
2026-10-04 06:19:06 +02:00
dc2d240725
Report handler panics to Sentry when SENTRY_DSN is set (closes #95 )
clawbot
2026-10-04 05:57:02 +02:00
00c9f8d7d9
Target names, URLs and log lines reach the page as text (closes #29 )
clawbot
2026-10-04 05:35:36 +02:00
dc11beb6fe
Add make add-dependency and make tidy (closes #45 )
clawbot
2026-10-04 05:17:33 +02:00
81d4153e78
Serve Prometheus metrics at /metrics behind basic auth (closes #94 )
clawbot
2026-10-04 04:58:47 +02:00
d412815953
Shim make dev and make build, format backend/ markdown (closes #28 )
clawbot
2026-10-04 04:14:59 +02:00
9b548da90d
Move tailwind off the deprecated module.register() (closes #32 )
clawbot
2026-10-04 03:51:55 +02:00
3b1262718d
Frontend unit tests cover durations, colours, statistics and health (closes #21 )
clawbot
2026-10-04 03:25:06 +02:00
82bd142429
Log fx through slog, snake_case health check keys (closes #27 )
clawbot
2026-10-04 03:11:43 +02:00
924527b744
Lint the frontend with eslint in its own Docker stage (closes #47 )
clawbot
2026-10-04 01:58:07 +02:00
2f0489e3a4
Tap-target check expects a pin button per WAN host row (closes #46 )
clawbot
2026-10-04 01:53:02 +02:00
91856fa170
Each target's row shows its result as soon as its check ends (closes #91 )
clawbot
2026-10-04 01:41:04 +02:00
39ee6ca839
Entrypoint acts as root on nothing outside /data (closes #80 )
clawbot
2026-10-03 18:24:38 +02:00
e4df415676
Delete the oldest report files to stay under the size cap (closes #54 )
clawbot
2026-10-03 17:51:08 +02:00
9e4d3fdb54
Lint's .golangci.yml check says which fix applies (closes #34 )
clawbot
2026-10-03 17:14:25 +02:00
aa35625d47
Go tests run with -race and -cover under Go's own timeout (closes #88 )
clawbot
2026-10-03 16:26:17 +02:00
0ab6418e3d
Target check timeout is 80% of the refresh interval (closes #78 )
clawbot
2026-10-03 15:36:47 +02:00
4ce0814b14
Stamp the git tag or short commit in a plain docker build (closes #86 )
clawbot
2026-10-02 04:26:40 +02:00
e6d6815ecb
Remove Buildarch: read the architecture at run time (closes #83 )
clawbot
2026-10-02 01:05:09 +02:00
871b986978
next into main (#73 )
sneak
2026-09-29 12:04:30 +02:00
7dfb3b8c32
Merge branch 'main' into next
sneak
2026-09-29 12:04:10 +02:00
a5ca73c585
Container sets up its own data directory (closes #75 ) (#76 )
clawbot
2026-09-29 12:03:59 +02:00
f423768975
cibuild: the org model, which runs every check uncached (closes #37 )
clawbot
2026-09-29 11:55:52 +02:00
c226ceee01
chore(backend): re-vendor .golangci.yml with gomodguard_v2 (closes #41 )
clawbot
2026-09-29 10:56:00 +02:00
bd08e901ee
next into main: netwatch as one container, ready for upaas (#49 )
sneak
2026-09-29 10:43:12 +02:00
d81da05748
nginx: security headers on every response (closes #18 )
clawbot
2026-09-29 10:22:12 +02:00
d74d1e311e
fix(backend): cut request log fields to the log bound (closes #60 )
clawbot
2026-09-29 09:39:11 +02:00
8833603eff
nginx: trust X-Forwarded-For only from TRUSTED_PROXIES (closes #64 )
clawbot
2026-09-29 08:55:47 +02:00
6022cc8b02
fix(backend): give each report file a name of its own (closes #61 )
clawbot
2026-09-29 08:05:26 +02:00
d2f219ca19
upaas: health check, settings checked at start, README section (closes #59 )
clawbot
2026-09-29 06:39:10 +02:00
ced1956b06
nginx: listen on PORT, default 8080; server_tokens off (closes #26 )
clawbot
2026-09-29 04:55:48 +02:00
ea66caf338
fix(backend): rate-limit and cap report ingest, drop wildcard CORS (closes #20 )
clawbot
2026-09-29 04:22:19 +02:00
bbcc7d921d
build: one image, nginx in front of the backend on loopback (closes #52 )
clawbot
2026-09-29 02:59:33 +02:00
de4e86c433
build: unify the gate so root make check covers the backend (closes #16 )
clawbot
2026-09-29 01:22:08 +02:00
45d2ad21bc
feat(frontend): post collected samples to /api/v1/reports (closes #53 )
clawbot
2026-09-28 23:39:11 +02:00
503399e020
fix(backend): report ingest correctness: 500 on a refused report, 413 on oversize, global body cap (closes #23 )
clawbot
2026-09-28 20:39:39 +02:00
7a1ee6e5a8
lint: adopt org-standard .golangci.yml and golangci-lint v2.12.2 (closes #14 )
clawbot
2026-09-21 19:30:06 +02:00
d7cf010e00
fix(server): shut down through fx so buffered reports flush (closes #22 )
clawbot
2026-09-21 18:47:12 +02:00
14eb376d79
test: automated responsive-layout harness (closes #13 )
clawbot
2026-09-21 18:29:20 +02:00
f3895789d2
feat(backend): server hardening: timeouts, security headers, trusted-proxy client IP (closes #19 )
clawbot
2026-09-21 15:05:25 +02:00
f7c7f92e27
fix(frontend): meet the 44x44 minimum tap target on every control (closes #43 )
clawbot
2026-08-10 16:12:00 +02:00
852a11eec2
fix: wrap per-host status line so 320px viewport does not scroll (closes #42 )
clawbot
2026-08-10 16:07:28 +02:00
25a852d35c
build: Dockerfile.backend multistage lint stage (closes #17 )
clawbot
2026-08-10 16:04:48 +02:00
a644efe9ff
chore: root .editorconfig and hardened .gitignore (closes #15 )
clawbot
2026-08-10 15:47:49 +02:00
fbfe1df349
frontend: gate the Docker build on make check (closes #11 ) (#12 )
clawbot and sneak
2026-08-07 17:46:37 +02:00
485aa4194a
Merge branch 'main' into feature/mobile-detection-message
feature/mobile-detection-message
sneak
2026-07-25 17:49:06 +07:00
e45bc578b2
scripts-to-rule-them-all (#10 )
sneak
2026-07-07 02:14:16 +02:00
247a3c33fd
TODO (#9 )
sneak
2026-07-06 21:20:37 +02:00
a279cf8583
feat: add mobile viewport detection with friendly unavailable message
user
2026-03-16 21:18:55 -07:00
1fb3ff2954
feat: responsive mobile layout for host rows (closes #2 ) (#5 )
clawbot and user
2026-03-10 19:56:40 +01:00
36202e1a3a
Merge pull request 'fix: show 'not available on mobile' message instead of broken layout' (#3 ) from fix/mobile-not-available into main
sneak
2026-02-27 11:07:11 +01:00
b6edfb2857
feat: responsive mobile layout for monitoring dashboard
feat/responsive-mobile-redesign
user
2026-02-27 02:04:41 -08:00
4ecdd8027b
feat: add mobile detection with friendly unsupported message
feature/mobile-detection
clawbot
2026-02-27 02:02:04 -08:00