Full-Stack Application · Personal Project
Money Flow — Personal Finance PWA
- Next.js
- TypeScript
- Supabase
- Neon
- Google Gemini
- Web Push
Project Summary
Problem
I wanted to know where my money actually goes each month — across two currencies (KRW and USD) — without handing my financial data to a third-party app. And tracking alone wasn't enough: I needed budgets that warn me before I overspend, savings goals that update themselves, and a backup I never have to think about.
Approach
Money Flow turns daily financial records into a clear monthly view. Users can record income and expenses, monitor budgets, track savings, and review patterns with an AI assistant.
What I Built
- Transactions with categories, payment methods, tags, and multiple currencies
- Monthly budgets with alerts before spending drifts too far
- Savings goals and recurring transactions updated on schedule
- AI-assisted analysis, PWA installation, notifications, and automated backup
Implementation
Next.js 16 with Supabase Auth, Postgres, and RLS; scheduled Vercel routes handle recurring work and alerts. Gemini through the Vercel AI SDK powers analysis, while a second Postgres database supports recovery.
architecture
Backend Evidence
Core data
Key endpoints
- GET
/api/summaryAggregated totals for the analytics dashboard
- POST
/api/chatAsk Gemini a question about your own finances
- GET
/api/cron/recurringDaily cron — create scheduled recurring transactions
- GET
/api/cron/backupDaily cron — sync all Supabase tables to Neon
Engineering Decisions
Challenge
Running recurring work, alerts, reports, and backups without an always-on server
Decision
Used secret-protected scheduled routes for idempotent background jobs
Challenge
Keeping each user’s financial records isolated at the database boundary
Decision
Applied RLS to owner-scoped rows and automated a secondary Postgres backup
Takeaways
- RLS moves the security boundary into the database — an application bug can no longer leak another user's rows
- Serverless crons are enough for real background work when every job is safe to re-run
Dev Lab — Personal Practice & Tooling Monorepo