In Development

Personal Finance Tracker

Personal asset management and investment portfolio tracking

personal-finance-tracker
personal-finance-tracker

The Problem

🏦

Scattered Accounts

Financial data was spread across 7 different Korean banks and card companies, each with its own portal, file format (XLSX, HTML-disguised XLS, legacy OLE), and export process. Getting a complete picture required logging into every service individually.

📊

No Unified View

Without a single dashboard combining all accounts, it was impossible to see total spending, identify cross-card patterns, or understand the full financial picture. Each bank's own analytics only showed its own transactions.

✍️

Manual Tracking

Categorizing expenses required manual effort — reviewing each transaction and assigning it to a spending category. Without automation, most people gave up on detailed tracking within weeks of starting.

Before

Logging into 7 different bank portals to check spending

After

Single unified dashboard with all bank/card transactions aggregated

Before

Manual transaction categorization that nobody maintained

After

Keyword-based auto-classification of merchants into spending categories

Before

Incompatible file formats across different card companies

After

7 parsers handling 3 file format families with auto-detection by filename

Approach

Universal Parser + Auto-Classification

The core challenge is that Korean banks export data in wildly different formats — standard XLSX, HTML files disguised as .xls, and legacy OLE compound documents. The platform handles this with a bank-specific parser registry that auto-detects the card company from the filename pattern and routes the file to the correct parser. Once parsed into a normalized schema, a keyword-based classification engine maps merchant names to spending categories using configurable rule sets. All data lands in a local SQLite database (Drizzle ORM), keeping sensitive financial data on-device with no cloud dependency. The Next.js frontend renders interactive dashboards with monthly and card-wise spending breakdowns.

Define
Execute
Collect
Report

BDD Pipeline Flow

Key Features

account-aggregation
account-aggregation

Account Aggregation

Import credit card statements from 7 Korean banks with automatic format detection. Supports XLSX, HTML-disguised XLS, and legacy OLE formats. Auto-detects card company from filename and routes to the correct parser for seamless data ingestion.

card-management
card-management

Card Management

Register and manage credit/debit cards from 7 Korean banks. Track monthly usage per card, set spending targets, and monitor annual fees. Each transaction is automatically linked to its source card.

expense-analytics
expense-analytics

Expense Analytics

Keyword-based auto-classification maps merchants to spending categories. Dashboard shows monthly spending trends, category breakdowns, card-wise distribution, and necessity analysis with drill-down capability.

fixed-expenses-&-loans
fixed-expenses-&-loans

Fixed Expenses & Loans

Track recurring expenses (savings, insurance, utilities, education) with monthly equivalent calculations. Monitor loan status, repayment schedules, and link repayments to actual transactions for complete financial visibility.

Architecture

SPAORM QuerySQLImportXLSX / XLS / OLE
Browser
Next.js 15
Drizzle ORM
SQLite
Bank Parser Registry
Bank Statement Files
Client
Server
Database
Service
External

Results

7
Bank Parsers

Korean bank statement parsers with auto-detection

3
File Format Families

XLSX, HTML-disguised XLS, and legacy OLE support

Auto
Classification

Keyword-based merchant to category mapping

Local
Privacy-First

All financial data stays on-device in SQLite