§ 01 Problem
Personal finance apps fail in two ways: they make adding a transaction feel like filing taxes, or they generate 'insights' from three data points and present them as truth. I wanted a minimal tracker where entry is fast, and where the analytics layer is honest about how much data actually backs each claim.
§ 02 Approach
- Next.js 14 App Router with server actions per domain (src/actions/ — income, expense, goal, reminder, budget-alert, each with its own test file), Clerk for auth with a user-sync webhook, and Neon Postgres through a six-table Drizzle schema.
- The 'Oracle' insights engine (src/lib/oracle/) is deterministic heuristics, not an LLM: trend, anomaly, health-score and goal insights, each passed through a confidence estimator that scores 0–100 based on data volume and time span — with under a month of data, a 'trend' caps at low confidence instead of pretending.
- Recurring reminders run on a Vercel cron (daily 08:00 → /api/cron/reminders), and reports export to PDF via jsPDF.
- Quality gates from day one of a one-week build: Vitest unit tests co-located with every server action, Playwright e2e config, Lighthouse CI, and Web Vitals reporting.
§ 03 Outcome
Live at budgeify.vercel.app: sign up, track income and expenses, set goals, get calendar reminders. The part I'd defend in an interview is the confidence layer — an analytics feature that quantifies its own uncertainty instead of hiding it.
