Before the stackOwner reading every RFQ. Replies written by hand, after hours.
Inbound was steady but unstructured — web form, WhatsApp, the occasional referral email. RFQs landed without linear footage, finish, or budget band. The owner read each one personally and wrote the first reply himself, which meant qualification was a function of evenings and weekends. The bottleneck was attention, not demand.
- Bilingual operators on the floor; inbound split EN + ES
- Three intake surfaces with no shared structure
- First reply written by the owner, after hours
- Quote turnaround ran 3–5 days when the week was busy
What we shippedOdoo 19, a Next.js site, and an AI agent on the inbound mix.
Three pieces, deployed together. Odoo carries quoting, BOM, and install scheduling. The site captures RFQs with the discriminators that matter on a cabinet floor. The AI agent qualifies inbound across web and WhatsApp in both languages and drops a structured draft into the CRM before the owner has read it.
- Odoo 19 — Estimating, BOM, install scheduling
- Next.js site with bilingual RFQ form
- AI agent on web + WhatsApp inbound (EN + ES)
- Managed Hetzner hosting with daily Postgres backups
How the months ranDiscovery, deposit, build, handoff. Fixed-price the whole way.
The engagement ran the standard timeline. Paid discovery confirmed scope and surfaced the bilingual edge case before a deposit changed hands. Build proceeded in two-week reviewable slices — the owner saw a working module before the next one started. Handoff was a one-week shadow on the live floor, then ownership transferred.
- Week 0 — Paid discovery, scoped to fixed price
- Weeks 1–8 — Build slices reviewed every two weeks
- Week 9 — AI agent trained on the shop's quote language
- Week 10 — One-week shadow on the live floor, then handoff
What changedOwner reviews drafts. He no longer writes the first reply.
Quote turnaround is inside 24 hours of the RFQ landing. Bilingual inbound is triaged by one agent, not two operators on rotation. The owner's job moved from authoring first replies to reading drafts that already carry the discriminators he used to ask for in person.
- RFQs in the CRM already carry footage + finish + budget band
- EN and ES inbound triaged by the same agent
- Owner spends evenings reviewing drafts, not writing them
- Install schedule lives in the ERP, not in the owner's notebook
Owner's readOwner quote — currently being recorded.
Real attributed testimony from KCD's owner is in scheduling and will live here once recorded. We don't run synthetic quotes on this site. If you want to talk to KCD directly about the stack, ask on the call and we'll set up a fifteen-minute reference chat.
What is queuedPhase two — a custom showroom intake split and a quote-template library.
Two add-ons are on deck after the next planning review. A showroom intake split so walk-in inquiries land in their own pipeline (separate from custom-build RFQs); and a small library of quote templates the AI agent can pull from when drafting — keeping the owner's voice consistent without writing each quote from scratch.
- Showroom-vs-custom intake split in the site form
- Quote-template library, scoped per finish family
- Optional — install-photo capture pushed back into Odoo job records