Building an AI personal-finance SaaS solo = 3 months of plumbing before you write a real feature. Stripe webhooks, Supabase RLS, Claude prompts, OCR pipeline, CSV bank import, multi-currency, tax calculators. I did all of it - and packaged it as AI Personal Finance SaaS Starter.
This is not a chassis with "auth + dashboard". This is a worked fintech vertical, production-ready, running today, with all the domain-specific features a personal-finance app actually needs.
→ Live demo at ai-personal-finance.kpboards.com · Buy launch $199 on Polar.sh
Why I built this and why I'm selling it
I built FinanceAI from Q1 2025 for personal use - freelancer income volatility, no HR doing my insurance, no one planning retirement for me. The app still runs fine. But fintech SEA is hot right now - Indonesia, Thailand, and Vietnam all need local-first personal-finance apps. I don't have the bandwidth to ship in all three countries.
Open-sourcing the codebase is win-win: you save 3-4 months of plumbing (Stripe + Supabase RLS + Claude prompts + OCR + multi-currency + tax), I recoup the dev cost, and I keep maintaining publicly for buyers.
6 things shipped - not a chassis
1. Claude API insight engine - 4 prompt types, haiku + sonnet split
- Weekly digest (sonnet) - week summary, suggested actions
- Anomaly alert (haiku - 20× cheaper) - flags unusual spend
- Goal review (sonnet) - progress against goals
- Forecast write-up (sonnet) - 30/60/90-day cashflow analysis
Edge Function-based generation (supabase/functions/generate-insight/) - the Anthropic key stays server-side, never reaches the Next.js bundle. Per-user 7-day cache. Token + model usage tracked in the insights table, surfaced in the admin dashboard. 6 mandatory prompt rules: JSON-only, specific amounts, no hallucination, ≤120 words, right model per task.
Estimated cost: ~$5 - 15/month for 1k MAU.
2. OCR receipts + 5-bank CSV import
Three transaction input methods:
- Manual entry - RHF + Zod
- OCR receipt scan - Tesseract.js client-side (no server upload)
- CSV bank import - 5 pre-wired parsers: Vietcombank / Techcombank / TPBank / VIB / generic
CSV import has a diff-and-confirm screen - duplicates never land in the ledger.
3. Full finance suite + tax calculators
- Dashboard, transactions, goals (SMART templates + AI nudges)
- Budgets (caps + rollover + alerts)
- Recurring (subs + income detection)
- Debts (snowball + avalanche planner)
- Invoices + clients (freelancer mode)
- Accountant share-link (
/accountant/[token]with scope + expiry) - Forecast (30/60/90-day)
- Net-worth + portfolio
- Calendar
- Family/team accounts (owner / co-pilot / view-only)
- Tax calculators: VN TNCN (7-bracket), ID PPh 21 (PTKP 54M), TH PIT (8-bracket)
4. Stripe billing - multi-currency + freemium gate
- 3 tiers: Free / Pro / Family
- Webhook-verified upgrades, customer portal, dunning + grace-period handling
- Idempotent
stripe_eventstable - Multi-currency: USD/EUR/GBP/VND/IDR/THB
- Server-side freemium middleware blocks Pro routes for Free users
profiles_update_self_safe_columnsRLS policy blocks user-side billing tampering - the webhook is the only writer
5. Public API v1 + v2 + per-user API keys + TypeScript SDK
/api/v1/me,/api/v2/transactions/batch(100/call),/api/v2/usageApiKeytable stores prefix + sha256(plaintext); plaintext shown once at creation- Typed
FinanceAIClientSDK inpublic/sdk/with 429 auto-retry - Webhook delivery with auto-disable after 10 consecutive failures
6. RLS-first Postgres - 60+ migrations + verify:rls
- 60+ SQL migrations in
supabase/migrations/with pairedCREATE POLICYblocks for every table on_auth_user_createdtrigger materializes the Profile row on signupenforce_role_immutabilityblocks role escalationbun run verify:rlsasserts every table has RLS on + the right policy - drift fails CI
Plus extras
- Gamification - XP, levels, badges, streaks (with streak freeze), 10 badge types, weekly challenges. Wakes dormant users ~40% in my cohort vs the no-gamification control.
- PWA + offline + Web Push - service-worker, install prompt, offline shell, transaction-queue replay on reconnect,
/offlinefallback. Web Push (web-pushlibrary) for daily nudges / anomaly alerts / weekly recaps. - Demo mode -
NEXT_PUBLIC_DEMO_MODE=trueflips the deployment to read-only (every write API returns 403).bun run seed:demoprovisions an admin user + 90 days of sample transactions. - Investor PDF - admin analytics export with cohort LTV heatmap + onboarding funnel via jsPDF.
10 locales pre-wired
VN, EN, ES, FR, JA, KO, ZH, AR (with RTL), ID, TH. Type-safe keys, browser-locale + timezone auto-detect, hreflang alternates, multi-locale sitemap, language switcher. bun run i18n:check validates parity in CI; bun run i18n:sync writes [EN]-prefixed placeholders for missing keys.
Stack
Next.js 16 · React 19 · TypeScript 5.9 strict · Tailwind 4 · shadcn/ui · Supabase · Stripe · Claude API · Prisma 7 · i18next · TipTap · Tesseract.js · jsPDF · Sentry · PostHog · Vitest · Playwright
Pricing + license
- Launch $199 for the first 1000 buyers (then $299)
- Single-developer commercial - unlimited apps for self + direct clients, no source redistribution
- 6 months of free updates. After that, paid upgrade unlocks 12 more months
- 7-day no-questions refund
Who buys this, who doesn't
Buy if:
- Indie dev building a fintech SaaS - you don't want 3 months of plumbing before the first feature
- Founder going multi-locale on day one - 10 locales, multi-currency (USD/EUR/GBP/VND/IDR/THB)
- Agency building white-label personal-finance dashboards for clients
- You need a worked example of Claude API integration in production fintech
Skip if:
- You're not building fintech (consider Multi-language SaaS Starter - more general chassis)
- You're not deploying in SEA (multi-currency VND/IDR/THB is a strength; if you don't need it, this is overkill)
- You need a personal-finance app for self-use - this is a codebase to sell apps with, not an app for personal use
What about Stripe in Vietnam
The codebase uses Stripe directly. VN/SEA founders need a Stripe-supported entity (Stripe Atlas / US LLC) or a Merchant of Record like Polar.sh / Paddle. The wiring is processor-agnostic where it matters; the customer-portal + idempotent-webhook layer is the heavy lift the template saves you.
Multi-currency already covers VND / IDR / THB alongside USD / EUR / GBP.