Location: /Users/agallentes/git/analyze-fin
Status: Ready to build with Claude Code
Timeline: ~3 weeks (5 phases) to fully functional MVP
Cost: $0 (fully local, zero external dependencies)
Architecture: SQLite + Claude Skills + HTML Reports
A statement-based personal finance tracker for Philippine users who use multiple accounts (BPI, GCash, Maya, Vybe).
Problem: Tracking spending across 2-4 financial accounts is manual and error-prone.
Solution: Upload PDF statements β Automatic parsing β Smart categorization β Unified spending insights.
β Multi-bank PDF parsing - GCash, BPI, Maya statements (95%+ accuracy) β Smart deduplication - Handle overlapping statements, detect internal transfers β Merchant learning - Unknown merchants β You categorize β System remembers β Spending dashboard - HTML reports with interactive Plotly charts β Natural language queries - "How much food last week?" (via Claude Code context) β Local data - SQLite database stays on your computer, never cloud-synced β Export options - Download transactions as CSV/JSON anytime
Privacy: Your financial data never leaves your machine Cost: Zero external services ($0/month vs $20-30/month for cloud) Speed: Local SQLite queries are instant Ownership: Full control over your data Simplicity: No Supabase, no FastAPI, no Streamlit Cloud account needed
| Phase | Timeline | What Gets Built | Status |
|---|---|---|---|
| Phase 0 | Day 0 (2h) | Foundation files (requirements.txt, .gitignore, initialize.sh) | Setup & config |
| Phase 1 | Days 1-3 | Core backend: SQLite database, Pydantic models, CRUD operations | Ready to code |
| Phase 2 | Days 4-7 | Statement parser: PDF extraction for all 4 banks | Ready to code |
| Phase 3 | Days 8-11 | Dedup + categorization: Smart merchant learning + deduplication | Ready to code |
| Phase 4 | Days 12-14 | Report generation: HTML + Markdown reports with Plotly charts | Ready to code |
| Phase 5 | Days 15-17 | MVP Complete: 6 Claude Skills for end-to-end workflows | Ready to code |
π― MVP Ready After Phase 5 (~3 weeks)
Instead of clicking a web UI, you interact with the app via Claude Code skills:
You: "Parse my GCash statement from January"
Claude Code: Prompts for file path β Parses PDF β Auto-categorizes β Checks duplicates
Result: "β
Imported 28 transactions, categorized 24 (86%), no duplicates"
The parse workflow now automatically:
- Parses - Extracts transactions from PDF
- Saves - Stores to SQLite database
- Categorizes - Auto-categorizes using merchant database
- Checks duplicates - Warns about potential duplicates (non-destructive)
Power users can skip steps with --no-auto-categorize or --no-check-duplicates.
You: "Generate my January spending report"
Claude Code: Queries SQLite β Creates HTML + Markdown
Result: "β
Report saved to data/reports/2025-01-report.html"
You: "How much did I spend on food last week?"
Claude Code: Loads SQLite data into context β Uses reasoning
Result: "β±1,250 across 12 transactions"
You: "Export all transactions to CSV"
Claude Code: Queries SQLite β Writes to CSV
Result: "β
Exported 156 transactions"
# Manual categorization review
analyze-fin categorize
# Manual duplicate review
analyze-fin deduplicateanalyze-fin/
βββ data/ # All local data
β βββ analyze-fin.db # SQLite database (created on init)
β βββ merchant_mapping.json # Local merchant mappings
β βββ sample_statements/ # Test PDFs (you provide)
β βββ reports/ # Generated HTML/MD reports
β βββ exports/ # CSV/JSON exports
β
βββ backend/ # Python core logic
β βββ models.py # Pydantic models
β βββ database.py # SQLite operations
β βββ statement_parser.py # PDF parsing (Phase 2)
β βββ deduplicator.py # Dedup logic (Phase 3)
β βββ categorizer.py # Merchant categorization (Phase 3)
β βββ report_generator.py # HTML/MD generation (Phase 4)
β
βββ scripts/ # Scripts called by skills
β βββ parse_statement.py
β βββ categorize.py
β βββ generate_report.py
β βββ query_spending.py
β βββ export.py
β βββ deduplicate.py
β
βββ skills/ # Claude Skills (primary interface)
β βββ parse-statements/ # Unified: parse + categorize + dedup
β βββ generate-report/
β βββ query-spending/
β βββ export-data/
β
βββ templates/ # HTML/Markdown templates
β βββ spending_report.html # Jinja2 template for reports
β βββ markdown_report.md.j2
β
βββ tests/ # Unit tests
βββ requirements.txt # Python dependencies (minimal, local-only)
βββ .gitignore # Git ignores
βββ initialize.sh # Setup script
cd /Users/agallentes/git/analyze-fin
bash initialize.sh
source venv/bin/activateThis:
- Creates Python virtual environment
- Installs minimal dependencies (pdfplumber, pandas, plotly, jinja2, sqlite3)
- Sets up directory structure
- Initializes git repo
- Creates empty SQLite database
Place 1-3 sample PDF statements in data/sample_statements/:
- GCash statement (password: SURNAME + last 4 phone digits)
- BPI statement (optional)
- Maya statement (optional)
Read DEVELOPMENT_GUIDE.md, Phase 1:
- Copy Claude Code prompt
- Ask Claude Code to implement
- Review generated code
- Commit to git
| Component | Technology | Why |
|---|---|---|
| PDF Parsing | pdfplumber | Best for Philippine bank formats |
| Database | SQLite | Local file-based, no server needed |
| Data Models | Pydantic | Type safety + validation |
| Reports | Jinja2 + Plotly | Interactive HTML charts |
| Testing | pytest | Standard Python testing |
| Interface | Claude Skills | Native to Claude Code workflow |
β Supabase - Replaced with local SQLite β FastAPI - No REST API needed (data stays local) β Streamlit - Replaced with HTML reports + Claude Skills β Anthropic Claude API - Using Claude Code's built-in reasoning instead β Railway deployment - No deployment needed (fully local) β Multi-user support - Single-user local app (easier, faster)
Result: Simpler, faster, cheaper, more private.
After Phase 5, you'll have:
β Parse GCash/BPI/Maya statements with >95% accuracy β Store 500+ transactions in local SQLite β Auto-categorize merchants with 90%+ accuracy β Deduplicate across multiple statement imports (zero false positives) β Generate interactive HTML reports with spending charts β Answer natural language questions via Claude Code context β Export transactions as CSV for Excel analysis
Start here:
- QUICKSTART.md - 5-min overview + immediate next steps
- PROJECT_PLAN.md - Complete technical specification (5 phases)
- DEVELOPMENT_GUIDE.md - Step-by-step Claude Code prompts per phase
Reference: 4. This README - Architecture overview
All in requirements.txt:
- pdfplumber - PDF table extraction
- pandas - Data manipulation
- numpy - Numerical computing
- plotly - Interactive charts
- jinja2 - HTML template rendering
- pydantic - Data validation
- pytest - Testing
- python-dotenv - Config management
That's it. No cloud SDKs, no API clients, no heavy frameworks.
Install with: pip install -r requirements.txt
# After Phase 0 foundation:
git add .
git commit -m "Phase 0: Foundation files"
# After each phase:
git commit -m "Phase X: [Description]"
# By end of Phase 5:
git log --oneline # Should show 5-6 commitsFor each task:
- Read prompt in DEVELOPMENT_GUIDE.md
- Ask Claude Code the exact prompt
- Review code (usually 90%+ correct)
- Test locally with sample data
- Commit to git
- Move to next task
Most tasks take 1-2 hours this way.
| Service | Cost | Notes |
|---|---|---|
| TOTAL | $0 | Everything local, zero external services |
No Supabase, no Claude API calls, no Railway, no Streamlit Cloud.
| Aspect | Old Plan | New Plan |
|---|---|---|
| Cost | $20-30/month | $0 |
| Timeline | 5-6 weeks | ~3 weeks |
| Complexity | High (cloud + web) | Low (local only) |
| Privacy | Data in Supabase | Data on your machine |
| Interface | Web UI (browser) | Claude Skills (CLI) |
| Users | Multi-user | Single user |
| Deployment | Railway + Streamlit Cloud | None (local) |
# Step 1: Initialize
cd /Users/agallentes/git/analyze-fin
bash initialize.sh
source venv/bin/activate
# Step 2: Gather sample statements
# Place 1-3 PDFs in data/sample_statements/
# Step 3: Read quick start
cat QUICKSTART.md
# Step 4: Start Phase 1
# Open DEVELOPMENT_GUIDE.md, Phase 1
# Copy Claude Code prompt
# Ask Claude Code to executeYou'll have your first working statement parser in 1-2 days.
- How do I...? β See QUICKSTART.md
- Technical details β See PROJECT_PLAN.md
- Step-by-step prompts β See DEVELOPMENT_GUIDE.md
- Stuck? β Ask Claude Code, it's your development partner
Status: All documentation aligned with approved plan. Ready to build: Start Phase 0 (initialize.sh). Expected MVP: ~3 weeks from now.
Let's go. π