Skip to content
Back to Projects
Money Flow — Personal Finance PWA

Full-Stack Application · Personal Project

Money Flow — Personal Finance PWA

Solo Developer 2024 — Present 1 developer
Live
  • 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

Next.js 16 (App Router)
Supabase Auth + RLS
Supabase Postgres
Vercel Cron Jobs
Neon backup · Gemini AI
Row Level Security enforces per-user data access in the database itself, not just in application code. Background work runs as six secret-protected Vercel crons — recurring transactions, budget alerts, monthly email reports, savings updates, exchange-rate cleanup, and a daily full sync of every table to a Neon backup database.

Backend Evidence

Core data

userstransactionscategoriespayment_methodsbudgetssavings_goalsrecurring_transactionstransaction_templates

Key endpoints

  • GET/api/summary

    Aggregated totals for the analytics dashboard

  • POST/api/chat

    Ask Gemini a question about your own finances

  • GET/api/cron/recurring

    Daily cron — create scheduled recurring transactions

  • GET/api/cron/backup

    Daily cron — sync all Supabase tables to Neon

Engineering Decisions

  1. Challenge

    Running recurring work, alerts, reports, and backups without an always-on server

    Decision

    Used secret-protected scheduled routes for idempotent background jobs

  2. 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
Next Project

Dev Lab — Personal Practice & Tooling Monorepo