Docket
Procurement
A long, chained document workflow collapsed into one form.
- React 19
- TanStack
- FastAPI
- PostgreSQL
- Typst
- Tauri 2
A government procurement workflow ran on eleven linked forms, each one requiring a different subset of the same data typed by hand. One mistyped amount on the first form propagated through the rest. The whole stack came back if anything was off.
I built a wizard that takes the data once and produces the full set as signed PDFs.
What it does
- One form in, the full set out. The wizard collects everything in five steps. The system produces all eleven documents, signatories and tax math included.
- The document chain is enforced. You can’t generate a downstream document before its prerequisites exist.
- Signatories are resolved from a directory of officials, with term dates tracked so the right person is selected across fiscal boundaries.
- Withholding tax on the disbursement form is a fixed formula. The system runs it and flags transactions priced below supplier cost.
Stack
| Layer | What |
|---|---|
| Frontend | React 19, Vite, TanStack Router/Query/Table/Virtual, Tailwind CSS 4, Base UI |
| Backend | FastAPI, Pydantic v2, SQLAlchemy async |
| Database | PostgreSQL |
| Documents | Typst, background thread, 60s timeout |
| Desktop | Tauri 2 wrapping the same React app |
| Monorepo | pnpm, Orval-generated TypeScript client shared across web and desktop |
The hard part was the manual. The code is bookkeeping.