Skip to content

0x2E757/TaskTracker

Repository files navigation

Task Tracker

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.

Core concept

TaskTracker/
├─ src/
│  ├─ server.mts    ← HTTP + SQLite
│  ├─ page.html
│  └─ assets/       ← vanilla JS + CSS
└─ Dockerfile

Everything else — tests/, docker-compose.yml, lockfiles, tsconfig — is plumbing.

Features

  • Tasks with text, description, status (open / in_progress / done / cancelled), and priority (low / medium / high)
  • Filter by status and priority; search across text and description
  • Counts per status and per priority
  • Pagination, 20 per page
  • Light / dark / auto theme

Runs on port 3747.

Requirements

  • Node.js 24+ (uses native .mts type stripping and node:sqlite)
  • Docker + Docker Compose (the npm scripts wrap them)

Run

npm start    # docker compose up -d --build
npm stop     # docker compose down --remove-orphans

Open 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.

Tests

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 stack

E2E 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.

Architecture

  • src/server.mts — single-file HTTP server on node:http + node:sqlite. No runtime dependencies.
  • src/page.html, src/assets/ — static frontend, vanilla JS, no framework.
  • Dockerfile copies src/ into node:24-alpine and runs node server.mts.
  • API lives under /api/... and speaks JSON.

Scope

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.

License

MIT. Bundled Inter font is licensed separately under the SIL Open Font License 1.1 — see src/assets/OFL.txt.

About

A local-only task tracker: tasks with status, priority, and free-form description. Built for personal use on localhost, not for deployment.

Topics

Resources

License

Stars

Watchers

Forks

Contributors