Skip to content

Repository files navigation

πŸ’° Personal Finance Platform

Finance should feel like a game you're winning, not a spreadsheet you're losing.

A self-hosted personal finance platform. The mission: make managing money genuinely enjoyable β€” through clarity, progress, and a sense of level-up. Not another budgeting tool that guilts you. A compass that shows where you stand, what to do next, and celebrates when you move forward.

AI-powered ingestion handles the messy part β€” getting data out of bank CSVs, PDFs, and screenshots automatically so you spend time on decisions, not data entry.

Cashflow tracking, assets management, investment portfolio, spending analysis, and financial journey gamification are all live. Everything else is being built out one level at a time.

🧭 Who this is for

Most people aren't financially illiterate β€” they're directionally lost. They know saving is good. They know investing matters. But nobody handed them a map for in what order and how much is enough at each step.

This app is built for that person. Not the finance nerd with five brokerage accounts. The person who earns a decent salary, vaguely saves, occasionally invests, and still feels like they're not making real progress β€” because they don't have a framework, not because they lack money.

The Financial Pyramid gives them the framework. The app turns it into a game they can actually win.

πŸ€” The problem this solves

Most people don't have a money problem. They have a clarity and direction problem.

They earn, they spend, they occasionally invest β€” but without a coherent picture of where they stand or a framework for what to do next. Every financial tool they use answers a different slice of the question in isolation: a budgeting app here, a broker app there, a bank statement downloaded once a month that nobody reads. Plenty of data, no map.

The result is a financially active person who still feels stuck. Not because they're doing nothing β€” but because they don't know if what they're doing is the right thing at their level. Someone maxing out their investment portfolio while carrying high-interest debt. Someone diligently saving without knowing whether their emergency fund is adequate. Someone who opened a FIRE calculator before they've ever tracked a month of spending. Good intentions, wrong order.

That's the problem the Financial Pyramid is designed to fix. Financial health isn't a checklist β€” it's a hierarchy. Each level has prerequisites. You can't defend what you haven't yet built. You can't grow what you haven't defended. The pyramid makes the order explicit, so every decision has context: this is the level you're on, this is what matters here, this is what unlocks next.

This platform is built around that framework end-to-end. The data infrastructure (automatic ingestion from any Indonesian bank format, unified cashflow + assets + investments in one place) exists to feed the framework β€” so your pyramid scores reflect reality, not estimates. The gamification layer exists to make progress feel like progress, not just another month of tracking. The whole system points at one question: not "where did my money go?" but "how far up the pyramid am I, and what's my next move?"

Let's make finance fun!

πŸ”οΈ The Backbone: Financial Pyramid

Every feature in this app is anchored to a single framework β€” the financial pyramid hierarchy. Think of it as a compass for your financial life: it tells you where you are, where you're headed, and what to do right now at your level β€” not in ten years.

You can't invest well without a safety net. You can't build a safety net without understanding your cashflow. Skipping levels is how people end up with crypto portfolios and no emergency fund. The pyramid makes the correct order explicit, so every decision has context.

                 β–²
               β–ˆβ–ˆβ–ˆβ–ˆ             L5 Β· Legacy
                                Estate Planning Β· Succession Β· Tax Planning
             β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ           L4 Β· Freedom
                                FIRE Calculator Β· Passive Income
           β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ         L3 Β· Growth
                                Investments Β· Savings Goals
         β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ       L2 Β· Defense
                                Assets Β· Emergency Fund
       β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ     L1 Β· Foundations
                                Cashflow Β· Budgeting Β· Recurring

Each level unlocks naturally from the one below. The app tracks your score across all five tiers and surfaces exactly where to focus next β€” no guessing, no overwhelm, no shame. Just: here's your level, here's your next quest.

πŸ—ΊοΈ The Roadmap (by level)

L1 Β· Foundations β€” Know where your money goes

Feature Status
Cashflow tracking (upload, categorize, review) βœ… Live
Spending analysis (Safe-to-Spend, variance) βœ… Live
RAG β€” semantic search over transactions πŸ”„ In Progress
Budgeting (50/30/20, zero-based, envelope) πŸ”œ Soon
Recurring (bills, subscriptions, due dates) πŸ”œ Soon

L2 Β· Defense β€” Protect what you have

Feature Status
Assets & balance sheet (net worth, liabilities) βœ… Live
Emergency Fund tracker πŸ”œ Soon

L3 Β· Growth β€” Make money work

Feature Status
Investment portfolio (IDX, funds, bonds, crypto, P2P) βœ… Live
Savings Goals πŸ”œ Soon

L4 Β· Freedom β€” Build passive income

Feature Status
FIRE Calculator πŸ”œ Soon
Passive Income tracker πŸ”œ Soon

L5 Β· Legacy β€” Leave a mark

Feature Status
Estate Planning (hibah, warisan, wills, trusts) πŸ”œ Soon
Succession (business ownership transfer) πŸ”œ Soon
Tax Planning (SPT, PTKP, deductibles) πŸ”œ Soon

βœ… What's live now

Cashflow tracking

Upload bank statements from BCA, Superbank, NeoBank, Wise, or Bank Jago β€” CSV, PDF, or screenshot β€” and get a unified transaction history across all accounts.

  • Hybrid parser: CSV files parsed directly (fast, zero AI cost); PDFs and screenshots go through Gemini / Claude for structured extraction; Superbank PDF uses bank-specific LLM prompt
  • IBankSignature registry (Chain of Responsibility) detects the bank from file content and dispatches to the correct parser β€” adding a new bank = adding one class
  • 4-layer auto-categorization: rule-match (106 rules) β†’ category presets β†’ history cache β†’ LLM fallback (Gemini). Cold-start safe β€” preset seed covers new users.
  • Bulk AI categorization in upload preview β€” select uncategorized rows and hit ✦ Suggest for batch Gemini classification
  • 4-step upload wizard β€” drag/drop, file picker, or clipboard paste; PDF password support; inline editing before save
  • Cashflow workspace: Overview, Transactions table (server-paginated, filterable, CSV export), Cash Flow Statement (quarterly/monthly)
  • Three-tier deduplication so nothing gets imported twice

β†’ Engineering details: parser routing, bank detection (IBankSignature chain), validation pipeline, and master schema β€” docs/features/cashflow-ingestion.md

alt text

alt text

alt text

alt text

🏦 Assets management & balance sheet

Track everything you own and owe in one place.

  • Asset registry: property, vehicles, savings accounts, cash, valuables, and other assets with current valuations
  • Liability tracking: loans, mortgages, BNPL, and other debts
  • Live net worth calculation β€” total assets minus total liabilities, updated as you add or edit entries
  • Balance sheet view with categorized breakdown

πŸ“ˆ Investment portfolio

Track your full investment picture across Indonesian market instruments.

  • Stocks (IDX), mutual funds, government bonds (SBN/ORI), crypto, P2P lending
  • Portfolio overview with allocation breakdown and total valuation
  • Return tracking per instrument

πŸ“Š Spending analysis

Understand where your money actually goes.

  • Safe-to-Spend indicator β€” compares income vs committed expenses to show discretionary headroom
  • Variance explainer β€” highlights categories that deviated from the prior period
  • Monthly spending breakdown with category drilldown

πŸ—ΊοΈ Financial Journey

The gamification layer that ties everything together. Progress through the five pyramid levels, earn scores, complete quests.

  • Five tiers: Foundations β†’ Defense β†’ Growth β†’ Freedom β†’ Legacy β€” each with 2–3 scored indicators
  • Living Garden Hero β€” 5 animated plants grow as your scores improve; each plant has 4 growth stages tied to your level progress
  • No-decay rule β€” plants never shrink when scores dip (peak stage persisted in localStorage)
  • Quest cards with actionable next steps per tier, activity streak heatmap
  • The journey page is the home screen β€” it always shows where you are in the pyramid and what to do next

alt text

πŸ€– AI Learning & Evaluation

The platform doubles as the implementation vehicle for a 90-day AI Engineering learning path.

  • Langfuse AI observability β€” cost/day, calls/day, p50/p95 latency, and token counts per LLM call; Gemini and Anthropic provider traces visible in Langfuse dashboard (PF-AI001)
  • 20-fixture extraction eval harness β€” benchmarks Gemini 2.5 Flash vs Claude Sonnet 4.6 on real anonymized bank statement fixtures; row-level F1 + field-level accuracy; results auto-saved to evals/results/YYYYMMDD.json (PF-AI002 β€” Gemini 2.5 Flash 100% row F1 confirmed)
  • RAG pipeline in progress β€” pgvector embeddings + semantic search (POST /embed-transactions + POST /search); re-ranking + /ask endpoint to follow (PF-AI003/AI004)

πŸ–₯️ Platform

  • Dark/light theme with zen-mode UX β€” focus mode toggle, clean minimal interface
  • System health dashboard at /status β€” polls all services every 30 seconds
  • LGTM observability stack β€” OpenTelemetry traces, metrics, and logs across .NET API and Python AI service, surfaced in Grafana

πŸš€ Getting started

Prerequisites: Docker Desktop, Node.js 20+, .NET 10 SDK, Python 3.12+, Supabase CLI

# 1. Configure environment
cp .env.example .env
# Add GEMINI_API_KEY (or ANTHROPIC_API_KEY) and Supabase keys

cp services/ai-service/.env.example services/ai-service/.env
# Add AI_PROVIDER=gemini and GEMINI_API_KEY

# 2. Start everything
npm start
URL What
http://localhost:8080 The app
http://localhost:8080/journey Your pyramid progress
http://localhost:8080/status Service health
http://localhost:54323 Supabase Studio
http://localhost:3000 Grafana

Go to Cashflow β†’ Upload, drop in a BCA CSV or any PDF, review the preview, hit Submit.

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     React 18 Frontend                           β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚ @supabase/js     β”‚    β”‚ REST calls via fetch()             β”‚ β”‚
β”‚  β”‚  - Auth (login)  β”‚    β”‚  - CRUD, upload, dashboard, etc.  β”‚ β”‚
β”‚  β”‚  - Realtime sub  β”‚    β”‚  - Bearer token from Supabase Auth β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
            β”‚ direct                       β”‚ via .NET API
            β–Ό                              β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Supabase Platform   β”‚   β”‚        .NET 10 Web API (C#)          β”‚
β”‚                       β”‚   β”‚  Controllers β†’ MediatR (CQRS)        β”‚
β”‚  Auth (GoTrue/JWT)    β”‚   β”‚  FluentValidation                    β”‚
β”‚  Storage (buckets)  ◄─┼────  Infrastructure:                     β”‚
β”‚  Realtime (WS)        β”‚   β”‚   - supabase-csharp (PostgREST)      β”‚
β”‚  Database Webhooks ───┼─┐ β”‚   - StorageService (Supabase Storage)β”‚
β”‚                       β”‚ β”‚ β”‚   - CSV Parsers (BCA, Wise, Default) β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚ β”‚ β”‚   - Validation Pipeline              β”‚
β”‚  β”‚ PostgreSQL 17   β”‚  β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚  β”‚ + pgvector      β”‚  β”‚ β”‚
β”‚  β”‚ transactions    β”‚  β”‚ β”‚       Webhook POST on INSERT
β”‚  β”‚ category_rules  β”‚  β”‚ β”‚
β”‚  β”‚ statement_      β”‚  β”‚ β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  β”‚   uploads       β”‚  β”‚ └──►  Python AI Service (FastAPI)     β”‚
β”‚  β”‚ embeddings      β”‚  β”‚      β”‚  1. Download from Storage      β”‚
β”‚  β”‚ (RLS enforced)  │◄─┼───────  2. PyMuPDF / Claude Vision    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚      β”‚  3. Claude tool_use extraction  β”‚
β”‚                       β”‚      β”‚  4. Write results via supabase-pyβ”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Coming next: Supabase Auth (PF-S08), RAG Phase 1 embeddings + semantic search (PF-AI003), event-driven webhook pipeline replacing synchronous AI calls (PF-S11), Realtime status updates (PF-S12). Full target architecture: docs/architecture/architecture-diagram.md

Layer Technology
Frontend React 18 Β· Vite Β· TypeScript Β· Tailwind CSS Β· shadcn/ui
Backend API .NET 10 / C# 13 Β· ASP.NET Core Β· CQRS via MediatR Β· Clean Architecture
Persistence Supabase (PostgreSQL 17 + pgvector) via supabase-csharp β€” no ORM
AI Service Python 3.12 Β· FastAPI Β· Gemini 2.5 Flash (primary) Β· Claude Sonnet 4.6 (alternate)
Document parsing PyMuPDF (pre-LLM PDF extraction) Β· LLM vision (images)
Observability OpenTelemetry β†’ Alloy β†’ Prometheus + Loki + Tempo β†’ Grafana
Containers Docker Compose V2
apps/
  frontend/          # React 18 + Vite β€” api/, components/, pages/, types/
  api/               # .NET 10 Clean Architecture β€” Api, Application, Domain, Infrastructure
services/
  ai-service/        # Python FastAPI β€” providers (Gemini, Anthropic), LlmParser, PdfExtractor
supabase/
  migrations/        # SQL migrations
docs/                # Architecture, sprint plan, bank format reference
npm start                                                            # everything
cd apps/frontend && npm run dev                                      # frontend only
cd apps/api && dotnet run --project src/PersonalFinance.Api         # backend only
cd services/ai-service && uvicorn app.main:app --reload --port 8000 # AI service only
npm run e2e                                                          # Playwright E2E
cd apps/api && dotnet test                                           # backend unit tests

About

An automated, multi-bank personal finance tracker using AI extraction and PostgreSQL

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages