Field-service operations for the office: schedule jobs, assign technicians, track parts, and record what to bill. Internal tool — no public signup; accounts are created by an admin or by the seed script.
cargo run -p acme-web --bin seed
cargo run -p acme-api &
cargo run -p acme-web --bin acme-web
Then open http://127.0.0.1:8000 and sign in as
rosa@acmedispatch.example / dispatch-admin. The API listens on
http://127.0.0.1:8080 (Authorization: Bearer <token>, tokens issued from
/tokens in the web app). See docs/runbook.md for environment variables,
testing, and linting.
| Package | Contents |
|---|---|
packages/core |
Domain: entities, the job status machine, the appointment overlap rule, stock rules, the pricing engine, and the SQLite store. No HTTP. Most unit tests live here. |
apps/api |
JSON REST API (/api/v1/...), bearer-token auth. Tower-based integration tests. |
apps/web |
Server-rendered UI (Axum + Askama), session auth via axum-login. |
docs/architecture.md— package boundaries and whydocs/pricing.md— the billing rules, in prosedocs/runbook.md— running, seeding, testing, lintingdocs/domain.md— the field-level contract every entity follows