← Back to the forge

Forge / Release 01 / MIT licensed

Track everyrupee.Own every row.

Cointraq is the expense tracker I wanted after two years of logging money in a Notes app. Self-hosted, open source and free to run, so the only person who sees your ledger is you.

Built in
2 to 3 days
Stack
Next.js 16 · Postgres
Cost
Free tiers

01 / The tour

Twenty-nine seconds.
The whole app.

The launch cut: the Notes app it replaced, then every screen in motion. Muted by default, sound on if you like a beat.

  • 01Dashboard and insights
  • 02One tap logging
  • 03Budgets and card cycles
  • 04Reconcile, recurring, Command K
FIG. 02 / Launch cut0:29

02 / Why it exists

Too dumb not
to build.

For two years I logged every expense in my phone's Notes app. Every single day. Well, most days. When I fell behind, I scrolled back through my UPI history to catch up, and when a payment had no note, I guessed.

I wanted to know where my money goes, where I spend the most, and how much goes to the right things versus junk. My notes could not answer any of it. I had seen plenty of expense apps and never installed one. So I built the one I would actually use.

The code is all thanks to Codex and Claude. The idea, the intuition, and how it works and feels are mine.

03 / How it happened

Built in 2 to 3 days,
spread over two months.

  1. 12 JulOne Sunday.

    Built the core the way I needed it: accounts, spends, card cycles, the dashboard.

  2. Two monthsUntouched.

    Life happened. The Notes app went back to work.

  3. 15 SepBack at it.

    Budgets, recurring bills, CSV import and insights.

  4. 20 SepFinished.

    Tagged 0.1.0 and open sourced it that night.

04 / What it does

Everything my notes
never could.

Spent · September₹38,420₹4,210 less than last month
01

One clear number

What you spent this month, and how it compares to last month.

Coffee ₹120Metro ₹60Lunch ₹180Groceries ₹860Coffee · ₹120 saved
02

Log it in one tap

Quick add for the things you buy every day. Five transaction types for everything else.

  • Food31%
  • Bills25%
  • Shopping16%
  • Transport13%
03

See where it goes

Every category and payment method, side by side.

Food is up 34%against your 3 month average

Spending fell 3 months runningkeep it going

04

Insights, not totals

Plain sentences about what changed, like food being up 34% on your average.

05

A year at a glance

Every day of spending on one grid. Quiet weeks jump out.

72%used
FoodImpulse over
06

Budgets and card cycles

Monthly caps with a pace marker, unbilled card spend and due bills.

Savings Bank

Cash in hand!

₹240 unaccounted. Probably snacks.
07

Recurring and reconcile

Rent waits for one tap. Reconcile catches the spends you forgot to log.

⌘K Budgets old-expenses.csv · 1,279 rows
08

Fast everywhere

Command K, search, bulk edit, CSV import and export. Installs on your phone.

05 / Deploy your own

Your own cointraq,
live in six steps.

About fifteen minutes on free tiers. You own the app, the database and every row in it.

FIG. 03 / The deploy stack
01 Fork02 Postgres03 Secrets04 Tables05 Vercel06 Live
6 steps About fifteen minutes
  1. 01
    30 sec

    Fork the repository

    Fork rahulm16/cointraq to your GitHub account. Vercel deploys from your fork, so every future update is a pull away.

    Fork on GitHub
  2. 02
    2 min

    Create a Postgres database

    Add Neon from the Vercel Marketplace, or use Supabase or any Postgres 17 host. Copy the connection string; it becomes DATABASE_URL.

    Keep ?sslmode=require on hosted connection strings.

  3. 03
    2 min

    Generate your secrets

    Clone your fork and create the two secrets the app signs you in with. The password hash is printed in base64, so paste it exactly as shown.

    Terminal
    git clone https://github.com/<you>/cointraq && cd cointraqnpm cinpm run hash-password -- 'your-password'openssl rand -base64 48
  4. 04
    1 min

    Create the tables

    Point the committed migrations at your new database. This creates an empty ledger ready for your real accounts.

    Terminal
    DATABASE_URL="postgres://..." npm run db:migrate

    Never run db:seed against your real database. It is for test data only.

  5. 05
    3 min

    Deploy on Vercel

    Import the fork into Vercel and add DATABASE_URL, APP_PASSWORD_HASH and SESSION_SECRET under Environment Variables. Then deploy.

    DATABASE_URLAPP_PASSWORD_HASHSESSION_SECRET
    Import on Vercel
  6. 06
    5 min

    Sign in and set up

    Open your URL and sign in with the password you chose. Add your bank, cash and card accounts with opening balances in Settings, then install it on your phone's home screen.

06 / Or skip the steps

Hand it to
an agent.

Paste this into Claude Code, Codex, Cursor or any IDE agent and let it do the clicking. A video walkthrough is coming soon.

Prompt

Deploy https://github.com/rahulm16/cointraq to Vercel for me. Create a free Neon Postgres database, generate APP_PASSWORD_HASH with `npm run hash-password -- '<my password>'` and SESSION_SECRET with `openssl rand -base64 48`, run `npm run db:migrate` against the new database, set DATABASE_URL, APP_PASSWORD_HASH and SESSION_SECRET in the Vercel project, and deploy. Do not run the seed script.

07 / What's next

Built fast.
Growing on purpose.

  1. 01
    Next

    Savings tracking

    The feature I haven't built yet: seeing what you keep, not only what you spend.

  2. 02
    Planned

    One deploy, many people

    Share one instance with friends. Each person's data stays private. Not even the admin can read it.

  3. 03
    Soon

    Deploy walkthrough

    A step by step video for getting your own instance live.

Star it. Break it.
Tell me what to build.

THE SYSTEMS ATLAS / INDEX
RAHUL.SYS / TERMINAL

A small door into the atlas. Type help to begin.