
SpendSavvy
A subscription expense tracker with a free trial, Stripe billing and spending charts.
01 / The problem
The client wanted a simple website where people log what they spend and see where their money goes, and it had to make money from day one. New users get three days of full access, then pay a monthly subscription to keep going.
02 / Decisions
The trial lives on the user
Each account stores when its trial ends and whether it is subscribed. Every protected page checks both, and sends expired users to the payment page.
Stripe decides who has paid
Checkout runs on Stripe, and Stripe's webhook is what turns a subscription on or off. The app never trusts the browser for that.
Numbers people can read
The tracker shows this month's total, the trend against last period and a chart by category, with a form that works on a phone.
03 / The system
The shape of the system

04 / Results
- Built to the client's scope document. The demo is live on Vercel.
More detail
The problem
The client wanted a simple website where people log what they spend and see where their money goes. It had to earn from day one, so new users get three days of full access and then pay a monthly subscription to keep using the tracker.
What I built
I built it full stack from the client's scope document.
- Sign up and log in with email and password. Each account stores when its trial ends and whether it has paid.
- Trial checks on every protected page. When the trial runs out, the user lands on the payment page instead of the tracker.
- Stripe subscriptions. Checkout runs on Stripe, and Stripe's webhook is what switches access on or off.
- The tracker. Add an expense with a date, category, amount and note. See this month's total, the trend against last period and a chart by category.
- Marketing pages for home, about and contact, with a contact form that sends email.
Stack
Next.js 15, React 19 and TypeScript, Material UI and Tailwind CSS, MongoDB with Mongoose, Stripe, Chart.js and Nodemailer, deployed on Vercel.
Outcome
Built to the client's scope. The demo is live at spendsavvy.vercel.app.
Next project
Latent