quotations-builders is an application that makes quotations for builders using their voice. A builder speaks the details of a job — the client, the work, the materials, the quantities, the prices — and the app turns that spoken input into a structured, usable quotation the builder can check and use with their client.
The product is built for builders and tradespeople working on site: dusty hands, phone in one hand, a client waiting. The intent is to replace slow, error-prone manual quoting with a fast, plain-spoken voice workflow that produces a real quotation document, while keeping the builder in control of the final numbers. The audience is the individual builder who owns the quoting responsibility for their own jobs.
This document is the System Requirements Document for the product. It defines the accepted current behavior, the single active persona, the page and access contract, the visual and interaction direction, and the technical delivery boundary.
quotations-builders is a web application with a React frontend, a shared FastAPI backend, and application-owned persistent storage in MariaDB. The backend calls a LiteLLM gateway to process the builder's spoken job details into a structured quotation. The builder is the only active human actor: they enroll, sign in, record or dictate job details by voice, review the generated quotation, and revisit saved quotations later.
Current delivery covers:
Voice input is processed into a structured quotation before it can be viewed. Quotations are durable and belong to the signed-in builder.
Removed from scope
The product is a first-party, application-owned web app. Identity is application-owned: a builder enrolls themselves through Sign Up and verifies returning identity through Login to reach their own durable quotations. The Landing page is anonymously reachable and explains the product before any sign-in; Sign Up and Login are also anonymously reachable because a protected destination cannot own the interaction that establishes access to itself. The Quotations, New Quotation, and Quotation Details pages require login.
Voice capture happens in the browser on the New Quotation page. The backend receives the captured job details and calls the LiteLLM gateway to structure them into a quotation, which is persisted in MariaDB and owned by the signed-in builder. The builder reviews the resulting quotation on Quotation Details and can return to it later from the Quotations ledger.
Everything described here is current. No future-horizon features are defined by the authoritative source.
FR-1 — Make quotations for builders (explicit) As a Builder, I should be able to produce a quotation for a job so that I have a usable quote to give my client.
FR-2 — Create quotations using voice input (explicit) As a Builder, I should be able to speak the details of a job so that the app captures them without manual typing.
FR-3 — Self-service enrollment (required_inference) As a Builder, I should be able to enroll myself so that I can reach my protected quotation work.
FR-4 — Returning identity verification (required_inference) As a Builder, I should be able to verify my identity on return so that I can reach my durable quotations.
FR-5 — Voice input processed into a structured quotation (required_inference) As a Builder, I should have my spoken job details turned into a structured quotation before I view it, so that what I see is a real quote rather than raw speech.
FR-6 — Browse durable quotations (required_inference) As a Builder, I should see my saved quotations in a ledger so that I can find and reopen them.
FR-7 — View a generated quotation (required_inference) As a Builder, I should be able to view a quotation generated from my spoken input so that I can check it and use it with my client.
Muse: Aaron Draplin. Headline: "SAY IT. WE QUOTE IT." Bold, honest, hand-built — quotations spoken on the job, drawn like a field notebook.
Palette (light mode):
| Role | Hex |
|---|---|
| Background (kraft) | #EFE6D2 |
| Surface (warm paper) | #F7F1E3 |
| Text (ink black) | #191613 |
| Primary (forest green) | #1E3A2B |
| Accent (safety orange) | #E8541E |
| Muted (clay) | #8A7A5F |
| Badge accent (mustard) | #D9A227 |
| Badge accent (denim) | #2F4A63 |
Kraft is the page ground; warm paper for panels and forms; ink black for all type and 2px rules; forest green for primary actions, the top bar, and badge fills; safety orange as the single hot signal (record button, active states, stamps, one hero colour block, ~8% of surface); muted clay for secondary labels and hairlines; mustard and denim only as small badge/tag accents.
Typography:
clamp(44px, 9vw, 128px); page title clamp(32px, 5vw, 64px); section heading clamp(22px, 3vw, 32px); body 17px/1.55; UI label 13px caps; data numerals 16–20px tabular.Shape language: Hard edges and chunky borders — 2px ink rules around inputs, panels, buttons; 0–4px radii only; thick 3px bottom-shadow offsets on buttons and cards reading as physical stamps. Circular or shield-shaped outlined status marks (Draft, Sent, Accepted). Ruled panels with hand-inked double rules under section headings. Halftone dot texture as low-opacity overlay on hero imagery only.
Layout: Poster-like stacked sections on a strict 12-column grid with visible 1px ink rules between major bands. Hero is a full-width black band with an oversized headline stacked over an orange block. Quotation list is a ruled ledger. New Quotation is a two-column field sheet collapsing to one column at 768px. Generous 24–48px gutters.
Imagery: Thick-line vector icons at 2.5px strokes (hammer, tape measure, level, hard hat, clipboard) as functional markers. Halftone-duotone photography of real building materials cropped hard to the grid and bled off panel edges. Badge logos and stamp graphics. No stock people at laptops, no 3D renders, no gradient blobs.
Accessibility: Readable text and controls stay whole at 375px, 768px, and 1280px, wrapping or scaling to fit; imagery and decoration may bleed but never cover readable text or controls.
The public entry is a poster, not a SaaS hero. A full-bleed ink-black band spans the top of the Landing page. The left two-thirds carries the headline "SAY IT. WE QUOTE IT." in Alfa Slab One at clamp(44px, 9vw, 128px), stacked in three lines, cream (#F7F1E3) on black, with a thin orange rule under the last line. The right third is a solid safety-orange block holding a hand-drawn-style microphone badge and the primary CTA "Start a quotation" as a chunky cream button with a 3px black offset shadow. Behind the headline, a halftone-duotone crop of timber and scaffolding bleeds off the right edge at 20% opacity. A ruled strip along the bottom of the band lists three plain-spoken steps in caps: SPEAK THE JOB · CHECK THE LINES · SEND THE QUOTE. No centred subhead, no gradient, no floating cards.
The record button on New Quotation carries the same signature: a large circular outlined stamp with safety-orange fill and a live waveform inside; pressing it visibly stamps into the page and switches the label to LISTENING in caps.
Interaction Model: Animated Motion Tempo: restrained Hero Dimensionality: flat
Landing Hero Motion Brief
prefers-reduced-motion.
Speak the client, the work and the numbers. quotations-builders turns your spoken job details into a structured quotation you can check, line by line, before it goes to the client.
Built for the site
quotations-builders makes quotations for builders using their voice.
Speak the details of a job — the client, the work, the materials, the quantities, the prices — and the app turns what you said into a structured quotation you can check line by line. No re-typing a job sheet after a day on the tools.
quotations-builders
Start a quotation and speak the details out loud — the app writes it up as a line-by-line quote you can check.

Speak the client, the work and the numbers. quotations-builders turns your spoken job details into a structured quotation you can check, line by line, before it goes to the client.
Built for the site
quotations-builders makes quotations for builders using their voice.
Speak the details of a job — the client, the work, the materials, the quantities, the prices — and the app turns what you said into a structured quotation you can check line by line. No re-typing a job sheet after a day on the tools.
quotations-builders
Start a quotation and speak the details out loud — the app writes it up as a line-by-line quote you can check.
No comments yet. Be the first!