No description
  • Python 92%
  • HTML 6%
  • Roff 1.5%
  • Dockerfile 0.4%
  • Shell 0.1%
Find a file
Vibecoding Maria Matejka 57977aea3b
Some checks failed
deb / deb (push) Has been cancelled
feat(web): make the page installable as an app
Chrome refused to install it ("no-manifest"). Add manifest.json
(standalone, page colours) with 192/512 px icons and a maskable 512 px
one, drawn by tools/make-icons.py, and allow them in the CSP
(manifest-src/img-src 'self', in both the <meta> and the nginx header).
The browser tests' nginx now takes its headers from
deploy/breadbox.nginx.conf, and a new test asks Chrome for
installability errors. The Debian package ships the new files.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q8mYTN3K2MEr4Kvus6oCNB
2026-10-24 20:12:43 +02:00
.forgejo/workflows fix(packaging): ship migration .sql files in the wheel 2026-10-24 14:18:34 +02:00
breadbox feat(web): make the page installable as an app 2026-10-24 20:12:43 +02:00
debian feat(web): make the page installable as an app 2026-10-24 20:12:43 +02:00
deploy feat(web): make the page installable as an app 2026-10-24 20:12:43 +02:00
docs feat(web): make the page installable as an app 2026-10-24 20:12:43 +02:00
tests feat(web): make the page installable as an app 2026-10-24 20:12:43 +02:00
tools feat(web): make the page installable as an app 2026-10-24 20:12:43 +02:00
.dockerignore feat: add backend-only container image for rootless podman 2026-10-24 18:01:26 +02:00
.gitignore feat(debian): add version computation and build wrapper 2026-10-24 14:00:08 +02:00
Dockerfile feat: add backend-only container image for rootless podman 2026-10-24 18:01:26 +02:00
LICENSE chore: license under MIT 2026-10-24 17:25:05 +02:00
pyproject.toml chore: license under MIT 2026-10-24 17:25:05 +02:00
README.md feat(web): make the page installable as an app 2026-10-24 20:12:43 +02:00
SPEC.md feat(web): make the page installable as an app 2026-10-24 20:12:43 +02:00

breadbox

A single-user todo list where new items go on top. It has one SQLite database, a small Python backend that owns it, and two thin clients: a curses CLI and a single web page.

 current  all  deleted                     breadbox
 ──────────────────────────────────────────────────
 > ▢  call the plumber
   ▢  book train to Brno
     ✓  send the invoice
   ▢  reply to Martin
  • Backend: FastAPI on a Unix socket (/run/breadbox/breadbox.sock), with token auth. Tokens are stored as SHA-256 hashes.
  • CLI (breadbox): standard library only. It talks to the socket directly or over an SSH-forwarded socket. It also has script-friendly subcommands (add, ls, done, rm).
  • Web page: one hand-written HTML file, served by nginx over HTTPS. No build step.
  • Admin (breadbox-admin): schema migrations and token management.

Install

On Debian trixie, from the Forgejo package registry:

apt install breadbox

You need to add the repository first, and nginx, TLS and the first token are still manual steps. docs/deployment.md covers all of that and the manual install for other systems.

To run only the backend in rootless podman, with no network and the API reachable through a Unix socket, see docs/container.md.

Use

  • docs/user-manual.md covers the CLI and the web page.
  • man breadbox is the command and key reference.

Develop

apk add python3 py3-pip sqlite     # Debian: apt install python3-venv sqlite3
python3 -m venv .venv
.venv/bin/pip install -e ".[server,dev]"
.venv/bin/python -m pytest

The webapp tests drive headless Chromium through selenium. They skip themselves when chromium and chromedriver aren't on PATH. To build the Debian package, run ./debian/build.sh on a trixie machine (see docs/deployment.md).

Path What
breadbox/ backend (api.py, store.py, auth.py, migrations/), CLI (cli/), web page (web/index.html)
deploy/ systemd units, nginx config, backup script, man page, env file template; deploy/podman/ has the Quadlet and backup timer units
debian/ Debian packaging and the build/publish scripts used by CI
Dockerfile backend-only container image (see docs/container.md)
.forgejo/workflows/ CI: builds the package, publishes it from main
tools/ make-icons.py, which draws the app icons in breadbox/web/
docs/ deployment guide, container guide and user manual. docs/superpowers/ holds design specs and implementation plans
SPEC.md the original design spec

Licence

MIT. See LICENSE.