All projects

Full-Stack ProductStatus: PrototypeYear: 2026

Vasoli

Payday-aware budgeting: one honest number for what is safe to spend before salary day.

A look inside

4 screens from the real build. Select any to see it full size.

The Today screen turns recorded balances, upcoming bills and the payday plan into one number: how much extra can be spent before payday. It names the account it used and says which inputs, such as unrecorded spending, can change the estimate.
The payday plan holds the inputs behind the Today number: payday date, daily allowance, a protected minimum reserve, money set aside for a goal, and which accounts count. The Go backend does the calculation in integer paise, and the extra-expense preview reruns it without saving anything.
Activity after importing a sample HDFC-format CSV statement. The server parsed the file, checked the opening and closing balances, held back a row that duplicated a manual entry and a malformed row, and committed only the rows that were reviewed.
Recurring bills are tied to the account that pays them, so the payday forecast can reserve money for each one before its due date. Marking a bill paid links it to an existing Activity record instead of adding a second expense.

Overview

A personal-finance app for salaried people in India that answers one question: how much can I still spend before payday?

The problem

Budget apps show where money went. Salaried people mostly need to know what is safe to spend before the next payday, after bills, savings goals and a safety reserve.

What I built

Built the product: the Next.js app, the Go backend and its PostgreSQL schema, and the payday forecast.

What it does

  • Spending room until payday
  • CSV statement import with review
  • Recurring bills and goals
  • Receipt vault

System and architecture

Vasoli combines recorded balances, recurring bills, goals and a payday plan into one spending-room estimate, imports bank statements through a server-checked preview, and says which inputs could change the number.

A Next.js 14 frontend talks to a Go backend over Connect RPC. The backend uses sqlc for typed queries against PostgreSQL on Supabase, verifies Supabase JWTs, and computes the payday forecast in integer paise so rounding never drifts. An optional Gemini assistant, Marco, answers questions about your own data.

System map4 layers
  1. Interface
  2. API & services
  3. Retrieval & data
  4. AI & models
  • Payday forecast computed in integer paise on the server
  • Bank-statement import with balance checks and duplicate detection
  • Bills linked to the accounts that pay them

Technology

  • Go
  • Connect RPC
  • PostgreSQL
  • Supabase
  • Next.js
  • TypeScript

Themes

  • FinTech
  • Personal finance
  • Forecasting

Challenges and trade-offs

  • Giving one number without hiding its assumptions.
  • Importing messy bank statements without double-counting manual entries.

Outcome

At a glance

Go · Connect RPC · PostgreSQL · Integer-paise forecasting

  • Running as an invite-only private pilot.
  • Statement imports check opening and closing balances before anything is saved.

Learnings

  • Money math belongs in integers on the server, not floats in the browser.
  • A forecast earns trust when it says what it doesn't know.