← All insights
17SMB Dashboards · 8 min read
Anatomy of an SMB client dashboard: what Kumar Textiles sees every Monday
A walkthrough of a real Growth-bundle dashboard — the transformation hero, the money strip, the narrative Autopilot log, the owner-approval queue. Built so a 48-year-old retail owner can read it in 90 seconds.
01
The four blocks that decide if the dashboard gets read
- Transformation hero — before/after band with 76-day numbers (104 → 342 leads/week, CPL ₹380 → ₹184, 4hrs/day → 28min/day)
- Money strip — rupees, not ratios: ad spend → attributed revenue → margin. ROAS shown with industry benchmark underneath
- Narrative Autopilot log — each event is Signal → Action → Outcome, not one-line status codes
- Owner-approval queue — visually separated cards, distinct colour from Autopilot-auto cards so control is loud
02
Why we stopped writing 'Paused campaign X'
- One-line activity logs don't earn trust — owner can't see why a ₹8K/day ad set got paused
- Signal row: 'CPL on Cold-IG-Carousel hit ₹640 over 3 days — 2.9× target'
- Action row: 'Paused Cold-IG · shifted ₹8K/day to LAL-1%-Bridal · added UTM guard to prevent re-enable'
- Outcome row: 'Saved ~₹9,600/day in dead spend. LAL CPL dropped ₹214 → ₹199 with added budget'
- Result: 2-minute Monday skim replaces the Tuesday-afternoon 'what did you do this week' email thread
03
Nine modules, one dashboard
- Overview — 5 KPIs, blended weekly trend, channel mix
- Outreach — drafts queued and an outbound log where every touch is click-to-advance (draft → queued → sent → replied → booked)
- Leads — CSV-like view of every inbound, temperature, next action
- Ads · Organic · Social · WhatsApp · Reviews — channel-specific deep tabs
- Pipeline — React Flow funnel view with conversion-% between stages
- Ops — unified activity ledger; Sources — connector status table
04
Live-data overlay, baseline fallback
- GA4 property + Vercel Analytics pulled server-side via /api/live/<slug>, merged over the baseline
- One shared service-account key in Vercel env; each client declares their propertyId + projectId in their slug file
- Dashboard shows a live-status pill: live (numbers from API) / fetching / fallback (if connector errors)
- Never breaks when a connector goes down — baseline hand-curated numbers stay visible
05
Private by default, public by invitation
- Tenant dashboards at /client/<slug> — public demos (kumar-textiles) vs private real-client (cookie-gated via Next proxy)
- Operator-wide cockpit at /dashboard — all tenants on one screen with cross-tenant MRR, urgent queue, unified Autopilot feed
- Cookie session (JWT HS256, HttpOnly/Secure/SameSite Lax, 14-day TTL) + Basic Auth fallback for CLI and bookmarks
- Tenants added by copying app/client/data/_template.ts → fill meta + sections → register in CLIENT_REGISTRY. ~3 minutes onboarding
06
What we tell clients on the install call
- The dashboard is the product — not a weekly PDF, not a deck, not a Notion share
- If you open it once a week, Monday 9am, we're doing our job
- If you open it three times a day, something is broken — tell us and we'll fix the rhythm
- Numbers are audit-ready — every Autopilot action has a signal/action/outcome row and a timestamp
Apply it
See the live Kumar Textiles dashboard. Then tell us what you'd want yours to show.
See it live