All case studies Case study · Construction

How to automate a complex quoting process?

ClientDecobois
SectorConstruction · bespoke houses
ScopeQuote engine + architectural drawing intake
Delivered2026

Every quote used to start with the founder digging through old project folders, supplier emails, and technical drawings. Element by element. Weeks of back-and-forth before a number could come out. Meanwhile, faster competitors closed the deal. The data existed. It just wasn't structured.

01 – The result
1 mo

Quote turnaround, was three months

~10%
Accuracy on every major cost category
12 → 1
Project histories reconciled into one BOM
Zero
Doors or windows missed in the BOM
Interior view of a Decobois wooden chalet: warm wood ceilings, dining table, snowy Alps outside.
Where it lives

Bespoke chalets, on the mountain.

Decobois builds custom wooden chalets across the French Alps. Every project is a fresh conversation about layout, materials, and suppliers. The quoting engine turns that conversation into a live number, the same afternoon.

The product

Two surfaces. One for the sales meeting, one for the engine.

The front is the BOM Visual the sales lead uses live with the client, one lot at a time on a real chalet. The back is the calibration simulator the team uses to stress-test the engine against real invoices and keep the algorithm honest.

BOM Visual · architectural view of the cost structure with LOT E heating selected on an alpine chalet.
Front end · BOM Visual Each lot maps to a real subcontracting package. Click a lot, see it on the chalet, see the priced components on the right. Rates calibrated across three real projects.
Calibration Simulator · virtual cost deviation across trade lots with 99.2% current accuracy.
Back end · Calibration Simulator Pick a reference project, tweak every parameter live, watch the engine estimate move against the real contract per trade. Current accuracy sits at 99.2 percent.
02 – The problem

A quote-in-three-months business, in a same-day-quote market.

Bespoke houses look bespoke, but a lot of the work under the quote is the same every time. Trades, elements, suppliers, unit costs. What varied was where the data lived and how it was structured. We ran a root cause on why quotes were slow. Four things came up:

1. The data existed on drives, in emails, inside past quotes. It was never structured to be re-used.
2. Quotation structure varied massively by trade (earthwork, plumbing, carpentry) and by supplier.
3. There was no standard bill of materials across projects. Each one was reconstructed from scratch.
4. There was no visibility on price history or supplier volatility. Every unit cost was renegotiated with fresh uncertainty.

The underlying quoting logic had never been made explicit. Automation on top of unclear logic doesn't help, so we started with the logic.

03 – What we built

A quoting engine trained on the company's own history. And a reader for the drawings.

Two connected systems. One turns the founder's tacit pricing knowledge into an engine that runs live in customer meetings. The other reads the architectural PDFs so no door, window or opening is ever missed from a quote by hand-counting.

Stage 1

Master bill of materials

Reconstructed a single canonical BOM from twelve past projects. Every trade, every element, every edge case reconciled into one standard. The company's own history became the schema.

Stage 2

Cost engine, two modes

Loaded two years of supplier quotes into a structured historical database, then built the cost equations on top. A fast mode for first meetings, a precise mode for the final quote. Validated to within ten percent on every major category.

Stage 3

Drawing intake

A separate reader ingests the architectural PDF, counts every door, window and structural opening, and cross-checks the count against the bill of materials. Anything missing gets flagged before the quote leaves the door.

Architecture at a glance

The engine and the drawing reader, together.

Decobois live quoting engine architecture Two years of supplier quotes and twelve past projects are reconciled into a single canonical bill of materials. A cost engine with two modes (fast for the first meeting, precise for the final quote) runs on top. In parallel, the architectural PDF is read by a vision reader that counts doors, windows, and openings, cross-checking the count against the bill of materials before the quote leaves. SOURCES 12 past projects bills of materials · drawings 2 years of supplier quotes per trade · per supplier Architectural PDF new project RECONSTRUCTION (ONE-TIME) STAGE 1 Reconcile → canonical BOM 12 histories → 1 standard schema every trade · every element · every edge case data_model_v3 STAGE 2 · COST ENGINE Two-mode cost equations Fast mode ~70% inputs live in meeting first number Precise mode full inputs ~10% accuracy final quote STAGE 3 · DRAWING INTAKE (PER NEW PROJECT) Read & count PDF vision · doors · windows · openings counted list Cross-check vs BOM flag anything missing before quote leaves the door live number OUTPUT Quote in the meeting Fast: live estimate during the meeting Precise: final quote ~10% on every category was 3 months · now 1 month LEGEND Source data Processing / engine step Delivered quote Live number to owner STACK · NEXT.JS + TYPESCRIPT · STRUCTURED SUPPLIER HISTORY · PDF VISION · RULE-BASED COST EQUATIONS OWNER-FACING APP · TWO-MODE CONTRACT · SCHEMA REBUILT FROM 12 REAL HOUSES
04 – Before / after

"I'll send you something in a few weeks" became "Here's your number."

Before, per new project

  • Search old project folders.
  • Dig through supplier emails for prices.
  • Extract costs manually, per trade.
  • Count doors and windows from the drawing by hand.
  • Cross-check the BOM for missing elements.
  • Send a number weeks later. Sometimes months.

After, per new project

  • Configure the house in the app during the meeting.
  • Get a live number in fast mode.
  • Refine to precise mode after the meeting.
  • Drawing reader catches any missing element.
05 – Under the hood

The logic came first. The tooling followed.

Before writing a single line of application code, we spent the time making the pricing logic explicit. The standardised BOM, the trade taxonomy, the cost equations, the two-mode contract. Only then did we build the app on top. The result is a system the owner uses live and can extend himself as new trades or suppliers come in.

Quoting app Next.js + TypeScript

Owner-facing web app the founder uses live in front of the client. Strict types on every trade, every element, every unit cost.

Data model Canonical BOM + trade taxonomy (v3)

Twelve past projects reconciled into one standard bill of materials. Every trade, every element, every edge case named. The company's own history became the schema.

Supplier history Structured store · 2 years of quotes

Every historical supplier quote per trade, per element, per date. Powers price lookups and price-drift alerts across the two years.

Cost engine Two-mode · rule-based

Fast mode for the first meeting (rough number, live). Precise mode for the final quote (validated to within ~10% on every major cost category).

Drawing reader Python · ingest pipeline + BOM cross-check

Ingests the architectural PDF, extracts text and geometry, and cross-checks the detection against the BOM before the quote leaves the door.

Vision detection · learning tool YOLO · fine-tuned on Decobois drawings

Object detection model trained on the studio's own past architectural PDFs. Every door, window and structural opening is counted directly from the plan, and every new project it processes goes back into training. Recognition sharpens on the trades and layouts they actually build.

Delivered as Owner-facing web app + drawing ingest job

Two deliverables the founder actually uses. The app in every client meeting, the drawing reader on every new project intake.

Quoting the slow way?

If your team still assembles quotes from memory and old folders, we can rebuild the logic underneath.

Apply for a Free Build