WiseWallet
AI-powered personal finance — Groq receipt scan, split bills with friends, budget alerts & monthly AI reports. Next.js microservices monorepo, Neon PostgreSQL, Prisma, Inngest, ArcJet, Brevo.

←Use arrow keys or swipe to navigate→
The Problem
Most people still track money the hard way — typing every UPI payment, coffee, and subscription into a spreadsheet or a basic budgeting app. Receipts sit in the camera roll; bank SMS alerts are noisy and unstructured. Generic finance apps show pie charts but rarely answer the questions that matter: *What did I actually spend on food this month? Can I trust this categorization? Will I blow my budget before month-end?*
The gap is not another ledger — it is an **AI-assisted finance product** built for India: photograph a receipt and get a categorized transaction in seconds, split bills with friends without a bank account, automate recurring bills, nudge before overspend, and email monthly AI insights. Few portfolio builds combine microservices architecture, Groq vision OCR, Inngest cron workflows, split-expense groups, ArcJet abuse protection, and Brevo transactional email in one cohesive INR-native platform.
My Role & Constraints
Solo Full-Stack Engineer, Architect & Product Owner — I built WiseWallet end-to-end.
**Frontend:** Next.js 15 App Router — marketing landing with 3D net worth preview, sign-in/sign-up (email + Google OAuth), protected dashboard, transaction entry with AI receipt scan, reports with charts + AI coach, subscriptions, splits, and settings. ShadCN UI + Tailwind dark mode. React Hook Form + Zod validation. Recharts + Three.js for 2D/3D financial visualizations.
**Backend:** 6 Express microservices + API Gateway — auth (:4001), account (:4002), transaction (:4003, includes splits + AI), budget (:4004), notification (:4005), worker (:4006). Shared @wisewallet/database Prisma package on Neon PostgreSQL. JWT + refresh tokens with session management.
**AI:** Groq LLM — receipt scan extracts amount, merchant, category; AI Finance Coach answers natural-language spending questions; monthly report cron generates personalized insights.
**Automation:** Inngest — 7 background functions: recurring transactions, budget alerts, category budget alerts, bill reminders, weekly digests, monthly AI reports. Brevo delivers branded HTML emails.
**Security:** ArcJet Shield + bot detection on gateway; per-user rate limits on account/transaction creation and receipt scans.
System Design / Architecture
WiseWallet is a **monorepo with microservices architecture** — Next.js frontend on :3000 proxies all /api/* to a single API Gateway on :8080, which routes to domain-specific Express services.
1$Next.js 15 (Vercel) :30002$│ /api/*3$▼4$API Gateway :8080 ◀── ArcJet shield + bot detection5$│6$┌─────────┼─────────┬──────────┬────────────┬─────────┐7$▼ ▼ ▼ ▼ ▼ ▼8$auth account transaction budget notification worker9$:4001 :4002 :4003 :4004 :4005 :400610$│ │ │ │ │ │11$│ │ │ Groq │ │ Brevo │ Inngest12$│ │ │ receipt │ │ email │ 7 crons13$│ │ │ OCR │ │ │14$└─────────┴──────────┴─────┬────┴───────────┴──────────┘15$▼16$Neon PostgreSQL (Prisma)
**Services:**
- auth-service — Google OAuth, email/password, JWT + refresh tokens, session CRUD
- account-service — multi-account CRUD, default account, balance tracking
- transaction-service — transactions, CSV import/export, receipt AI scan, analytics, splits, subscriptions
- budget-service — monthly budgets, category budgets, savings goals
- notification-service — Brevo email dispatch + email history
- worker-service — Inngest webhook + 7 cron/event functions
**Receipt → transaction flow:**
1. User uploads receipt in transaction form
2. POST /api/transactions/scan-receipt (multipart) → Groq vision → JSON { amount, date, description, merchantName, category }
3. User reviews pre-filled fields → POST /api/transactions writes row + updates account balance atomically
**Split expenses:** Separate from bank transactions — create group, share /split/{token} invite link, equal split among members, settle up balances. No bank account required for friends.
**Inngest jobs:** Daily recurring bill processor · budget/category alerts every 6h · bill reminders · weekly digests (Monday) · monthly AI reports (1st of month).
**Database** (Prisma / Neon PostgreSQL): User, UserSession, Account, Transaction, Budget, CategoryBudget, SavingsGoal, CategoryRule, SplitGroup, SplitMember, SplitExpense, SplitShare, SplitSettlement, EmailLog.
Key Engineering Decisions
- •Microservices by domain boundary — auth, accounts, transactions, budgets, notifications, and workers deploy independently; API Gateway is the single frontend entry point with ArcJet shield.
- •Groq receipt scan as synchronous API (not Inngest) — user gets instant form pre-fill and can correct AI mistakes before commit.
- •Inngest for cron-heavy work only — recurring billing, budget alerts, bill reminders, and monthly reports need durable retries and scheduling.
- •Split expenses completely separate from bank transactions — friends join via invite link without needing a WiseWallet account or bank account.
- •ArcJet on gateway + mutation services — Shield/bot blocking at edge; per-user rate limits on account creation, transactions, and receipt scans protect Groq API spend.
- •Brevo + branded HTML email templates — budget alerts, bill reminders, weekly digests, and monthly reports are production-quality emails, not plain-text cron logs.
- •JWT access (1h) + refresh (30d) with hashed session storage — view/revoke active sessions from settings; logout all devices supported.
- •Gateway streams request bodies (no `express.json()`) — multipart receipt uploads proxy correctly to transaction-service.
Business / Product Thinking
WiseWallet targets the **AI-assisted personal finance wedge** for India — UPI-heavy spending, paper receipts, INR-native formatting, and split bills with friends. Positioning: *photograph a receipt, get a categorized transaction in seconds* — plus Splitwise-style group expenses without bank linking.
**Product-led loop:** landing hero → sign up (email/Google) → create account → scan receipt or add expense → dashboard health score + 3D net worth → set budget → email nudge at 80% → monthly AI report on the 1st.
**Go-to-market:** live at wise-wallet-nine.vercel.app → demo video → GitHub.
**Monetization paths (not shipped):** free tier with N receipt scans/month; Pro for unlimited scans, multi-account exports, tax-ready CSV; family workspace with shared budget alerts.
Results & Impact
Live at wise-wallet-nine.vercel.app with source at github.com/subhm2004/WiseWallet. Watch demo.
**Shipped (product):** Marketing landing with 3D preview · email + Google auth · multi-account dashboard · **Groq receipt scan** · income/expense CRUD · CSV import/export · PDF reports · recurring bills · monthly + category budgets · savings goals · financial health score · 3D net worth timeline · AI Finance Coach · subscription detection · **Splitwise-style split groups** · dashboard widget customization · PWA installable.
**Shipped (platform):** 6 microservices + API Gateway · 7 Inngest background functions · Groq for OCR + coach + monthly insights · Brevo transactional emails (budget alerts, bill reminders, weekly digests, monthly reports) · ArcJet WAF + rate limits · Prisma on Neon PostgreSQL · JWT session management.
What I'd Do Differently
Add unequal split amounts per member in splits UI. Docker Compose for one-command local deploy. Production deploy configs for gateway + services on Railway/Render. Bank feed integration (India Account Aggregator) would reduce receipt-only dependency. User correction feedback on AI categories to improve prompts over time.