A native macOS financial management application for importing, analyzing, and tracking bank statements and credit card transactions with deterministic ingestion and deduplication.
- Multi-Bank Statement Import — CSV/TXT support for Indian banks (HDFC, ICICI, Amex)
- Intelligent Deduplication — Deterministic duplicate detection and merging across imports
- Transaction Ledger — Unified ledger view with accounts, tags, and filtering
- Dashboard Analytics — Net worth tracking, spending insights, and wealth intelligence
- Design System — Finance Design System (FDS) with consistent UI components and spacing
- Parser Extensibility — Bank-specific parsing rules with auto-format detection
- macOS 26+ (required for Swift 6.1 compatibility)
- Xcode 26+ (required for Swift 6.1 toolchain)
- Swift 6.1+ (some packages require this version)
- Clone the repository:
git clone https://github.com/ipratikk/FinanceOS.git
cd FinanceOS- Run bootstrap (installs tools, seeds directories, sets up hooks):
bash bootstrap.sh- Open in Xcode:
open FinanceOS.xcworkspaceBuild using Claude Code skills or Make:
/build # SwiftUI app build
make parser-build # Parser packages only
make parser-test # Run parser tests
make parser-parse FILE=<path> # Parse a single fileOr use Xcode directly:
xcodebuild -scheme FinanceOSMac -configuration DebugFinanceOS/
├── Apps/
│ └── FinanceOSMac/ # Native macOS app
├── Packages/
│ ├── FinanceCore/ # Models, repositories, persistence (GRDB)
│ ├── FinanceParsers/ # Bank statement parsers
│ ├── FinanceUI/ # SwiftUI components & design system
│ └── FinanceTesting/ # Shared test helpers & fixtures
├── Scripts/
│ ├── fixtures/ # Golden JSON for parser validation
│ └── validate/ # pre-PR CI validation
├── docs/ # Project documentation
├── CLAUDE.md # Claude Code instructions
└── CODING_STANDARDS.md # Code style & linting rules
View Layer → ViewModel → Repository Protocol → GRDB Repository → SQLite
Key principles:
- Views never access database directly
- ViewModels don't contain SQL
- Repositories encapsulate persistence
- Parser layer isolated from UI/persistence
- Architectural Consistency — Extend existing patterns, avoid new abstractions
- Deterministic Correctness — Parser ingestion must be reproducible
- Low-Context Edits — Incremental changes with clear scope
- Maintainability — Explicit code over clever, long-term scalability
- Code Quality — Max 120 char lines, 50-line functions, verified by SwiftLint
See CODING_STANDARDS.md for detailed rules:
- Line length: 120 characters max
- Functions: 50 lines max
- Types: 250 lines max
- Files: 400 lines max
- Linting: All Swift files checked via
swiftlint lint
- Run SwiftLint:
swiftlint lint - Run tests:
swift test --parallel - Build app:
/build
Use /create-pr skill (runs full CI pipeline):
/create-pr # Full validation
/create-pr --skipValidation # Skip if already validatedUses conventional commit format:
feat(scope): descriptionfix(scope): descriptionrefactor(scope): descriptionchore(scope): description
- All PRs require review before merge
- CI must pass (SwiftLint, tests, build)
- Architecture decisions reviewed for coupling/impact
GitHub Actions workflow (swift.yml):
- Runner: macOS 26 (includes Swift 6.1+ pre-installed)
- Change Detection: Intelligent package dependency tracking
- Single package change → test affected packages + dependents
- Non-package change → test all packages for safety
- Caching: Multi-layer strategy (SPM, build artifacts, DerivedData, ModuleCache)
- Validation Gate: All jobs must pass before PR can merge
Performance:
- ~50% faster CI on single-package PRs (cached dependencies)
- Parallel package testing (4 tests in matrix)
- Shared dependency resolution across all jobs
Run tests for individual packages:
cd Packages/FinanceCore && swift test --parallel
cd Packages/FinanceParsers && swift test --parallel
cd Packages/FinanceUI && swift test --parallelParser validation:
make parser-test # Run all parser tests
make parser-parse FILE=path/to/statement.csv # Parse single file
/parser-test # Claude Code skill- CLAUDE.md — Claude Code workflow and context
- CODING_STANDARDS.md — Code style rules
- CONTRIBUTING.md — Contribution guide
- docs/ — Project documentation
- CSV/TXT parser hardening (additional Indian banks)
- Statement format auto-detection
- Bank-specific parsing rules
- Duplicate detection at scale
- Analytics and spending insights
Not implemented:
- Sync across devices
- ML-based categorization
- Cloud infrastructure
- AI chat features
MIT License — See LICENSE file for details
This project adheres to the Contributor Covenant Code of Conduct.
For security vulnerabilities, see SECURITY.md for responsible disclosure.
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Pratik Goel — Senior Software Engineer focused on architecture, deterministic systems, and long-term maintainability.
Status: Active development
Last Updated: 2026-05-22