Casey White
The studio
Live

Aurenia Consulting Portal

A whole consulting firm, compressed into software.

AI that walks any company through the stages of a digital transformation, one written deliverable at a time, and hands them boardroom-grade deliverables at the end.

Category

Enterprise SaaS

Timeline

2 months · 4 sprints · 8 modules

Focus

Enterprise & field

Aurenia Consulting Portal

Why I built it

I kept rebuilding the same thing over and over. Every stage of the transformation work, the maturity diagnostic, the strategy deck, the business case, lived in its own standalone app, and none of them talked to each other. So I built one unified workspace where a consultant, or the client themselves, could walk a company through the whole pipeline in one place, with every module feeding the next. Instead of hand-crafting a boardroom-grade deliverable for every client, the portal generates them on demand, grounded in real consulting playbooks.

What it does for people

  • One portal covering eight of the nine stages, from the Diagnostic Mirror and the voice of the customer through strategy, roadmap, business case and vendor selection to change and the value it delivers, instead of a pile of disconnected tools
  • Every module ships a polished, client-ready artefact with real charts baked in. Strategy alone drops six or more
  • Multi-tenant from the ground up. Every org is isolated, consultants only see their assigned clients, admins see everything
  • Stripe billing and entitlement gating, with a graceful Talk to Casey fallback when billing is off so nothing ever hard-fails
  • A Pulse Check lead-gen front door that scores incoming leads, ranks them against a cohort, and emails me the moment a hot one lands

Under the hood

  • Domain expertise is lifted straight into the AI's runtime prompts. Each module carries markdown skill files (finance, legal, marketing, ops playbooks) concatenated into Claude's system prompt, so the output reasons like a specialist rather than a generic chatbot
  • An adversarial second pass argues against every finished report and returns blocking, material and minor findings with a deliver, revise or hold verdict. A blocking finding triggers one regeneration, kept only if it is better
  • The numbers are computed, not written: cash flow, NPV, IRR, payback and sensitivity come from a finance model in code and export to a spreadsheet; the model explains them
  • Smart model routing to keep costs sane. Sonnet handles narrative and judgment, Haiku does the cheap rule-based scoring, and Opus is banned from production routes on purpose
  • Two generator patterns: Claude emits HTML wrapped by a deterministic renderer, or strict JSON composed from database rows, with citation validation that rejects any claim citing a source that was not in the input
  • Long-running AI pipelines split into a fast kick route and a 300-second synthesize route to live within serverless duration limits, with read-only status polling that never triggers a state transition
  • RLS on every table with an assignment-scoped tenancy model, plus idempotent Stripe webhooks keyed on the event ID

The cool bits

  • The skill-lifting trick means the AI is not guessing. It is grounded in actual domain playbooks that ship inside the repo
  • Reports come out ready to present: cover pages, animated charts and brand-locked theming
  • Citation validation is a neat guardrail. If the model tries to hallucinate a source, the row gets thrown out and the synthesis aborts past a rejection threshold
  • It graceful-degrades everywhere. Stripe off, missing tables, failed PDF render, nothing takes the whole page down

How long it took

About two months of focused building.

2 months · 4 sprints · 8 modules

What I worked through

Getting AI output to feel like a real consultant instead of a generic assistant was the whole ballgame. That is what pushed me to lift actual domain playbooks into the prompts and add citation validation so it could not make things up. Serverless timeouts were a constant headache: long syntheses blow past duration caps, so I split everything into fast kick-off routes and separate long-running synthesize routes. And making it truly multi-tenant, with RLS on every table, assignment-scoped access, and idempotent webhooks, meant sweating the boring-but-critical plumbing so client data stays walled off.

The full stack

  • Next.js 16 (App Router)
  • React 19
  • TypeScript
  • Supabase (Postgres, Auth, RLS)
  • Claude Sonnet + Haiku (@anthropic-ai/sdk)
  • Stripe
  • Tailwind CSS v4
  • shadcn/ui + Base UI
  • Recharts
  • @react-pdf/renderer + pptxgenjs
  • Vercel (crons + Blob)
  • PostHog
  • Nodemailer (Zoho)