Offline-first personal finance tracker built for quick daily use. pocketFlow keeps your wallets, transactions, and receipt images on-device with fast analytics so you always know where your money is going.
- Track multiple wallets with individual balances
- Support for different currencies per wallet
- Default currency: MWK (Malawian Kwacha), fully configurable
- Real-time balance calculations across all wallets
- Log income, expenses, and internal transfers
- Attach receipt photos to transactions
- Comprehensive categorization system
- Quick filters and search functionality
- Paginated transaction history
- Monthly income vs expense summaries
- Category-based spending breakdown
- Spending trends and patterns
- Total available cash across wallets
- Visual charts and reports
- Capture receipts with camera
- Select from photo library
- Automatic image compression (max 1000px, 60% quality)
- Organized file storage by date
- Set monthly budgets by category
- Track savings goals with progress visualization
- Real-time budget status and alerts
- Goal completion tracking
- 100% offline - all data stored locally
- Optional biometric authentication
- No cloud sync, no data collection
- SQLite database with secure file storage
- Light and dark theme support
- Smooth animations with Reanimated v4
- File-based routing with Expo Router
- Intuitive navigation and gestures
Get the latest builds from the GitHub Releases page.
Available formats:
- Android: APK for direct installation
- iOS: Build from source (requires Xcode)
# Install dependencies
npm install
# Start development server
npx expo start# iOS
npx expo start --ios
# Android
npx expo start --android
# Web preview
npx expo start --web
# Clear cache if needed
npx expo start -c# Copy release builds (Windows PowerShell)
npm run release:copy
# Type checking
npx tsc --noEmit- Framework: React Native with Expo (SDK 54)
- Navigation: Expo Router (file-based routing)
- Language: TypeScript (strict mode)
- Database: expo-sqlite with async API (
openDatabaseAsync) - State Management: Zustand with AsyncStorage persistence
- Animations: React Native Reanimated v4
- Styling: Inline styles with theme system
- File Storage: Expo FileSystem for receipts and backups
pocketFlow/
├── app/ # Expo Router screens (file-based routing)
│ ├── _layout.tsx # Root layout with DB initialization
│ ├── (tabs)/ # Tab navigation (home, wallets, analytics, settings)
│ ├── wallets/ # Wallet management screens
│ ├── transactions/ # Transaction screens
│ ├── categories/ # Category management
│ ├── budgets/ # Budget management
│ ├── goals/ # Savings goals
│ └── receipt/ # Receipt scanning
├── src/
│ ├── components/ # Reusable UI components
│ ├── constants/ # App constants (categories, currencies)
│ ├── lib/
│ │ ├── db/ # SQLite database layer
│ │ ├── hooks/ # React hooks
│ │ └── services/ # Business services (file, OCR, biometric)
│ ├── store/ # Zustand state stores
│ ├── theme/ # Theme & color definitions
│ ├── types/ # TypeScript type definitions
│ └── utils/ # Utility functions
└── assets/ # Static assets (icons, images)
- Receipts:
DocumentDirectory/receipts/YYYY-MM-DD/{filename}.jpg - Backups:
DocumentDirectory/backups/pocketFlow_backup_{timestamp}.json
All files are stored locally on your device.
The app requires the following permissions:
- Camera - Capture receipt photos
- Media Library - Select existing photos
- File System - Store receipts and backups locally
- Local Authentication - Optional biometric lock
- PROJECT_SUMMARY.md - Complete feature overview
- STRUCTURE.md - Detailed file structure
- GOALS_BUDGETS_SPEC.md - Budgets & goals specification
Food • Transport • Rent • Groceries • Utilities • Shopping • Healthcare • Entertainment • Education • Bills • Transfer • Other
Salary • Freelance • Business • Investment • Gift • Offering • Transfer • Other Income
- Offline-first: All data lives on-device, no network required
- SQLite with Write Queue: Serialized writes prevent database lock errors
- Type Safety: Strict TypeScript mode with no
anytypes - Parameterized Queries: All database operations use prepared statements
- Image Compression: Automatic compression reduces storage footprint
- Theme System: Dynamic color palette supporting light/dark modes
- Transfers are excluded from income/expense analytics (they're internal movements)
- All database write operations use a write queue to prevent SQLITE_BUSY errors
- Receipt images are compressed before storage to save space
- The app works completely offline with no external dependencies
This is a personal project, but suggestions and bug reports are welcome via GitHub Issues.
MIT License - Feel free to use this project as you see fit.
Built with ❤️ using React Native and Expo
