Personal project
Regret Tracker
A mobile-first expense tracker with an honesty layer — every purchase is marked needed or regret, then waste rate, streaks, and pace warnings make the cost hard to ignore.
Home · 1 / 4
Overview
Most expense apps are neutral ledgers. Regret Tracker is intentionally confrontational: it records amount, category, and date, then forces a second truth — whether you needed the purchase. That flag powers the guilt engine: month-to-date “you could’ve saved,” waste rate, clean streak, equivalents (coffees, noodles), and a pace warning against your monthly budget.
I built it as a personal Next.js product for daily logging on phone, with the same destinations on desktop via a sidebar. Auth uses bcrypt + a JWT cookie; data lives in SQLite locally and Turso in production.
Evidence
Problem
Impulse spend is easy to forget once it leaves a bank statement. I wanted a lightweight daily log without bank sync — but one that surfaces unnecessary purchases as a measurable habit, not a buried line item. Needed spend still counts toward budget; only regrets feed the waste metrics.
Product surface
Mobile chrome uses a fixed bottom nav (Home, Stats, +, History, Settings); large screens get a persistent sidebar plus Report and a primary Log expense action. Logging is a short path: amount → category chip → needed / didn’t need → optional note and date. History groups by day with search and filters; Stats covers month navigation, needed vs regret totals, month-over-month deltas, a 7-day breakdown, category bars, and PDF / Excel export.
Architecture
Writes go through server actions (validate → insert/update → revalidatePath → redirect with a toast flag). There is no separate CRUD REST API. Protected pages call requireUser() themselves rather than a global middleware gate. Categories are Lucide-backed chips across Meals, Lifestyle, Digital, and Everything else. Exports use jspdf and exceljs behind /api/export.
Living with it
Building the app was one thing. Using it every day was the real test. Logging amount, category, and that needed-or-regret flag made my spending harder to blur past — waste rate and a broken clean streak sit on the home screen whether I want them or not.
The honest takeaway: Regret Tracker raised my awareness. It did not spend less for me. The dashboard is a mirror; self-control is still the product. The app is a tool to help with that — not a substitute for the pause before the next purchase.
Highlights
- Honesty-first logging: every expense is tagged necessary or regret before it can be saved
- Dashboard guilt signals — could’ve saved, waste rate, clean streak, and budget pace warnings
- History with All / Regrets / category filters plus note search; Stats with MoM deltas and 7-day bars
- PDF and Excel month exports from the stats surface
- Next.js App Router + Turso (libSQL), JWT sessions, light/dark theme, optional haptics
- Shipped live at expense-tracking-app-eosin.vercel.app
Technologies used
Core tools and libraries behind this project — click a logo for official docs.