Acasuso.
← All work

Quoting engine for a Nordic manufacturing client

The whitelabel estimate engine: inbox of incoming requests, recent quotes with status, and the entry points into a new quote. Illustrative demo data.Open full-size image ↗
The whitelabel estimate engine: inbox of incoming requests, recent quotes with status, and the entry points into a new quote. Illustrative demo data.

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.