publishhaven
Choose another practical lesson
A worked example · AI Operator Weekly

Write a proposal from client notes

A client wants a workshop for eight people. You know the approved service and price, but the date is still undecided. How do you draft the proposal without promising more than you agreed?

What you will make: An editable proposal with the agreed work, $600 draft price, exclusions and questions to confirm before sharing.

Start on this page. No download, installation or coding is needed.

Try the example

See the finished example

The people, services and prices are fictional. This AI-authored teaching example was checked against the supplied notes. It is not a customer result or a measured test of an AI model.

Draft proposal for Oak Learning

Fictional worked example. A person must approve this proposal before sharing it.

What we will help with

Help your team practise writing clearer client follow-up drafts.

Included work

  • One 90-minute remote workshop for eight people.
  • One reusable prompt worksheet.

Date: UNCONFIRMED Draft price: USD 600.00.

Outside this proposal

Ongoing support and extra sessions are not included. We have not promised particular business results. Any additional work needs a separate agreement.

Please confirm

  • What workshop date works for you?
  • What accessibility requirements should we prepare for?

Approval: ____________________ Date of approval: ____________________

When is this useful?

A document template and an approved price list may be enough for this job. Fill in the example manually or ask your usual assistant to organize the notes. Compare the result with the source notes either way.

The example has been checked against its supplied notes. We have not measured whether this format saves readers time or attracts an audience. An assistant's answer needs its own review.

1. Read the sample notes

You have everything needed for this example below. The short note labels help you point to the source of a statement.

Client notes

Client: Oak Learning Goal: Practice writing clearer client follow-up drafts. People attending: 8 Format: remote Date: Unconfirmed Questions: Confirm workshop date. Confirm accessibility requirements.

Approved service

Introduction to useful AI drafting Flat price: USD 600.00 Maximum people: 10 Included: one 90-minute remote workshop; one reusable prompt worksheet

Approved commitments from the call

one 90-minute remote workshop one reusable prompt worksheet

2. Draft it yourself or use your usual assistant

Copy the complete task below into an assistant you already use, or use the finished example as a document template. The task includes every sample note; you do not need to attach files.

This page does not call an AI service. Use the fictional sample first. Remove private details before pasting your own material into another service.

3. Edit a copy of the result

Compare your draft with the finished example, then make your corrections here. This is an ordinary editable template; typing does not run an automatic fact check.

Your edits stay in this page. They are not uploaded or saved. Copy them before you leave or reload.

4. Check it against the notes

Use this checklist to review the meaning. Ticking a box records your judgment in this page; it does not verify the document automatically.

Review each statement against its source before marking it complete.

Practise a mistake and repair it

Add 'ongoing support included' to your draft. Compare it with the approved service. Remove that promise and put any new client request in the questions section until someone approves it.

Use the method for your own work

Use your approved service list and real client notes. Keep wishes separate from commitments. Have the person responsible for scope and pricing review the whole proposal before sharing it.

You are finished when you can explain the result using the notes, identify what is missing and repair the deliberate mistake. A shorter manually written document is an acceptable result.

Optional: download the files and run Python checks

The full technical exercise is preserved for readers who want to inspect or change the program. These files are optional for the lesson above. A ZIP is a single download containing the sample documents and code; extract it before following the developer instructions.

Download every project file (ZIP)

A text editor; Python 3.11+ for the checker. An assistant account is optional.

Files in the technical download
  • README.md
  • catalog.json
  • comparison-log.csv
  • discovery.json
  • expected.txt
  • finished-proposal.md
  • model-draft.md
  • project.json
  • prompt.txt
  • proposal.json
  • run-record-template.json
  • run-record.md
  • run.py
  • verify.py

Your finished result

You run a small training business. A discovery call leaves you with an objective, eight learners and a request for a remote workshop, but no confirmed date. Finish with an editable proposal showing exact scope, a catalog price, exclusions, questions and a blank approval line.

Input: eight learners; one 90-minute remote workshop; one reusable prompt worksheet; date unknown. The fictional catalog price is $600.

Finished output: a draft proposal for Oak Learning at USD 600.00, with the date explicitly marked UNCONFIRMED. Ongoing support and business-result guarantees are excluded. Nothing is emailed or signed.

This is AI Operator Weekly's proposal-writing project. It follows the inquiry starter: first decide whether the request fits, then prepare a proposal a person can review.

Choose the simpler baseline first

For a standard workshop, an editable template and a rate table may do the job without AI. Copy the approved scope, insert the price and leave blanks for missing facts. Time that route before trying an assistant. The useful AI contribution, if there is one, is organizing messy notes into a readable draft. It does not authorize commercial terms.

The research question is: can we turn discovery notes into a usable proposal while keeping unknowns and approval visible? The output is a document, not a sales system or a promise that AI will win work.

1. Read the authoritative inputs

discovery.json records the client's stated goal and approved commitments. catalog.json defines the service's price, capacity and included items. All records are fictional and original. proposal.json is the structured draft after review. A structured draft uses named fields, which makes specific checks easier than trying to infer every commitment from prose.

The date is null, meaning not supplied. It is not today's date, a likely date or a booking reservation. The catalog allows up to ten learners; the request has eight. The price is a catalog amount, not an automatically measured market rate.

2. Draft in your usual interface

Paste the notes, catalog and prompt.txt into an assistant you already use, or fill the template yourself. Keep the first answer. model-draft.md contains the AI-authored worked draft from this authoring session so you have something to compare. Read its limitations in run-record.md.

Look for an invented date, a discounted price, an extra deliverable or a claim such as “double your team's output.” These may sound attractive while changing what you are promising. Correct the draft against the notes. Do not mark a real proposal approved because the assistant says it is.

3. Compile a reviewable proposal

Run the clean-folder commands below. Expected stdout is exactly:

learners=8
draft_price_usd=600.00
date=UNCONFIRMED
files=proposal.md
delivery=not sent

Open results/proposal.md in an editor. It includes the objective, two included items, participants, format, unconfirmed date, price, exclusions, questions and an approval line. It is deliberately plain Markdown so you can edit it or paste it into your business's document template.

Check the price independently: the catalog defines one flat workshop charge of $600. The sample has no per-person multiplier, tax calculation or discount rule. Therefore eight learners do not make the price $4,800. If your real service has tax, travel or tiered rates, document and test those rules before adapting this program.

4. Introduce a bad commitment

Use a spare copy and append ongoing support to the draft's deliverables. The compiler must reject it with unapproved deliverable, exit status 2 and no new output folder. Remove the extra item and rerun into a fresh folder. This is a designed negative case, not a reported customer incident.

verify.py also tests a fabricated date, a guarantee, an oversized group, a nonnumeric price, a changed price, missing approval and omitted questions. A fabricated date fails even if it is a valid calendar date: the input never authorized it.

A passing structured check does not make arbitrary extra prose safe. If you rewrite the result or add an attachment, review that whole document again. The generated exclusions are example wording, not legal advice or a complete contract.

5. Decide what a person must do

A person confirms scope, date, accessibility needs and commercial terms before sharing. This project deliberately does not connect a send button. In a real integration, permission to draft and permission to send should be different actions. Do not infer sending authority from a successful file build.

Completion check: show the editable proposal, locate the source of the price and each deliverable, demonstrate the extra-support rejection, and explain what remains unconfirmed. The blank approval line should still be blank until the appropriate person approves a real document.

Adapt it: replace the fictional service catalog with an approved internal catalog. Separate the client's wishes from your business's approved commitments. Add explicit fields for travel, tax or cancellation terms if required. Keep a raw draft and corrected final version so a reviewer can see what changed.

Next task: give two people the same anonymized notes and compare the template route with an assistant-assisted route. Record setup, review, repair and total time plus the defects each person catches. A faster draft is not an improvement if its corrections take longer. Do not generalize from one sample.

Technical reading

Python's Decimal documentation explains the numeric type used for exact decimal price comparisons. n8n's testing guidance describes why AI workflow outputs need evaluation. This local project does not benchmark n8n or require it.

Choose a route

Interface route: download and unzip the project. Read the input files and the included finished-*.md example in a text editor. Copy the finished example as an editable template; it is also included so you can complete the interface route without running Python. Paste their contents and prompt.txt into an assistant you already use, or write the draft yourself. Work with the fictional example first. Keep the raw answer unchanged, then save your corrections separately. Nothing in this project connects to email, purchasing or a client database.

Code route: install Python 3.11 or newer from python.org. Open a terminal in the unzipped folder. No packages, API keys or private repository access are required. Run:

python3 -I run.py
python3 -I verify.py

On Windows, use py -3 -I run.py and py -3 -I verify.py. The -I option isolates Python from user-specific Python settings. It does not turn the exercise into a sandbox for arbitrary downloaded code. Read the files before running them.

The first command creates results/. The second uses temporary copies to check the expected output and deliberate bad inputs. It leaves your own inputs and results alone. A second run refuses to overwrite results/; choose a fresh folder with python3 -I run.py --output results-2 when you intentionally want another version. Compare versions before deleting anything.

The programs assemble reviewed structured inputs into documents. They do not call a model, browse the web or decide whether prose is true. The supplied AI-authored draft came from this editorial authoring session. run-record.md explains exactly what was and was not observed. No separate API benchmark, customer deployment or independent reader trial is claimed.

Record a real attempt

Use comparison-log.csv to compare the same task and acceptance criteria on the manual and assistant routes. Copy run-record-template.json before trying your own assistant. Record the product and model label shown to you, date, exact prompt and supplied files, raw output, corrections, and setup, review and repair minutes. Unknown usage charges stay unknown rather than becoming zero. Do not confuse a download with a completed task. Finish the manual baseline too; for a one-off task, it may be the better method.

Before using real material, remove personal details and obtain appropriate permission. Your assistant's data handling depends on its product and account settings. This local exercise does not verify those settings.

Troubleshooting

  • Python is not found: use the Windows command above or verify your Python installation, then reopen the terminal.
  • A file cannot be found: unzip the whole folder. Keep run.py, project.json and the input files together.
  • JSON will not load: use double quotes, remove trailing commas and check the file in a JSON-aware editor. Preserve a clean copy before editing.
  • The checker rejects a draft: read the specific error, compare the input with the authoritative note, correct the draft and use a new output folder. Do not loosen the check just to get a pass.
  • The assistant writes different sentences: that is expected. The exact output below belongs to the deterministic compiler, not to every model's prose. Review the meaning of the assistant's answer separately.

What a pass means

The downloaded files are original educational material that you can adapt. A passing checker proves only the stated structural and data checks. It does not establish legal approval, broad factual accuracy, an effective model or a complete deployed agent. Human judgment still matters where the instructions say it does.

Continue with the journal

Original exercise: Turn discovery notes into a reviewed client proposal. This companion lesson adds no numbered edition or extra email.

Choose your next lesson in AI Operator Weekly

Subscribe to AI Operator Weekly