Building a KPI Dashboard for a Thai SME
A Bangkok-based business came to me with a problem: their data was scattered across spreadsheets, LINE messages, and someone's memory. They had no idea how the business was actually performing until the end of the month.
They needed a dashboard. Something that shows real numbers, in real time, without manual data entry.
Here's how I built it.
The Problem
Before the dashboard, their workflow looked like this:
- Sales recorded in a Google Sheet (sometimes)
- Expenses tracked in a different Sheet (when remembered)
- Customer info scattered across LINE chats
- Monthly "reports" cobbled together manually
- Decisions made on gut feeling, not data
The owner spent hours every week trying to figure out basic questions: How much did we make this month? Which products are selling? Are we profitable?
The Solution
I built a custom dashboard that pulls everything into one place:
- Revenue tracking - Daily, weekly, monthly views with comparisons
- Transaction log - Every sale recorded with customer, product, amount
- Customer database - Contact info, purchase history, lifetime value
- Product analytics - What's selling, what's not, inventory levels
- Expense tracking - Costs categorized and visualized
- Profit calculator - Real margin visibility
Tech Stack
Why this stack:
Next.js + React - Fast, modern frontend. Server-side rendering for quick initial loads. Easy to deploy.
Supabase - PostgreSQL database with real-time subscriptions. When a sale is recorded, the dashboard updates instantly. No refresh needed. Also handles authentication out of the box.
Tailwind CSS - Rapid UI development. Mobile-first responsive design without fighting CSS.
Vercel - Zero-config deployment. Push to GitHub, site updates. Free tier handles their traffic easily.
Key Features
Mobile-first design. The owner checks numbers on their phone more than desktop. Every view works on a 360px screen. Big touch targets. Swipe gestures for navigation.
Real-time updates. Using Supabase's real-time subscriptions, changes appear instantly across all connected devices. Staff adds a sale on the shop floor, owner sees it on their phone immediately.
Simple data entry. Adding a transaction takes three taps. Select customer (or add new), select product, confirm amount. No forms with 20 fields.
Visual reports. Charts that actually make sense. Revenue trends, category breakdowns, customer growth. Exportable to PDF for sharing with partners.
Challenges
Data migration. The old spreadsheets were messy. Inconsistent formats, duplicate entries, missing dates. Spent a full day cleaning and importing historical data.
User training. Staff weren't tech-savvy. Had to make the interface dead simple and run a hands-on training session. If it's not obvious, it won't get used.
Offline handling. Thailand's internet isn't always reliable. Added offline support so data entry works without connection and syncs when back online.
Results
Three months after launch:
- Owner spends 5+ fewer hours per week on manual reporting
- Spotted a product line losing money (was hidden in spreadsheet chaos)
- Staff actually use it because it's faster than their old system
- Month-end close went from 2 days to 2 hours
- Better decisions because data is visible, not buried
What I'd Do Differently
Start with mobile mockups. I designed desktop first, then adapted to mobile. Should have been the other way around. Caused some rework.
More user testing early. Some assumptions about workflow were wrong. Could have caught them faster with earlier testing.
Built-in backup reminders. Added this later after a close call. Should have been day one.
Want Something Similar?
Every business has different data and different needs. But the core problem is usually the same: you're making decisions without clear visibility into your numbers.
A custom dashboard costs less than you think—and pays for itself in time saved and better decisions.