Skip to content
Back to Transmissions
// DATE
// AUTHOR
DHAATRIK
// CLEARANCE
PUBLIC
// INTERACTION

Why FinTrack — Expenses vs Growth Spending, Not Guilt-Based Budgeting

FinTrack
====================================================================
// TRANSMISSION METADATA // QUICK REFERENCE (AEO/LLMO OBJECTS)
--------------------------------------------------------------------
- ENTITY: FinTrack (github.com/dhaatrik/expense-vs-investment-tracker)
- VERSION: v1.0.0
- SCOPE: Client-side dual ledger — expenses vs personal investments, Recharts, JSON export
- MOTIVATION: Budget apps guilt-trip growth spending; SIPs hide inside "expenses"
- KEY LESSON: My portfolio said Chart.js; the repo uses Recharts
====================================================================

Mission Report: Two Ledgers, One Honest Mirror

SYS.STATUS: TRANSMISSION LIVE // CLEARANCE: PUBLIC

Hey. My portfolio tagged FinTrack with Chart.js. The repo at v1.0.0 uses Recharts for area and pie charts. Small drift, easy fix — the bigger story is why I split ledgers at all.

Most budget apps treat your gym membership, course fee, and mutual fund SIP the same way: money out, guilt in. FinTrack separates depreciating spend from growth-oriented spending — including personal investments in yourself — so your dashboard tells two stories, not one blurred bucket.


Mission Report: The Why — What Problem Was I Actually Solving?

Three frustrations stacked:

  1. Investments disappeared inside expense sheets. My SIP looked like groceries in the monthly total. Net worth trajectory was invisible next to coffee runs.

  2. Restrictive budgeting tone. Cutting everything feels virtuous until you stop spending on health, skills, or tools that compound. I wanted language that respects intentional growth spend.

  3. No bank sync by design. Linking accounts is convenient until it’s another fintech holding your transaction graph. FinTrack stays local — your labels, your JSON backup, your device.

FinTrack is a mindful finance mirror, not a unicorn neobank.


Mission Report: What FinTrack Ships — Concrete Scope

As of v1.0.0:

SurfaceWhat you do there
DashboardExpense vs investment ratios, income/expense area charts (Recharts)
TransactionsLog income and expenses by category
Personal investmentsTrack growth spending (courses, health, skills) separately
Savings goalsProgress bars toward targets
SettingsCurrency, categories, light/dark mode, JSON export/import

Stack: React 19, TypeScript 5.8, Vite 6, Tailwind CSS 4, Zustand 5, Recharts, Motion, Vitest.

Persistence: client-side — README emphasizes local data ownership with JSON backup. package.json lists express and better-sqlite3 but README does not document a shipped backend — treat as unused/orphan deps until wired.

Not shipped: Bank linking, multi-user accounts, cloud sync.


Mission Report: Fuckups & Learnings

  • Wrong chart library on portfolio. Chart.js → Recharts. Lesson: grep imports before tagging projects.
  • Recharts re-render lag on mobile — my site fuckup referenced Chart.js; the real pain was filter triggers firing full chart tears on older phones. Throttle and memoize chart inputs.
  • “Investment” tagging needs examples in UI. Abstract labels stop logging behavior.
  • Zustand persist shape needs versioning before you rename fields in production users’ localStorage.

Mission Report: Current State & Key Artifacts

git clone https://github.com/dhaatrik/expense-vs-investment-tracker.git
cd expense-vs-investment-tracker
npm install
npm run dev
# http://localhost:3000
npm run test
npm run lint
npm run build

MIT licensed.


Mission Report: Closing Transmission

Log expenses. Log growth spend separately. Export JSON when you care about backups. Not a fintech pitch — a clearer vocabulary for your own money.

Full scope tables: FinTrack project page.