Quoting engine for a Nordic manufacturing client
Open full-size image ↗
Category: Client SaaS
Status: Live
Time window: August 2026 → ongoing
Live URL: Private subdomain, noindex, auth-gated
Purpose
Turns supplier PDFs, Excel workbooks, images, and CAD geometry into structured quotes with confidence-stamped rate cards and immutable snapshots on issue.
Who it is for
A Nordic fabrication client's estimator – the single bottleneck for winning work – plus the sales owner who signs off on quotes.
Stack
- Frontend: Next.js 16 (App Router, Turbopack) + React 19 + TypeScript (strict) + Tailwind v4
- Backend: Next.js API routes (Node runtime, 300s max via Vercel Fluid Compute)
- Data: Supabase (RLS deny-all, service-role behind auth middleware); versioned migrations
- LLM / AI: Claude Sonnet 5 via Vercel AI Gateway (direct Anthropic fallback); AI SDK streaming with Zod schema-constrained output; aggressive prompt caching
- Infra: Vercel + Resend (email intake) + Svix (signature-verified webhooks)
My contribution
Worked directly with the client owner to define the quoting problem, compare product approaches and shape the estimator workflow. Designed the architecture and data model, implemented extraction and quoting, validated pricing and access controls in parallel testing, and delivered the production release with ongoing iteration.
Notable capabilities
- Multi-format ingestion (PDF, image, Excel, CSV, DXF) normalised to structured JSON before touching the price engine
- Prompt-cached extractions: 51k-token cold ~10-20s, cached retries 3-5s
- Rate-card versioning with a unique partial index (
WHERE is_current) enforcing single-current in Postgres - Rate-key normalisation with dual-standard fallback for composite material names ("A / B" matches cards listing only "A")
- Bilingual (nb/en) UI + BCP-47 locale detection on inbound RFQ emails
Outcome
Production in under four weeks. Weekly feature velocity (auth → email intake → legal-entity data → LLM-driven pricing sources). Zero direct-DB access from client sessions; auth middleware + RLS as two walls.
Evidence
- Case study: Related case study
- Repo: private
- Key files:
/api/extract-case/route.ts,/api/intake/route.ts,src/app/lib/rate-key.ts,src/app/lib/i18n.tsx,supabase/migrations/000{1,2}_*.sql
Skills demonstrated
nextjs-16, react-19, typescript-strict, tailwind-v4, vercel-ai-gateway, claude-sonnet-5, ai-sdk-streaming, zod-schema-output, prompt-caching, supabase-rls, postgres-unique-partial-index, resend-svix-webhooks, bilingual-nb-en, dxf-parser, xlsx-ingest
Want to discuss the decisions behind it?
Over fifteen years of consulting and growth, and hands-on AI delivery from discovery to daily operations. I can share my CV and talk through how I connect business outcomes with systems that run.
Available for a chat. In person in Stavanger, or remotely worldwide.