One reporting layer for sales and distributor data
The founder and the reps now look at one set of numbers every week, built in weeks, on a server the company owns.
Situation
A founder-led bottled water brand had sales and distributor data spread across spreadsheets, QuickBooks and an inventory system. Nobody had a single view. Revenue was reported on order date, so a large distributor order looked like a spike in one month when it actually shipped over a whole summer.
What I built
- Nightly and on-demand syncs from the inventory system, QuickBooks and a forecast workbook into a Postgres warehouse on a VPS the client owns.
- Google Sheets kept as the controlled input for forecasts and plan. The team keeps working where they already work.
- Five sales screens: overview, revenue vs plan vs prior year, by customer, by SKU, and a value chain waterfall from gross to net.
- Metabase embedded in the internal app behind company Google login, so the team builds its own reports without waiting on me.
- Full sync logs and a data freshness page. When a number looks wrong, they can see when it last loaded and from where.
What changed
Revenue moved to ship date with realized and booked kept strictly apart. The Monday conversation went from "which spreadsheet is right" to "what do we do about it". Phase 2 is agents on top: accounting, distributor reporting, rep assistants in Slack.
Open the app, rebuilt with synthetic data →
Next.js · Postgres · Drizzle · Metabase · Coolify on a client-owned VPS