M Mint

A Love, Ando build · in the open

The system of record for insurance sales agencies.

Mint is a training platform, a lead marketplace, and the book of record for the setter/closer sales model, live in production at mintleads.bid. This dossier walks the app screen by screen, maps the flow a lead takes from set to close, documents the backend, and hands you the repo.

Live at mintleads.bid Next.js 16 · React 19 · TypeScript Supabase · Stripe · LiveKit 37 screens · 105 migrations

Built in the open. You are welcome to take this blueprint and rebuild it yourself. It is shared in the spirit of pushing real things into the world, the same ethos behind loveando.org.

Contents

  1. 01The appThe screens that carry the product
  2. 02User flowFrom set to close, and the money rail
  3. 03Screen inventoryEvery screen, by who uses it
  4. 04Backend & architectureWhat runs under the screens
  5. 05Rebuild it yourselfThe repo and the path to running it
37
App screens
105
DB migrations
5
Live integrations
$0.85
Per-FI billing rail
Multi
Tenant, white-label
Live
Real-time voice floor

The app

A working sales floor, not a form.

Four of the screens that carry the product. Reps and customers below are fictional; the layouts, states, and flows are the real app.

mintleads.bid/market
Marketplace Numbers Calendar + New Lead
KN
K. Nguyen
Term life · age 52 · NJ
Cooking
Set by Dre C. · 2m ago
RA
R. Alvarez
IUL · age 41 · PA
On deck
Next: Priya S.
MT
M. Tran
Final expense · age 68
Claimed
✓ Marcus B.
DP
D. Powell
Whole life · age 34
Cooking
Set by Mara W. · 5m ago
Setter → Closer

The lead marketplace

Setters generate leads; the AI scores and posts them as they "cook." A batting order puts the next closer on deck, and claims are atomic, one closer per lead, live for the whole floor.

/market · /closer/market
mintleads.bid/numbers
New leads 2 cooking
KN K. Nguyen · Term life
DP D. Powell · Whole life
🎤 Voice Board 3 on floor · 1 on FI
PS Priya S. On FI
MB Marcus B. (you)
JO Janelle O.
Chat
MW
Mara W.
warm transfer coming your way 🔥
B
Blanksy · bot
New lead cooking: D. Powell
Real-time

The floor dock, on every page

A persistent right-side dock: cooking leads, a LiveKit voice board where closers go live on a warm transfer (rep audio recorded for coaching), and team chat with an AI teammate. It stays connected as reps move around the app.

components/chat · components/voice · LiveKit
mintleads.bid/numbers
Marketplace Numbers Calendar
RepContactsFIWTClose
DCDre Callahan41632
MWMara Whitfield38543
TRTobias Reyes29311
3 checked in today FI = field intake · WT = warm transfer
System of record

The numbers tracker

Every rep's day, contacts, field intakes, completed warm transfers, closes, rolled into leaderboards, a daily check-in board, and commissions. A warm transfer counts on completion, not on a closer merely reserving the lead.

/numbers · /closer/numbers
mintleads.bid/admin/lead-pool
Admin Agents Lead pool Commissions Carriers
Open pool cycle
Aug · Week 2
14 setters bought in · $2,100
Token wallet
$0.85 / FI
Prepaid, auto-reload
Agents
28 active
Reps · closers · managers
Commission ceiling
Per agency
Override rules applied
Operate & monetize

The admin control room

Agencies, agent levels, carrier appointments and products, comp schedules, override rules, lead-pool buy-ins, and the token wallet that bills per field intake. Every table is tenant-scoped for white-label.

/admin/* · 22 admin screens

User flow

From set to close, and the money rail underneath.

One lead's journey. Setters work the top of the funnel, closers take the warm transfer, and the billing rail meters the one event that matters, the completed field intake.

SetterSetter creates the lead
AI scans and scores itBlanksy posts it to the marketplace
The lead cooks in the marketplace
Batting order puts a closer on deck
CloserCloser claims it, one owner, atomic
Warm transfer on the voice board
Warm transfer completes (WT)Metered to the token wallet
Field intake captured (FI)$0.85 per FI, billed via Stripe
Close-out and policy write
Commission, with clawback logic

Sandbox leads run the same flow in full isolation, so new hires train without ever touching the real marketplace, numbers, or money.

Screen inventory

Every screen, by who uses it.

37 application screens across the setter, closer, manager, and admin roles, plus the public and auth surfaces.

ScreenRouteWhat it does
Setter (rep + manager)
New lead intake/rep/opportunities/newCreate a lead; AI scan kicks off the market post
My leads & opportunity/rep/opportunities/[id]Work a lead, disposition, downstream visibility
Champions club/rep/champions-clubRecognition and gamified milestones
Manager home/managerDownline oversight for team managers
Closer (AE)
Closer dashboard/closerThe claim-and-close workspace
Closer market/closer/marketClaimable cooking leads + batting order
Close-out/closer/opportunities/[id]Field intake, warm-transfer completion, policy write
AE numbers/closer/numbersCloser production and leaderboards
Shared workspace
Marketplace/marketThe live lead floor
Numbers/numbersDaily tracker + check-in board
Calendar/calendarAppointments and follow-ups
Sandbox/sandboxIsolated practice leads for new hires
Profile/profileAgent profile, photo, purchase history
Admin (22 screens)
Agents & levels/admin/agents · /admin/agent-levelsRoster, roles, downline, agent tiers
Lead pool & availability/admin/lead-poolBuy-in cycles, pool settings, availability
Commissions & comp/admin/agency-commission · /admin/comp-schedulesCommission ceilings, comp schedules, override rules
Carriers & products/admin/carriers · /admin/carrier-appointmentsCarrier catalog, products, appointments
Batting order & FI tracking/admin/batting-order · /admin/fi-trackingRotation control, field-intake compliance
CRM mapping/admin/ghl-mappingMap GoHighLevel locations to reps
Public & auth
Marketing site/welcome · /docs · /terms · /privacyPublic front door + agent-readable .md counterparts
Auth/login · /accept-invite · /forgot-passwordEmail/password, invite acceptance

Backend & architecture

What runs under the screens.

A Next.js App Router front end over Supabase Postgres, with real money and real-time audio wired through managed services. Everything is tenant-scoped for white-label.

Browser
Next.js 16 App RouterReact 19 server components
Vercel
Server actions
Route handlerswebhooks & cron
Supabase
Postgres + RLS
Auth
Storagesigned URLs
External Stripe · live LiveKit voice GoHighLevel + Wavv Web Push

🗃 Data & isolation

  • Postgres + Row Level Security on Supabase; 105 ordered migrations.
  • Tenant isolation routes through SECURITY DEFINER helpers, current_agent_id(), current_agency_id(), is_admin(), and RESTRICTIVE per-tenant policies.
  • Everything hangs off the agents table; a service-role client is scoped in app code.
  • Stores customer PII (health, meds, financials, DOB); deliberately no SSN or banking.

🔌 Integrations

  • Stripe (live), lead-pool buy-ins, the per-FI token wallet, and agency invoices.
  • LiveKit, the audio floor plus rep-side recording (egress) for coaching.
  • GoHighLevel + Wavv, auto-ingest of rep call activity into contacts.
  • Cron (advance-offers, snapshot-market, rep-tracker-reminder) + Web Push notifications.
Honest handoff. Two things to respect if you run this: Stripe is in live mode (every write moves real money), and the tenant-isolation surfaces are radioactive, a cross-tenant leak is the worst-case failure. The repo's AGENTS.md flags both in plain language; read it before the first deploy.

Rebuild it yourself

The repo, and the shortest path to running it.

The full source, migrations, and operating docs. Access is granted on request; from a clone, you are a few steps from a running instance.

📁 git@github.com:andomccall/mint-app.git 🔒 private · access on request

Clone & install

Next.js 16 / React 19 / TypeScript. Node + your package manager of choice.

Provision the services

A Supabase project (Postgres, Auth, Storage), Stripe keys, and optional LiveKit + GoHighLevel credentials. Copy them into your environment.

Apply the schema

Run the 105 migrations against your Supabase database, in order. They are applied to the database directly, not on deploy.

Run, then deploy

Local dev first, then Vercel for hosting and per-PR previews. The operating rules live in AGENTS.md and the live board in STATUS.md.

# from a clone
git clone git@github.com:andomccall/mint-app.git
cd mint-app && npm install
cp .env.example .env.local        # fill Supabase / Stripe / LiveKit
node scripts/db-exec.mjs           # apply migrations to your Supabase
npm run dev                        # http://localhost:3000

Built in the open

Take the blueprint. Build the thing.

This is one build from Love, Ando: real products pushed into the world, with the method shown openly. Rebuild it yourself with the build kit, and come build alongside me.

Rebuilding it? Copy the build kit straight into Claude Code. The newsletter and the monthly fireside are where the building continues.