B2B SaaS · Internal Tool · 2025
From hours in Excel to minutes in one system
An internal platform that replaced a hand-assembled Excel-and-Word quoting process for a distributor running thousands of SKUs across multiple suppliers.
- Client
- Czech technical distributor
- Year
- 2025
- Stack
- Next.js (App Router) · TypeScript (strict) · Supabase (Postgres + Auth)

The problem
01 · Quotation PlatformEvery quotation was assembled by hand: open each supplier’s XLSX price list, copy products into Word, recalculate margins and the EUR/CZK rate in a separate spreadsheet, send a PDF. Old quotations became unreliable the moment product data changed, pricing knowledge lived in individual files rather than a shared system, and there was no audit trail.
What I built
02 · B2B SaaS · Internal ToolA structured internal platform replacing the whole workflow. A seven-phase import pipeline with a visual column-mapping wizard ingests price lists in any supplier format. A central catalogue with multi-token full-text search and filters across a dozen technical attributes replaces manual lookup. Quotations are assembled from the catalogue with automatic margin, discount and EUR/CZK recalculation, then exported as PDF in two variants (customer-facing, and internal with purchase prices and margins) or as supplier-specific XLSX order files. A snapshot pattern freezes each quotation at the moment it is created.
Results
03 · 5 outcomes- 01Quotation assembly went from hours to minutes
- 02~4,000 products from one supplier imported in seconds
- 03Historical quotations stay byte-identical after any later catalogue change
- 04Full Czech diacritics in every PDF export; XLSX orders match each supplier’s own layout
- 05133 automated tests, plus an explicit security review with a threat model
Stack
04 · 7 tools- Next.js (App Router)
- TypeScript (strict)
- Supabase (Postgres + Auth)
- jsPDF
- xlsx-js-style
- Vitest · 133 tests
- Vercel
Gallery
05 · 4 screens



Tell me what you’re building · one-pager back in 48h