Series · 7 parts Published May 6, 2026

Quote drafter

A serverless drafter that catches every incoming RFQ from your website form, sales inbox, or direct file uploads; extracts the line items against your catalog; prices each one against your rules; drafts a complete quote with a cover paragraph in your voice; and parks it in front of a rep for one-tap approval. Drafts never auto-send. Seven posts on the same system — one diagram at a time — with an engineering reference at the end.

  1. 01

    A quote drafter on AWS for a few dollars a month

    The whole system on one page — an RFQ intake, a drafter, and a review-and-send piece, plus the four moves they share for every RFQ.

  2. 02

    How an RFQ reaches the drafter

    Three lanes at the door — the website RFQ form fast path, the shared sales inbox via SES, and direct uploads through a presigned S3 portal. Dedupe and screen happen before any AI runs.

  3. 03

    How the drafter reads an RFQ

    Three small extractors run in parallel — line items, constraints, context — plus a catalog lookup that knows your aliases. Each with a confidence score the move-picker reads before it decides anything.

  4. 04

    How a quote gets priced

    A five-stage pricing pipeline runs per line: base price, tier discount, volume break, regional, bundle. Every applied rule cites the catalog row or rules section that produced it.

  5. 05

    How a draft stays honest

    Four guardrails sit between the model and the rep’s queue — citation required, no fabricated SKUs, no commit on availability, discount cap above a threshold. A draft never auto-sends.

  6. 06

    What the quote drafter costs

    A coffee a month at SMB RFQ volume. Pennies per RFQ, dominated by Bedrock tokens for the extractors and the cover-paragraph composer.

  7. 07

    Engineering reference: the quote drafter architecture

    Same system, drawn purely for engineers. Service names, resource identifiers, region, Bedrock model IDs, Knowledge Base wiring, SES inbound, presigned-upload flow, PDF rendering, and CRM destinations.

What is a quote drafter?
A small serverless system that catches every incoming RFQ from your website form, sales inbox, or direct file uploads; extracts line items against your catalog; prices each line against your rules; drafts a complete quote with a cover paragraph; and parks it in front of a rep for one-tap review. Drafts never auto-send; the rep’s approval is the only path to the customer.
How much does it cost to run?
About $4/month at typical small-business RFQ volume (around 50–200 RFQs/month). The fixed cost is essentially zero — quiet weeks bill nothing. The variable cost is pennies per RFQ, dominated by Bedrock tokens for the extractors and the cover-paragraph composer. PDF rendering runs on demand in Lambda, only when the rep opens the draft.
Which AWS services does it use?
Lambda (with Function URLs for the form endpoint and presigned-upload portal), SQS, DynamoDB on-demand, S3, EventBridge, SNS, SES inbound, Secrets Manager, CloudWatch Logs with seven-day retention, AWS Budgets, and Bedrock (Claude Haiku 4.5 via Global cross-Region inference, plus Titan Text Embeddings v2 with a Bedrock Knowledge Base backed by Amazon S3 Vectors). No API Gateway, no NAT Gateway, no always-on compute.
Does the drafter ever send a quote on its own?
No. A draft never auto-sends. Every quote requires a rep’s one-tap approval before it leaves AWS. The drafter does the slow work — extracting line items, pricing them, citing the rules, writing the cover paragraph — but the customer-facing send is always a human action. Drafts that go unactioned trigger a 24-hour reminder and a 48-hour escalation.
How does the drafter avoid making up prices?
Three Drive docs ground every draft (catalog, rules, voice) and four guardrails sit between the model and the rep’s queue: citation required (every priced line must reference the catalog row and any applicable rule), no fabricated SKUs (any line item without a catalog match becomes an out-of-scope move, not an invented row), no commit on availability (block-listed phrases that promise specific in-stock claims), and a discount cap that requires manager approval above a configurable threshold.
What does the drafter do when an RFQ is ambiguous?
It picks the clarify move. The drafter writes one specific clarification question (it never asks two), drops it in the rep’s draft queue for one-tap send, and parks the RFQ as “awaiting reply.” When the customer answers, the drafter retries with the new information. Common cases: a SKU with multiple variants and no specified size, a quantity range too wide for tiered pricing, a missing delivery destination.
Where does the catalog live?
In a Google Drive folder, as three plain Docs: catalog (SKUs, plain-English aliases, base prices, units, minimum order quantities, lead times), rules (tier discounts, volume breaks, regional pricing, payment terms, discount-cap policy), and voice (cover-paragraph templates, signature, brand tone). A small sync Lambda mirrors the Drive folder into an S3 bucket every few minutes; a Bedrock Knowledge Base indexes that bucket. Editing a doc picks up on the next sync. No deploy, no spreadsheet ETL.
All posts