Full-StackBackend
Blue Carp ERP
Production ERP system for a Thai electronics distributor, replacing a spreadsheet-based sales process.




01 // The_Problem
A Thai electronics distributor needed its sales paperwork — RFQ through invoice — to stop living in disconnected spreadsheets and start living in one system where every document traces back to the one before it.
02 // Stack
Next.js 15React 19TypeScriptSupabasePostgreSQL
03 // Key_Decisions
- Single connected document chain — RFQ → Quotation → Purchase Order → Delivery Order → Invoice — where each stage is generated from the one before it, not re-entered.
- Auto-generated, collision-safe document numbers via PostgreSQL triggers rather than application-layer counters — correct under concurrent writes.
- Server Actions architecture instead of a separate REST/GraphQL API layer — a deliberate Next.js 15 pattern choice.
- Strict TypeScript end-to-end on a real client codebase, not a greenfield demo.
04 // Summary
Replaced a Thai electronics distributor's spreadsheet-based sales process with a single connected document chain — RFQ to quotation to purchase order to delivery order to invoice — where each document generates the next instead of being re-typed. Document numbers are assigned by PostgreSQL triggers, so the system stays correct under concurrent use. Built solo on Next.js 15 and Supabase; live in daily production use.