CodingIdeas.ai
← Browse All Ideas

Build Guide

How to Build a Dashboard

There are 12 dashboard patterns used in 90% of SaaS products — knowing which one fits your data before you write a line of code saves weeks of redesign.

Intermediate3–7 days

Dashboards are the core UI of every B2B SaaS. Build one and you'll learn data aggregation, chart libraries, real-time updates, and responsive table design.

Data model

The core tables you'll need before writing any UI.

Eventid, user_id, type, properties (JSON), created_at — generic event log that feeds most metrics
DailyAggregatedate, metric_name, value — precomputed aggregates for fast chart queries

Build order

The sequence that minimises rewrites — build in this order.

1

KPI summary cards

Start with 3–4 KPI cards at the top: total value, change vs previous period (%), and a mini sparkline. Hard-code sample data first. Get the layout right before connecting real data.

2

Date range selector

Add a date range picker (Last 7 days / 30 days / 90 days / custom). All queries must respect the selected range. Store the range in state and pass it down to every chart and table as a prop.

3

Line chart — trend over time

Add a line chart showing your primary metric over time. Use Recharts or Chart.js. Aggregate data by day in SQL using DATE_TRUNC('day', created_at) and GROUP BY. Return an array of {date, value} pairs.

4

Bar chart — breakdown by category

Add a bar chart showing distribution by category (e.g. revenue by product, signups by source). GROUP BY the category field and SUM the metric.

5

Sortable data table

Add a table showing raw records with sortable columns. Implement server-side sorting (ORDER BY) and pagination (LIMIT + OFFSET). Add a CSV export button that downloads the current view.

6

Real-time updates

For live data, poll /api/metrics every 30 seconds using a useInterval hook. Show a "last updated X seconds ago" indicator. For true real-time, subscribe to Supabase Realtime on the events table.

7

Role-based views

Admin users see all data. Regular users see only their own. Enforce this in your API route by checking the user's role from the session and adding a WHERE user_id = ? clause for non-admins.

Build it with AI — Architect Prompt

Paste this into Claude, Cursor, Windsurf, or any AI coding tool. It includes the full context of this guide — data model, build order, and pitfalls — so the AI starts with everything it needs.

ClaudeCursorWindsurfCopilotGemini
architect-prompt.txt
<context>
App: Dashboard
Difficulty: Intermediate
Estimated build time: 3–7 days

Data model:
  Event: id, user_id, type, properties (JSON), created_at — generic event log that feeds most metrics
  DailyAggregate: date, metric_name, value — precomputed aggregates for fast chart queries

Recommended build order:
  1. KPI summary cards — Start with 3–4 KPI cards at the top: total value, change vs previous period (%), and a mini sparkline. Hard-code sample data first. Get the layout right before connecting real data.
  2. Date range selector — Add a date range picker (Last 7 days / 30 days / 90 days / custom). All queries must respect the selected range. Store the range in state and pass it down to every chart and table as a prop.
  3. Line chart — trend over time — Add a line chart showing your primary metric over time. Use Recharts or Chart.js. Aggregate data by day in SQL using DATE_TRUNC('day', created_at) and GROUP BY. Return an array of {date, value} pairs.
  4. Bar chart — breakdown by category — Add a bar chart showing distribution by category (e.g. revenue by product, signups by source). GROUP BY the category field and SUM the metric.
  5. Sortable data table — Add a table showing raw records with sortable columns. Implement server-side sorting (ORDER BY) and pagination (LIMIT + OFFSET). Add a CSV export button that downloads the current view.
  6. Real-time updates — For live data, poll /api/metrics every 30 seconds using a useInterval hook. Show a "last updated X seconds ago" indicator. For true real-time, subscribe to Supabase Realtime on the events table.
  7. Role-based views — Admin users see all data. Regular users see only their own. Enforce this in your API route by checking the user's role from the session and adding a WHERE user_id = ? clause for non-admins.

Known pitfalls to avoid:
  - Running aggregation queries on every page load — for large datasets, GROUP BY queries are slow. Precompute daily aggregates in a cron job and store them in a daily_aggregates table. Charts read from there instead of raw events.
  - Putting all charts in one giant component — split each chart into its own component with its own data fetching. This way charts load independently and a slow query doesn't block the whole dashboard.
  - No loading skeleton — charts that flash empty then fill in look broken. Add a skeleton placeholder (grey bars/lines) that shows while data loads, then fade it out when data arrives.

Tech stack (intermediate): Next.js + Supabase + Recharts or Chart.js + Clerk auth
</context>

<role>
You are a Senior Full-Stack Engineer and product architect who has shipped production Dashboards before. You know exactly where developers get stuck and how to structure the project to avoid rewrites.
</role>

<task id="step-1-clarify">
Before writing any code or spec, ask me 3–5 clarifying questions that will meaningfully change the architecture. Focus on: scale expectations, auth requirements, platform (web / mobile / both), must-have vs nice-to-have features for the MVP, and any hard constraints (budget, deadline, existing infrastructure).

<example>
BAD: "What tech stack do you want to use?" — too broad, doesn't change architecture decisions.
GOOD: "Do you need real-time sync across devices, or is single-device with periodic refresh acceptable? This decides whether we use WebSockets or simple REST polling and significantly affects infrastructure complexity."
</example>
</task>

<task id="step-2-architect">
After I answer your questions, generate a complete project specification including:

1. Final tech stack with version numbers
2. Full file and folder structure
3. Complete database schema — every table, column, type, index, and foreign key
4. All API routes with request/response shapes and auth requirements
5. Component tree with TypeScript props interfaces
6. Auth and authorisation flow (who can do what)
7. Step-by-step implementation plan in the exact build order from <context> above
8. All environment variables with descriptions

<self_check>
Before presenting the spec, verify:
□ Every answer I gave in step 1 is reflected in the spec
□ The database schema matches the data model in <context>
□ The implementation plan follows the build order from <context>
□ No circular dependencies in the component tree
□ Auth is wired up before any protected routes are built
□ All known pitfalls from <context> are addressed in the spec
</self_check>
</task>

<task id="step-2.5-agents-md">
Generate an AGENTS.md file at the project root. This file is read automatically by Claude Code, Cursor, Windsurf, Sourcegraph Cody, and all major AI coding tools at the start of every session.

Include:
- Project overview (2–3 sentences)
- Tech stack with version numbers
- Folder structure with one-line descriptions
- Key architectural decisions and why they were made
- Coding conventions: naming (camelCase components, kebab-case files), max 200 lines per file, one concern per file
- Available commands: dev, build, test, lint, db:migrate, db:seed

Note in the file: "Cursor users can symlink .cursorrules → AGENTS.md. Claude Code users can symlink CLAUDE.md → AGENTS.md."
</task>

<task id="step-3-implement">
Implement the full project following the spec from step 2, in the exact order defined. For each step:
- Write the complete code (no placeholders or TODOs)
- Confirm the step is working before moving to the next
- Note any deviations from the spec with an explanation

<constraints>
- Max 200 lines per file. WHY: every file must fit in one AI context window for easy review and editing.
- One concern per file. WHY: mixing auth logic into API routes makes it impossible to reuse — extract to lib/auth.ts.
- TypeScript strict mode, no `any` types. WHY: catches data shape mismatches at compile time, not in production at 2am.
- All database queries in server components or API routes only. WHY: keeps credentials server-side, prevents accidental client-side exposure.
- All environment variables documented in .env.example. WHY: the next developer (or your future self) should be able to set up the project in under 5 minutes.
- Comment every non-obvious decision. WHY: AI tools read your comments to understand intent — without them, the next edit will break the pattern you established.
</constraints>
</task>

How to use this prompt

  1. 1.Copy the prompt above
  2. 2.Open Claude, Cursor (Cmd+L), or Windsurf
  3. 3.Paste the prompt and send — the AI will ask 3–5 clarifying questions
  4. 4.Answer the questions, then it generates your full project spec
  5. 5.Continue in the same session to implement step by step

Common mistakes

What trips up most developers building this for the first time.

⚠️

Running aggregation queries on every page load — for large datasets, GROUP BY queries are slow. Precompute daily aggregates in a cron job and store them in a daily_aggregates table. Charts read from there instead of raw events.

⚠️

Putting all charts in one giant component — split each chart into its own component with its own data fetching. This way charts load independently and a slow query doesn't block the whole dashboard.

⚠️

No loading skeleton — charts that flash empty then fill in look broken. Add a skeleton placeholder (grey bars/lines) that shows while data loads, then fade it out when data arrives.

Recommended tech stack

Pick the level that matches your experience.

Beginner

React + Recharts + hardcoded JSON — learn chart patterns before adding a backend

Intermediate

Next.js + Supabase + Recharts or Chart.js + Clerk auth

Advanced

Next.js + Supabase + Tremor UI (dashboard components) + Supabase Realtime

Take it further — related ideas

Each comes with revenue math, a full build guide, and a prompt to paste into Claude or Cursor.

9 ideas in the archive

Ship in:
beginnerBusiness Automation

ContractPulse - Vendor Renewal and Health Monitor for Bootstrapped SaaS Teams

Small SaaS teams routinely lose money on zombie vendor contracts because no one owns the renewal calendar. ContractPulse ingests your vendor invoices and emails, surfaces upcoming renewals, flags price drift, and sends Slack alerts 30 days out. It's the CFO dashboard you couldn't afford to hire.

Time to ship2 weeks
DemandHigh
Revenue7/10
AI quality score6/10
View Details →
intermediateAnalytics

PageWatch - Affordable Visual and Text Diff Monitor for Journalists and Archivists

The Wayback Machine is great for finding what a site looked like in 2018 — not so great for getting a Slack alert the moment a government agency quietly edits a policy page. PageWatch monitors your URL list daily, generates pixel-level visual diffs and text change extracts, and sends you a digest before your morning coffee.

Time to ship2 weeks
DemandHigh
Revenue7/10
AI quality score7/10
View Details →
advancedNLP & Text AI

PitchParse - NLP Engine That Extracts Investable Signals from Founder Update Emails

Investors drown in weekly founder update emails and extract key metrics manually into spreadsheets like it's 2008. PitchParse is an NLP pipeline that ingests raw founder update emails, extracts MRR, churn, burn rate, headcount delta, and sentiment signals, and outputs a structured JSON dashboard per portfolio company — automatically. No more copy-pasting revenue numbers from Gmail.

Time to ship3 weeks
DemandHigh
Revenue8/10
AI quality score7/10
View Details →
intermediateFinance

EquityLens - Bloomberg-Grade Financial Insights for Retail Investors at $15/Month

Retail investors are tired of squinting at Yahoo Finance tables and paying $400/month for Bloomberg they can't afford. EquityLens surfaces clean quarterly revenue, EPS, and FCF trend charts for 200+ stocks, built for humans not hedge funds.

Time to ship3 weeks
DemandHigh
Revenue7/10
AI quality score7/10
View Details →
intermediateDeveloper Tools

RepoMap - Interactive Codebase Dependency Visualizer for TypeScript Monorepos

CodeSee went closed-source and left thousands of devs staring at spaghetti imports with no map. RepoMap is a CLI-first tool that generates interactive SVG dependency graphs from TypeScript and Node codebases in under 10 seconds. Think 'git log' but for your architecture.

Time to ship2 weeks
DemandVery High
Revenue8/10
AI quality score8/10
View Details →
intermediateSales Automation

PipelineReplay - CRM Pipeline History Snapshots and Trending

Automatically snapshots your Salesforce or HubSpot pipeline daily, stores the history, and surfaces month-over-month trending in a 3-line dashboard. See what deals moved, stalled, or closed—without manual exports.

Time to ship2 weeks
DemandVery High
Revenue8/10
AI quality score7/10
View Details →
beginnerRestaurant Tech

WasteHQ - AI Waste Reduction Dashboard for Restaurants (Predict Spoilage, Optimize Ordering)

Restaurants waste $162k per year on average. Scan inventory, log waste, let AI predict spoilage and suggest ordering adjustments. Paid for itself in 2 months for most restaurants.

Time to ship6 weeks
DemandHigh
Revenue8/10
AI quality score7/10
View Details →
beginnerFinance

MicroBiz - All-in-One Finance and Operations Dashboard for Micro-SaaS Founders

Micro-SaaS founders log into 6 different tools daily: Stripe for payouts, Plaid for spending, email for refunds, analytics platform for metrics, AWS for costs, and a spreadsheet for projections. MicroBiz combines all of them into one obsidian-dark dashboard with a single metric that matters: 'Are we profitable this month?'

Time to ship2 weeks
DemandVery High
Revenue7/10
AI quality score7/10
View Details →
low-codeDeveloper Tools

RepoHeath - Real-Time GitHub Repo Health Dashboard for Maintainers

One-click GitHub repo audit that flags stale dependencies, inactive maintainers, security vulnerabilities, and engagement decay — then sends you a Slack alert when red flags spike. No more surprise abandonware.

Time to ship2 weeks
DemandHigh
Revenue6/10
AI quality score8/10
View Details →