/ tech-stacks / Best Tech Stack for an Analytics Dashboard as a Solo Developer
tech-stacks 6 min read

Best Tech Stack for an Analytics Dashboard as a Solo Developer

The best tech stack for building an analytics dashboard as a solo developer - frameworks, databases, hosting, and tools.

Best Tech Stack for an Analytics Dashboard as a Solo Developer

Analytics dashboards are everywhere. Whether you're building a web analytics tool (like Plausible or Fathom), a business metrics dashboard, a social media analytics platform, or an embeddable analytics widget for other SaaS products, the technical challenges are the same: ingest large volumes of events, aggregate them efficiently, and display charts that load fast.

The stack matters more here than most app types because bad database choices at the start can make your product unusably slow as data grows.

Layer Pick
Frontend Next.js (React)
Charts Recharts or Tremor
Backend Next.js API routes
Analytics DB ClickHouse (via Tinybird or ClickHouse Cloud)
App DB PostgreSQL (via Prisma)
Event Ingestion Cloudflare Workers
Hosting Vercel
Payments Stripe

Frontend: Next.js + Charting Library

An analytics dashboard is a chart-heavy, data-dense application. Users expect interactive charts, date range selectors, comparison views, and instant filtering. Next.js with React gives you the component ecosystem and data fetching patterns to build this well.

For charting, you have two strong options:

Recharts is the most popular React charting library. It's composable (charts are built from components like <LineChart>, <Bar>, <Tooltip>), handles responsive layouts, and supports all standard chart types. It uses SVG rendering, which means charts look crisp at any resolution.

Tremor is a newer option built specifically for dashboards. It gives you pre-built dashboard components (KPI cards, area charts, bar lists, tables) that look professional out of the box. If you want to ship a polished dashboard fast without spending days on custom chart styling, Tremor saves significant time.

For the dashboard layout itself, use a clean sidebar + main content pattern. Date range picker at the top, KPI summary cards below, then detailed charts. Keep it simple. Every analytics product that tried to be too clever with its UI ended up confusing users.

The Critical Decision: Your Analytics Database

This is where most solo developers make the wrong choice. Do not use PostgreSQL for analytics event data. It works fine with 10,000 events but falls apart at 10 million. Analytics queries are fundamentally different from application queries. You're doing aggregations (COUNT, SUM, AVG) over time ranges across millions of rows, not looking up single records by ID.

ClickHouse is the right database for analytics workloads. It's a columnar database designed specifically for aggregation queries over large datasets. A query that takes 30 seconds in PostgreSQL runs in 50 milliseconds in ClickHouse.

For a solo developer, you don't want to manage ClickHouse yourself. Use one of these managed options:

Tinybird is the best choice for most solo developers. It gives you a ClickHouse-powered data platform with an HTTP API for ingestion, SQL for querying, and published API endpoints. You define a SQL query, Tinybird exposes it as a REST API with caching and rate limiting. Their free tier handles 10GB of data and 1,000 requests/day.

ClickHouse Cloud is the direct managed option if you want full ClickHouse SQL access. Pay-per-use pricing starts very low and scales with your data volume.

Application Database: PostgreSQL

You still need PostgreSQL for your application data: user accounts, billing, dashboard configurations, saved reports, alert settings. This is standard relational data that Postgres handles perfectly.

Keep the two databases separate. PostgreSQL for app data (via Prisma), ClickHouse/Tinybird for analytics events. They solve different problems and mixing them creates performance issues as you scale.

Event Ingestion: Cloudflare Workers

Your analytics system needs an ingestion endpoint that handles high-throughput writes. Events come in fast. A website with 10,000 daily visitors generates 50,000+ events per day (page views, clicks, sessions).

Cloudflare Workers are ideal for ingestion:

  • Zero cold starts - Every event gets processed instantly
  • Global edge - Low latency regardless of where the user's site visitor is
  • Massive scale - 100,000 free requests/day, then $0.50/million
  • Simple - A Worker that validates the event and forwards it to Tinybird/ClickHouse

The Worker receives an event (page view, custom event, etc.), validates and sanitizes it, enriches it with geolocation data (Cloudflare provides this automatically via cf headers), and sends it to your analytics database.

This separation of concerns is important. Your dashboard server doesn't need to handle ingestion traffic. The two have completely different scaling characteristics.

Hosting: Vercel

Vercel for your Next.js dashboard application. The dashboard itself is a relatively standard web app with server-rendered pages and API routes. Vercel handles deployment, CDN, and serverless functions.

Your architecture ends up with three deployment targets:

  1. Vercel - Dashboard app and API
  2. Cloudflare Workers - Event ingestion endpoint
  3. Tinybird/ClickHouse Cloud - Analytics data storage and query engine

This might seem like over-engineering, but each piece is simple and handles its concern well. A monolithic approach would create scaling problems when your ingestion traffic is 100x your dashboard traffic.

Nice-to-Haves

  • Stripe for subscription billing (usage-based pricing works well for analytics tools)
  • Resend for email reports and alerts
  • Upstash Redis for rate limiting on the ingestion endpoint
  • IP geolocation (Cloudflare provides this free in Workers)
  • User-Agent parsing for browser/device analytics (ua-parser-js)
  • React Query (TanStack Query) for efficient dashboard data fetching with caching

Monthly Cost Breakdown

Service Cost
Vercel (Pro) $20/month
Tinybird (free tier) $0
Cloudflare Workers (free tier) $0
Neon Postgres (free tier) $0
Stripe 2.9% + 30c per transaction
Domain $1/month
Total ~$21/month + Stripe fees

As data volume grows, Tinybird's paid plans start at $400/month for serious workloads. But by that point, you should have revenue to cover it.

Conclusion

The best stack for a solo developer building an analytics dashboard: Next.js with Recharts or Tremor for the frontend, ClickHouse (via Tinybird) for analytics data, PostgreSQL for application data, Cloudflare Workers for event ingestion, and Vercel for dashboard hosting.

The single most important decision is using a columnar database for analytics queries instead of PostgreSQL. This is the difference between a dashboard that loads in 200ms and one that takes 15 seconds. Get this right from day one and everything else falls into place. Get it wrong and you'll be rewriting your entire data layer six months in.