EVRION.
Ledgerly — main project image

Web App · Personal Finance

A production-ready budgeting web app: track income and expenses, set budgets, automate recurring transactions, chart spending, and reach savings goals — with money stored as integer cents, never floats.

Project
Ledgerly
Year
2026
Discipline
Full-Stack Web
Stack
Next.js · Supabase · Prisma

Context

Ledgerly is a cloud-backed personal budgeting app: log income and expenses, set per-category budgets, automate recurring transactions, watch the charts, and work toward savings goals from any browser on any device.

It's designed to be the unglamorous-but-correct kind of finance software — the sort where the details that don't show up in a screenshot are the ones that matter most.

Challenge

Money and time are the two things finance apps get subtly wrong. Floating-point math quietly corrupts totals over thousands of transactions, and naive date handling reports the wrong month the moment a user crosses a timezone.

On top of that, a multi-user finance app has zero tolerance for data leaking between accounts — every read and write has to be scoped to the authenticated user, without exception.

Approach

Every amount is stored as an integer in minor units — cents, never floats — and all month and timezone logic is computed in the user's own timezone, so the dashboard's 'this month' is genuinely theirs. The client never touches the database directly.

Each API route calls `requireUser()` to verify the Supabase JWT and scopes every query to that user. Domain logic — money, dates, stats, recurring rules, validation — lives in a dedicated `lib` layer behind Zod validation, kept honest by tests.

Outcome

Ledgerly ships the full feature set you'd expect and several you might not: a monthly dashboard with category breakdowns and trend charts, per-category budgets with rollover and over-budget alerts, recurring transactions posted by a daily cron with catch-up, savings goals, multiple wallets, and CSV import/export.

It also covers the basics properly — email verification, password reset, dark mode, localization, and real accessibility — and is built to run for $0 on free tiers.

Technical Detail

Next.js (App Router) + TypeScript + Tailwind CSS over a clean JSON API, so a future mobile or desktop client can reuse the same backend. Supabase provides managed Postgres and Auth, with Prisma as the ORM and TanStack Query and Table on the front end.

Every route enforces per-user scoping after verifying the Supabase JWT, and the money/date/stats/recurring logic is isolated in `lib` so the rules that matter are tested in one place.

// Gallery

The product landing — track, budget, and save
The product landing — track, budget, and save
Secure sign in
Secure sign in
Create a free account
Create a free account

// Next step

The next case study could be yours. Tell us what you're building and we'll tell you honestly how we'd ship it.