Parcel tracking system - email-driven with AI-bootstrapped parsers
  • Python 68.2%
  • TypeScript 30.7%
  • CSS 0.3%
  • Dockerfile 0.2%
  • Shell 0.2%
  • Other 0.3%
Find a file
2026-07-10 22:57:14 +02:00
.forgejo/workflows fix(ci): raise coverage gate to 80%, pin gitleaks, delete stale VERSION file 2026-07-05 16:55:21 +02:00
alembic feat: Phase 1 — ORM + Alembic infrastructure 2026-07-06 08:41:23 +02:00
docs fix: AI misread FedEx DD/MM/YYYY scan dates as MM/DD/YYYY; add fedex_web scraper 2026-07-10 21:23:22 +02:00
fixtures/emails chore: dev fixtures infra, Dockerfile carrier-meta stage, dev seed key 2026-06-30 00:26:27 +02:00
frontend fix: dashboard ETA column shows "overdue" for already-delivered shipments 2026-07-10 22:53:36 +02:00
notifiers refactor(db): retrofit all raw SQL outside db.py into named functions 2026-07-05 20:35:41 +02:00
packs fix: AI misread FedEx DD/MM/YYYY scan dates as MM/DD/YYYY; add fedex_web scraper 2026-07-10 21:23:22 +02:00
routers feat: add FedEx carrier pack; fix 500 on event details with mixed tz timestamps 2026-07-10 21:03:55 +02:00
scrapers fix(types): make mypy an enforced CI gate instead of || true 2026-07-05 16:47:59 +02:00
scripts test(e2e): add Playwright suite for login, ingest, timeline, state change, delete 2026-07-05 18:27:01 +02:00
tests fix: AI misread FedEx DD/MM/YYYY scan dates as MM/DD/YYYY; add fedex_web scraper 2026-07-10 21:23:22 +02:00
.dockerignore security: non-root container, tighten .dockerignore, add check script 2026-06-28 13:48:54 +02:00
.editorconfig DevEx: Add .editorconfig for consistent formatting 2026-06-27 10:03:28 +02:00
.env.example feat: add multi-user auth, data isolation, and admin UI 2026-06-28 12:40:15 +02:00
.env.test DevEx: Add .env.test for test environment defaults 2026-06-27 10:07:33 +02:00
.gitattributes DevEx: Add .gitattributes for consistent line endings 2026-06-27 10:08:19 +02:00
.gitignore test(e2e): add Playwright suite for login, ingest, timeline, state change, delete 2026-07-05 18:27:01 +02:00
.pre-commit-config.yaml ci: add frontend ESLint, Gitleaks, Trivy image scan 2026-06-28 13:34:29 +02:00
.python-version DevEx: Pin Python version (3.12) 2026-06-27 10:07:21 +02:00
.trivyignore fix: ignore GHSA-537c-gmf6-5ccf in Trivy CVE scan 2026-06-30 21:13:29 +02:00
AGENTS.md Require auth for API release endpoint 2026-07-05 20:49:10 +02:00
ai.py fix: AI misread FedEx DD/MM/YYYY scan dates as MM/DD/YYYY; add fedex_web scraper 2026-07-10 21:23:22 +02:00
alembic.ini feat: Phase 1 — ORM + Alembic infrastructure 2026-07-06 08:41:23 +02:00
auth.py feat: Phase 1 — ORM + Alembic infrastructure 2026-07-06 08:41:23 +02:00
carrier_registry.py fix(types): make mypy an enforced CI gate instead of || true 2026-07-05 16:47:59 +02:00
CHANGELOG.md docs: regenerate CHANGELOG.md for v0.17.3 [skip ci] 2026-07-10 22:57:14 +02:00
CLAUDE.md Implement GDPR controls and onboarding 2026-07-06 06:20:14 +02:00
CODEOWNERS DevOps: Add CODEOWNERS for code review routing 2026-06-27 10:07:30 +02:00
COMMERCIAL-LICENSE.md license: adopt Elastic License 2.0 2026-06-28 14:31:16 +02:00
config.py Implement GDPR controls and onboarding 2026-07-06 06:20:14 +02:00
CONTRIBUTING.md license: adopt Elastic License 2.0 2026-06-28 14:31:16 +02:00
db.py feat: Phase 3 — admin backend (stats, role PATCH, signup toggle) 2026-07-06 08:52:43 +02:00
dev.sh chore: dev fixtures infra, Dockerfile carrier-meta stage, dev seed key 2026-06-30 00:26:27 +02:00
docker-compose.example.yml fix(deploy): fix broken image healthcheck, add public reference compose 2026-07-05 16:17:42 +02:00
docker-compose.yml fix(deploy): fix broken image healthcheck, add public reference compose 2026-07-05 16:17:42 +02:00
Dockerfile build(frontend): run vitest in the Docker frontend-build stage 2026-07-05 17:43:50 +02:00
email_service.py feat: Phase 2 — fastapi-users wiring (backend, tests green) 2026-07-06 08:50:06 +02:00
eta_calculator.py refactor: extract stats/ETA/releases out of main.py 2026-07-05 17:16:35 +02:00
fapi_users.py feat: Phase 2 — fastapi-users wiring (backend, tests green) 2026-07-06 08:50:06 +02:00
FEATURES.md chore: use git.stahmer.net (HTTPS) consistently throughout 2026-06-27 18:49:11 +02:00
imap_poller.py feat(ingest): split Apple-Mail-style bundled forwards into individual ingests 2026-07-04 09:09:39 +02:00
ingest.py Implement GDPR controls and onboarding 2026-07-06 06:20:14 +02:00
LICENSE license: adopt Elastic License 2.0 2026-06-28 14:31:16 +02:00
logging_config.py feat: debug logging toggle in admin settings 2026-06-28 19:44:52 +02:00
main.py feat: Phase 1 — ORM + Alembic infrastructure 2026-07-06 08:41:23 +02:00
Makefile Implement GDPR controls and onboarding 2026-07-06 06:20:14 +02:00
metrics.py DevSecOps: Add simple metrics module for request counting (iteration 50) 2026-06-27 10:08:32 +02:00
middleware.py fix(logging): register AccessLogMiddleware and add request-ID correlation 2026-07-05 16:08:22 +02:00
models.py feat: Phase 1 — ORM + Alembic infrastructure 2026-07-06 08:41:23 +02:00
mypy.ini Shift-left: Add mypy type checking to CI (informational, non-blocking) 2026-06-27 10:35:35 +02:00
orm.py feat: Phase 1 — ORM + Alembic infrastructure 2026-07-06 08:41:23 +02:00
pii.py feat: commit Presidio PII module (close latent prod break) 2026-06-30 23:54:48 +02:00
pytest.ini test: implement quality findings — API tests, AI tests, scraper tests, DB fixtures, coverage gate 2026-06-27 16:42:16 +02:00
rate_limit.py security: make write/ingest rate limits per-user 2026-07-05 15:51:42 +02:00
README.md docs: add README, update SECURITY for public release 2026-06-28 14:35:55 +02:00
request_context.py fix(logging): register AccessLogMiddleware and add request-ID correlation 2026-07-05 16:08:22 +02:00
requirements-dev.txt test: implement quality findings — API tests, AI tests, scraper tests, DB fixtures, coverage gate 2026-06-27 16:42:16 +02:00
requirements.lock feat: Phase 1 — ORM + Alembic infrastructure 2026-07-06 08:41:23 +02:00
requirements.txt feat: Phase 1 — ORM + Alembic infrastructure 2026-07-06 08:41:23 +02:00
ruff.toml fix: resolve post-merge issues — db.py migration ordering, Dashboard.tsx structure, lint, test assertions 2026-06-27 17:09:41 +02:00
scheduler.py Implement GDPR controls and onboarding 2026-07-06 06:20:14 +02:00
schemas.py feat: Phase 3 — admin backend (stats, role PATCH, signup toggle) 2026-07-06 08:52:43 +02:00
SECURITY.md security: add response security headers, gate /metrics, neutralize defaults 2026-07-05 15:56:26 +02:00
settings.py feat: add FedEx carrier pack; fix 500 on event details with mixed tz timestamps 2026-07-10 21:03:55 +02:00
THIRD_PARTY_NOTICES.md license: adopt Elastic License 2.0 2026-06-28 14:31:16 +02:00
user_manager.py feat: Phase 2 — fastapi-users wiring (backend, tests green) 2026-07-06 08:50:06 +02:00
user_schemas.py feat: Phase 2 — fastapi-users wiring (backend, tests green) 2026-07-06 08:50:06 +02:00

Trackbox

AI-powered parcel tracking. Ingests shipping notification emails, extracts tracking numbers, and scrapes carrier APIs for live status updates.

Features

  • Email ingestion via IMAP polling
  • AI-powered tracking number extraction (OpenAI)
  • Multi-carrier scraping (DHL, GLS, DPD, Hermes, UPS, FedEx, and more)
  • Real-time status timeline with push notifications (ntfy, MQTT, Signal)
  • Multi-user with invite-based registration
  • Web dashboard with shipment management, stats, and settings

Self-Hosting

docker pull git.stahmer.net/bullitt/trackbox:latest

See .env.example for required environment variables and docker-compose.yml for a ready-to-run stack.

Development

python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt -r requirements-dev.txt
make dev        # backend with hot reload
cd frontend && npm ci && npm run dev  # frontend dev server

License

This project is source-available under the Elastic License 2.0.

You may self-host the application for private or internal use. You may inspect, modify, and redistribute the source code under the terms of the Elastic License 2.0.

You may not offer this project, modified versions of this project, or substantially similar functionality based on this codebase as a hosted or managed service to third parties without a separate commercial license from the project owner.

Third-party dependencies remain licensed under their respective licenses. See THIRD_PARTY_NOTICES.md.

For commercial licensing inquiries, see COMMERCIAL-LICENSE.md.