card-grader/static
Barely Removable 3270a9fe69 Harden: cap request body before reading, WAL for concurrent writes, socket timeout, surface unmeasured edges
- _body() read the full declared Content-Length into memory before any size
  check, so MAX_UPLOAD_BYTES could only reject an upload already held in
  RAM. nginx caps this on the proxied path, but the container also listens
  on the LAN, so the app now enforces its own 20MB ceiling and closes the
  connection rather than reading.
- SQLite ran with the default rollback journal and 5s lock timeout, chosen
  when a row was a few KB; rows now carry the original photos, so two
  people grading at once could block each other's History. WAL + 30s.
- No socket timeout meant a stalled keep-alive connection held a worker
  thread indefinitely.
- An edge excluded as a different material was dropped from the UI with no
  explanation, presenting three sides as though they were all four.
2026-08-22 12:56:58 -07:00
..
app.js Harden: cap request body before reading, WAL for concurrent writes, socket timeout, surface unmeasured edges 2026-08-22 12:56:58 -07:00
icon-180.png Initial commit: Card Grader deployed to hippofam.com/cards 2026-08-22 09:22:41 -07:00
icon-192.png Initial commit: Card Grader deployed to hippofam.com/cards 2026-08-22 09:22:41 -07:00
icon-512-maskable.png Initial commit: Card Grader deployed to hippofam.com/cards 2026-08-22 09:22:41 -07:00
icon-512.png Initial commit: Card Grader deployed to hippofam.com/cards 2026-08-22 09:22:41 -07:00
icon.svg Full PSA palette: light silver ground, brand red accent, dark text 2026-08-22 12:41:53 -07:00
index.html Full PSA palette: light silver ground, brand red accent, dark text 2026-08-22 12:41:53 -07:00
manifest.json Full PSA palette: light silver ground, brand red accent, dark text 2026-08-22 12:41:53 -07:00
style.css Full PSA palette: light silver ground, brand red accent, dark text 2026-08-22 12:41:53 -07:00
sw.js Initial commit: Card Grader deployed to hippofam.com/cards 2026-08-22 09:22:41 -07:00