The problem
Writing a proposal often starts with call notes and an older document. I wanted a repeatable structure without carrying over claims that the new brief doesn’t support.
What I built
Claude drafts seven sections from the intake and supporting material. Each section is stored separately, so I can regenerate one without changing the rest. Checks flag unsupported numbers, dates, and other claims before review.
How approval works
A different person has to approve the proposal. Blocking gaps, version checks, and database constraints protect that step. Delivery can produce a hosted page, PDF, and covering email. Failed deliveries are recorded and retried without sending duplicates.
What I tested
The 9 September record includes unit tests, end-to-end tests against Neon Postgres, team and activity-scope checks, and a live seven-section draft. The project was built and tested. It wasn’t deployed at that point.
What testing caught
I had guarded the send endpoint, but a read endpoint could still expose a client link. I added the approval check to the public proposal page too.
Recorded build evidence · 9 September 2026. The figures here come from those test records.