The problem
Proposals took too long to write, and how good they were depended on who wrote them.
A salesperson has notes from a discovery call. They need a client-ready proposal, and a second person has to approve it before the client sees it.
- No invented prices or dates
- Nobody approves their own work
What I asked first
The brief left these open. I decided each one in the design doc before building.
- Does the approver have to be someone else? The brief doesn't require two people. I did it anyway: approving your own proposal is theatre.
- Should the salesperson fill in a form? A form with eleven fields made them write the proposal themselves. So it's notes in, fields pulled out, and they confirm each one beside the phrase it came from.
- Who writes the price and the timeline? Nobody generates them. They're filled in from the confirmed fields, so the model can't invent a price or a date.
- What happens when an approved proposal needs a change? It's frozen. An edit makes a new version, and the approved one stays exactly as it was approved.
- What if a file arrives after the writing? Every section written before it is marked with the file's name and gets a rewrite button. Nothing rewrites itself.
How it runs
- Person
- AI
- Code
- Result
Intake
01, Human:
Call notes in
Salesperson
Notes from the discovery call, and any files.
02, AI:
Fields pulled out
Sonnet
Each one shows the phrase it came from.
03, Human:
Salesperson confirms
Salesperson
Nothing is fixed until they do.
Write
04, AI:
Sections written
Sonnet
Four sections, one at a time, in order.
05, Code:
Price and timeline filled in
Template
From the confirmed fields, never the model.
06, Human:
Salesperson revises
Salesperson
Any section can be rewritten, up to five times.
Then: step 4 (rewrite a section); step 7.
Approve and send
07, Human:
Someone else approves
Approver
Or sends it back with a note.
08, Output:
Sent and logged
Resend
Once per version, however often Send is pressed.
Enforced, not requested
- The writer can't approve A second person approves. The server checks, not just the screen.
- Prices and dates come from the form A written section with a price or date that isn't in the confirmed fields is rejected.
- Approved means frozen An edit makes a new version. The approved one never changes.
- One delivery per version Pressing Send twice can't deliver twice. The database holds that rule.
- An old version can't be sent Once there's a newer one, the older one has no Send button.
- Late changes are flagged A section written before a field changed, or a file arrived, says what changed.
- Spend has a ceiling 60 AI calls an hour across everyone, and five rewrites per section.
The thing that nearly got past me
Incident
The Send button was live on an out-of-date proposal
An approved proposal is frozen, so any change makes a new version. But the old version stayed approved, and its Send button still worked long after the new one became the real work. The client's link always shows the latest version sent, so sending the old one would have pulled everyone holding that link back to it.
The fixA version with a newer one can't be sent. It shows no Send button at all, just a link to the current version, and the server refuses it too.
The build, in numbers
2 of 6
sections the model never writes: the price and the timeline
2
people on every proposal. Whoever writes it can't approve it.
1
delivery per approved version, however often Send is pressed
60
AI calls an hour across every user, so a public demo can't run up a bill
5
rewrites per section, at most
From the design, as built.
What it refuses to do
- Invent a price or a date They're filled in from what the salesperson confirmed.
- Let the writer approve their own proposal A different person has to.
- Send the same version twice One delivery per version, however often Send is pressed.
- Email a stranger from the demo In demo mode, every email goes to one set address.
What I took from it
An approval by the person who wrote it is theatre. I build the control, not the look of one.
The limit I'd fix first
if I did it again
- There's no PDF export and no e-signature. The client reads the proposal as a web page.
