A powerful, local-first financial management app for iOS that consolidates all your accounts—bank accounts, crypto wallets, cash—into a single unified dashboard with intelligent analytics.
Managing money across multiple institutions is a fragmented experience. CatLedger solves this by giving you a complete wealth overview at a glance, all stored locally on your device with zero cloud dependencies.
- Multi-Institution Support: Centralize accounts from different banks, crypto platforms, and cash wallets
- Account Hierarchy: Organize multiple accounts per institution (e.g., checking, savings, investment accounts)
- Flexible Transactions:
- Record external transactions (purchases, income, transfers from external sources)
- Log internal transfers between your own accounts
- Granular Analytics Dashboard:
- Overall wealth distribution across all accounts
- Breakdown by institution
- Analysis by account type (checking, crypto, cash, etc.)
- Expense categorization and insights
- Offline-First Architecture: All data persists locally using SwiftData—no internet required
- Historical trend analysis and spending patterns
- Budget forecasting
- Recurring transaction templates
- Multi-user support with optional cloud sync
- Advanced reports and export functionality
CatLedger is built with Clean Architecture principles using a feature-driven folder structure. This ensures scalability, testability, and maintainability.
Each feature (Institution, Account, Transaction, etc.) follows this structure:
Features/
├── FeatureName/
│ ├── Data/ # Repository implementation, models
│ ├── Core/
│ │ ├── Protocols/ # Repository & domain protocols
│ │ ├── Errors/ # Feature-specific errors
│ │ └── UseCases/ # Business logic
│ └── Presentation/ # SwiftUI views & ViewModels
- Separation of Concerns: UI, business logic, and data access are cleanly separated
- Testability: Dependencies are injected; business logic is decoupled from frameworks
- Scalability: New features can be added with minimal impact on existing code
- Offline-First: SwiftData handles persistent storage without external dependencies
- UI Framework: SwiftUI
- Local Storage: SwiftData
- Language: Swift 5.9+
- Minimum iOS: iOS 17+
- Architecture: Clean Architecture + MVVM pattern
- Xcode 15+
- iOS 17+
- Swift 5.9+
-
Clone the repository:
git clone https://github.com/Fenriz1349/CatLedger.git cd CatLedger -
Open the project:
open CatLedger.xcodeproj
-
Select a simulator or connected device and press
Cmd + Rto build and run
CatLedger/
├── App/ # Entry point & navigation
├── AppTheme/ # Design system & styling
├── Features/
│ ├── Institution/ # Bank, crypto platform management
│ │ ├── Data/
│ │ ├── Core/
│ │ └── Presentation/
│ ├── Account/ # Account management per institution
│ │ ├── Data/
│ │ ├── Core/
│ │ └── Presentation/
│ ├── Transaction/ # Transaction recording & history
│ │ ├── Data/
│ │ ├── Core/
│ │ └── Presentation/
│ └── Dashboard/ # Analytics & wealth overview
│ ├── Core/
│ └── Presentation/
└── CatLedgerApp.swift # Main app entry point
Navigate to the Institutions screen and tap "+" to add a new bank, crypto platform, or wallet. Configure the institution name and type.
Within an institution, create multiple accounts (e.g., Checking, Savings, Investment). Each account is tracked independently.
From the Transactions screen, record either:
- External Transaction: Money from outside sources or external transfers
- Internal Transfer: Move funds between your own accounts
The Dashboard aggregates all your data:
- See total wealth across all institutions
- Filter by institution or account type
- Analyze spending by category
CatLedger is built with TDD principles. Business logic in the Core/UseCases layer is developed alongside unit tests, ensuring reliability and maintainability from the start. This approach makes refactoring safe and catches regressions early.
All data is stored locally using SwiftData. Models are defined in each feature's Data/ layer and automatically persisted to the device.
CatLedger intentionally avoids third-party frameworks for core functionality. This keeps the app lean, fast, and fully offline-capable.
This is a learning project built during iOS development training. Contributions, suggestions, and feedback are welcome!
MIT License - feel free to use this project as reference for your own work.
For questions or feedback, reach out via GitHub: @Fenriz1349
Status: Pre-MVP, actively in development
Last Updated: November 2025