No description
- JavaScript 60%
- HTML 39%
- Dockerfile 1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Fixes CVE-2026-111497 (Brotli RCE) and the TLS hostname-check bypasses from https://nodejs.org/en/blog/vulnerability/october-2026-security-releases Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> |
||
| .github | ||
| .dockerignore | ||
| .gitignore | ||
| Dockerfile | ||
| index.html | ||
| README.md | ||
| server.js | ||
| test.js | ||
groceries
Shared shopping lists (tabs on top, all shared between users). Tap to tick, tap a ticked item (or a suggestion) to re-add. Live sync between everyone logged in.
Zero dependencies, Node 22.13+ (uses built-in node:sqlite). The whole frontend is ~2.5KB gzipped.
ADMIN_USER=me ADMIN_PASSWORD=change-me-please node server.js # http://localhost:3000
node test.js # tests
ADMIN_USER / ADMIN_PASSWORD create the first user on an empty database (ignored afterwards). Add more users from the users icon in the top bar. PORT and DB (SQLite path) are optional.
Docker
docker run -d -p 3000:3000 -v groceries:/data -e ADMIN_USER=me -e ADMIN_PASSWORD=change-me-please ghcr.io/backmeupplz/groceries
Also available as an app on MyGround.
Security notes
- Every user is an equal admin: anyone logged in can add/remove users and lists.
- Behind an HTTPS proxy, pass
X-Forwarded-Proto: httpsso the session cookie becomesSecure/__Host-. - On plain-http
host:portsetups, browsers share cookies across ports, so other apps on the same host can see the session cookie. Give it its own hostname if you don't trust the neighbours.