B2B Platform — Client Build
A working product for a real business: scoped, designed, shipped, and used day to day.

Overview
A B2B web platform replacing a tangle of spreadsheets and WhatsApp threads with one system of record for orders, clients and internal handoffs.
Built with the operations team rather than for them — weekly increments, real data from day one, and a hard rule that nothing ships until someone on the floor can use it without a walkthrough.
The problem
Every order lived in at least three places: a spreadsheet, a chat message, and someone's memory. Nobody could answer 'where is this' without asking two people.
Reporting was reconstructed by hand at month end, which meant the numbers were always late and never quite trusted.
System architecture & technical approach
A normalised PostgreSQL schema models orders, clients and state transitions as an append-only event log, so history is never overwritten and any status can be explained.
The React front end is role-aware: operations sees a queue, management sees aggregates, clients see only their own thread. Server-side authorization gates every read, not just the UI.
- 01
Client request intake
- 02
Order record + event log
- 03
Role-scoped queues
- 04
Status transitions (audited)
- 05
Aggregation views
- 06
Live dashboard + exports
Technical hurdles & breakthroughs
Migrating live spreadsheets without downtime
Ran an import pipeline with a dry-run diff mode against the live sheet for two weeks, so the team could see exactly what would land before the cutover. The actual migration was uneventful, which was the point.
Permissions that don't leak through the UI
Early builds hid buttons but still returned full payloads. Rewrote the data layer so authorization happens at the query level and the UI simply reflects what came back.
Adoption, not features
The biggest blocker was habit. Shipping keyboard-first entry and a one-screen daily view got usage past the tipping point faster than any feature on the original list.
Outcomes & key results
~6 hrs
Manual reporting removed per week
1
System of record, replacing three
100%
Status changes audited and explainable
Daily
Active internal usage since launch
- Shipping in visible increments buys more trust than a polished demo at the end.
- The hardest part of internal tooling is not the code — it is making the new way faster than the old way on day one.