quote-drafter prices a job from your rate card and renders it as a document you can send — markdown, HTML and JSON. Python 3, standard library only, no account, no network.
See a real estimate it produced Source on GitHubWhat the job is, the scope paragraph, which line items, which assumptions — that's a plain JSON file a human or an LLM can write from a voice memo.
Markup, labour, after-hours, tax on taxable lines only, discounts, minimum charge, rounding,
the ± band — all in Decimal, all unit-tested.
An LLM doing arithmetic in prose eventually sends a customer a wrong total. Here it never touches a number. Give it a service code that isn't in your rate card and it refuses rather than inventing a price.
git clone https://github.com/outlier1804/quote-drafter
cd quote-drafter
python3 quote.py render --job demo/job-water-heater.json \
--ratecard ratecards/demo-plumbing.json --out out
python3 test_quote.py # 35 offline checks
An after-hours 40 gal gas water heater replacement, priced off a demo plumbing rate card: $2,120.51, range $1,908.46–$2,332.56. Read the rendered estimate →
That demo company is fictional and every price in its rate card is made up. Replace the rate card with your own numbers before quoting real work.