# with — with.bowden.works

The ground-up rebuild of work.bowden.works: time tracking, invoicing,
and credit-card pass-through billing for Bowden Works, growing into
multi-agency project management and bookkeeping. One container:
FastAPI + SQLAlchemy 2/Alembic serving a Vite React SPA, with a
Postgres 17 sidecar (bound 127.0.0.1 only). Built to feature parity
with the old app from a complete, adversarially-reviewed plan; the
old app stays the live source of truth until cutover (M9).

## Where everything is

| What | Where |
|---|---|
| Operating rules for build sessions | [CLAUDE.md](CLAUDE.md) |
| Current milestone, blockers, session log | [BUILD-STATE.md](BUILD-STATE.md) |
| The founding spec (25 docs; the ladder is 09-build-plan.md) | `/srv/apps/work/docs/rebuild/` |
| Project memory: docs discipline, feature docs, ADRs | [docs/README.md](docs/README.md) |
| Rian-facing parity checklist (milestone gates) | [docs/ACCEPTANCE.md](docs/ACCEPTANCE.md) |
| Version history | [CHANGELOG.md](CHANGELOG.md) |

## Checks and deploy

```bash
make check          # the CI gate: ruff + pytest (backend), tsc + vitest (frontend)
make dev-backend    # uvicorn --reload on :8000
make dev-frontend   # Vite dev server
make extract        # diff-harness old side: canonical JSON from live Supabase
make deploy         # srv-gw deploy --project with --build
```

`make check` must pass before any deploy. Every change bumps the
version in CHANGELOG.md; confirm a deploy landed by checking the
footer at https://with.bowden.works (or `/api/meta`).
