Back to Projects

WiseWallet

GenAI + Microservices5 min read

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.

WiseWallet - Image 1
GenAI + Microservices
1 / 7

←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.

bash
1$ Next.js 15 (Vercel) :3000
2$ │ /api/*
3$ ▼
4$ API Gateway :8080 ◀── ArcJet shield + bot detection
5$ │
6$ ┌─────────┼─────────┬──────────┬────────────┬─────────┐
7$ ▼ ▼ ▼ ▼ ▼ ▼
8$ auth account transaction budget notification worker
9$ :4001 :4002 :4003 :4004 :4005 :4006
10$ │ │ │ │ │ │
11$ │ │ │ Groq │ │ Brevo │ Inngest
12$ │ │ │ receipt │ │ email │ 7 crons
13$ │ │ │ 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.

Tech Stack

Next.js
Express
Prisma
PostgreSQL
Neon
Groq
Inngest
ArcJet
Brevo
ShadCN UI
Tailwind CSS

Want to see more?

View All Projects