Flask · PostgreSQL · Multi-user

The expense tracker that keeps a ledger — and an opinion.

LedgerLite is a multi-user expense tracker with real authentication, category breakdowns, and CSV export. Add what you spend, set a budget per category, and get a straight answer about whether you kept it. Most trackers stop at the chart — LedgerLite adds the verdict.

The X factor

Every month, LedgerLite roasts you.

At the end of each month, LedgerLite looks at your category breakdown — not a canned tip, an actual read on your numbers — and generates a one-liner verdict. It's procedural, not templated filler: the line changes based on which categories are out of proportion, which ones are at zero, and how far over cap you went.

“You spent 3x more on food than rent. Priorities?”

Food vs. Rent

“₹0 on savings, ₹4,200 on subscriptions — bold strategy.”

Savings vs. Subscriptions

“Entertainment ate 41% of your budget this month. The popcorn wasn't that good.”

Entertainment share

Per-category budget caps

Set a monthly cap on any category. Cross it, and the dashboard doesn't wait for a report at month end — the row turns red immediately, with the exact overage amount displayed next to it, so you always know precisely how far you went over and on what.

Data-driven, not decorative

The roast generator runs entirely off your own ledger: category ratios, zero-spend categories, and cap overages feed a set of rules that pick the sharpest true statement about your month — no LLM, no fluff, just your numbers talking back.

Dashboard

What you actually see.

A category-by-category breakdown with caps, overage badges, and the roast of the month sitting right at the top.

localhost:5000/dashboard
Roast of the month

“₹9,640 on food, ₹0 in savings. The fridge is fine. The future isn't.”

CategorySpent / CapStatus
Rent₹18,000 / ₹18,000on track
Food & Dining₹9,640 / ₹6,000+₹3,640 over
Transport₹2,100 / ₹3,000on track
Subscriptions₹4,200 / ₹1,500+₹2,700 over
Savings₹0 / ₹5,000on track

Built with

Flask sessionsbcrypt password hashingPostgreSQLFlask-SQLAlchemyBudget-cap overage logicProcedural roast generationForm validation & flash messagesCSV exportJinja2 templates
Get started

Run it locally

LedgerLite runs on Flask with PostgreSQL as the primary datastore. A SQLite fallback is available for local development if you don't want to stand up Postgres right away.

shell
pip install -r requirements.txt

# PostgreSQL (recommended for full functionality)
export DATABASE_URL=postgresql://user:pass@localhost:5432/ledgerlite

# — or, for local dev without Postgres —
# omit DATABASE_URL to fall back to a local SQLite file

flask run
# → http://localhost:5000
PostgreSQL required for production

The app is built around Flask-SQLAlchemy against PostgreSQL, configured via the DATABASE_URL environment variable.

SQLite fallback for dev

Skip the Postgres setup while hacking locally — LedgerLite falls back to SQLite so you can register, log in, and add expenses immediately.