Full-Stack Build

Business Intelligence Platform.

An angel investor with 12 portfolio companies was getting status updates in a dozen different formats from a dozen different founders. Spreadsheets. PDFs. Loom videos. By the time problems surfaced in the financials, they'd already been brewing for months.

12Portfolio companies tracked
8 weeksBuild to launch
$18KMRR

The problem

Twelve portfolio companies. Twelve different ways of reporting up. The investor was spending five hours a week consolidating updates and was still missing risks that should have been obvious. Customer churn ticking up at one company. Burn rate accelerating at another. Cash runway shortening across the board. None of it visible until it showed up in a quarterly review.

The approach

One dashboard. Standardised reporting from each portfolio company. An AI layer that reads the structured data and surfaces risks before they become problems.

The deliverable was a full-stack web app, not a Notion template. Each portfolio company has its own tenant. Each tenant has standard reporting fields. The AI agent reviews the rolling data each week and flags anomalies (unexpected metric drift, missed reporting cadence, deteriorating ratios) into the investor's dashboard.

Architecture Founder updates (12 tenants) │ ▼ ┌──────────────────────────────┐ │ Standardised reporting form │ ← Next.js + Supabase └──────────────────────────────┘ │ ▼ Time-series store (Supabase / Postgres) │ ▼ ┌──────────────────────────────┐ │ Weekly AI risk pass │ ← Claude API │ - metric drift detection │ │ - cadence anomaly │ │ - cross-portfolio comparison │ └──────────────────────────────┘ │ ▼ Investor dashboard (sorted by risk score, weekly digest)

The build

Eight weeks, end-to-end. Database schema, authentication, multi-tenant data model, founder-facing reporting UI, investor-facing dashboard, AI risk scoring loop, weekly digest, alerts. Production deployment on Vercel with Supabase as the data layer.

Highlights:

The outcome

The investor now sees portfolio risk a quarter before it shows up in the financials. Five hours a week of consolidation work eliminated. The platform itself is generating $18K MRR through licensing to other investors managing similar-sized portfolios. The original engagement paid for itself inside the first 90 days; everything since is upside.

📈

The structural shift: A custom internal tool became a productised platform because the underlying problem was shared by other investors with similar portfolio shapes. The same architecture, repackaged.

Tech stack

Next.js 16, React 19, TypeScript, Tailwind, Supabase (Postgres + auth + RLS), Claude API (risk scoring), Vercel (deployment). Eight weeks from kickoff to production. Built solo with Claude Code as the engineering layer.

Need a custom internal tool?

The discovery call covers what you need, what already exists, and whether a build makes sense versus an off-the-shelf option.

Book a Discovery Call