A local-only task tracker: tasks with status, priority, and free-form description. Built for personal use on localhost, not for deployment.
The idea is to lean on a Docker daemon that's already running in the background: an extra container for a focused tool costs almost nothing — roughly 30 MB of RAM. It's an alternative to sticky notes and .txt files when a task needs a bit more structure but doesn't justify a real product.
TaskTracker/
├─ src/
│ ├─ server.mts ← HTTP + SQLite
│ ├─ page.html
│ └─ assets/ ← vanilla JS + CSS
└─ Dockerfile
Everything else — tests/, docker-compose.yml, lockfiles, tsconfig — is plumbing.
- Tasks with
text,description,status(open/in_progress/done/cancelled), andpriority(low/medium/high) - Filter by status and priority; search across
textanddescription - Counts per status and per priority
- Pagination, 20 per page
- Light / dark / auto theme
Runs on port 3747.
- Node.js 24+ (uses native
.mtstype stripping andnode:sqlite) - Docker + Docker Compose (the npm scripts wrap them)
npm start # docker compose up -d --build
npm stop # docker compose down --remove-orphansOpen http://localhost:3747. Data lives in a local SQLite file at ./data/tasks.db inside the project directory, and survives container rebuilds — stop does not touch the volume.
npm run typecheck # tsc --noEmit
npm run test:unit # node --test against a transient server
npm run test:e2e # Playwright suite, isolated docker stack
npm run clean:e2e # tear down the e2e stackE2E tests spin up the app with a tmpfs data volume and drive it from a separate Playwright container — heavy browser deps stay out of the app's own package.json.
src/server.mts— single-file HTTP server onnode:http+node:sqlite. No runtime dependencies.src/page.html,src/assets/— static frontend, vanilla JS, no framework.Dockerfilecopiessrc/intonode:24-alpineand runsnode server.mts.- API lives under
/api/...and speaks JSON.
Personal-use app meant to run on localhost. Multi-user access, exposure beyond localhost, internet-grade hardening, and open-ended feature creep are explicitly out of scope.
The server intentionally has no auth, no CSP, no rate limiting, and no structured logging — fine for localhost, not safe to copy as a starting point for anything user-facing.
MIT. Bundled Inter font is licensed separately under the SIL Open Font License 1.1 — see src/assets/OFL.txt.