Cashflow
liveA personal finance app that budgets from payday to payday, not the 1st to the 31st. Built solo, from schema to deploy.
- role
- Solo, design to deploy
- frontend
- React on Vercel
- backend
- NestJS, Prisma on Railway
- data
- PostgreSQL

the idea
Most budgeting apps reset on the 1st. Salaries don't. When pay lands on the 25th, a calendar-month budget splits one paycheck across two months and the numbers stop meaning anything.
Cashflow runs every budget on the pay cycle instead. The dashboard answers one question first: how much can I still spend before payday?
what it does
shared goals
Invite a partner to a savings goal and track who put in what. Only goals both people agree to share are visible to the other, and invites and accepts land in an in-app inbox.


recurring entries
Rent, bills and salary post themselves on the day. You can see what's still to come this cycle, and pause or edit a rule without touching entries already posted.

works on your phone
The same dashboard on mobile, with a bottom tab bar for the five main pages.

under the hood
The backend is where most of the work went.
React
web app · Vercel
NestJS API
auth · budgets · goals · scheduler · Railway
PostgreSQL
via Prisma
Resend
reset emails
- cycle snapshots
- Each pay cycle keeps a snapshot of its budget, so changing this month's plan never rewrites last month's.
- versioned rules
- Recurring rules keep their history, and a daily scheduled job posts what's due. Editing a rule only affects future entries.
- auth that holds up
- JWTs are invalidated after a password change, reset links are hashed and single-use, and login is rate-limited with per-account lockout.
- partner sharing
- Invitations, consent per goal and an inbox for events, so one person's data is never visible without the other agreeing.