An iOS expense tracker that scans fiscal receipts, verifies them via FNS, automatically categorizes purchases and visualizes spending
Swift SwiftUI AVFoundation Python FastAPI SQLite DistilBERT Xcode XCTest
- Manual income and expense tracking
- QR scanning for fiscal receipts
- Receipt verification through the FNS API
- Automatic product normalization and categorization
- Filters and sorting by date, amount and category
- Spending charts by category and period
- Local storage with backend synchronization
- User authentication and profile editing
- Create an account or sign in
- Add an income or expense manually
- Scan a fiscal receipt QR code with the camera
- Review and edit the recognized receipt items
- Filter transactions and explore spending charts
- Open the profile screen to update account details
During this project I practiced building a full-stack iOS application that connects receipt scanning, financial data and a Python backend
-
π± SwiftUI application:
- Architecture: Separated views, view models, services and data models
- State management: Kept transaction lists, filters and profile data in sync across screens
-
π§Ύ Receipt processing:
- QR scanning: Built a camera scanner with
AVFoundation - FNS integration: Sent fiscal receipt data to the backend and handled verification responses
- QR scanning: Built a camera scanner with
-
π§ Automatic categorization:
- Normalization: Cleaned receipt item names before classification
- Categories: Mapped recognized products to expense categories and subcategories
-
π Expense analytics:
- Filtering: Added sorting and category filters for transaction history
- Charts: Visualized income and expenses by category and period
-
π Client-server communication:
- FastAPI: Built authentication, receipt and transaction endpoints
- Synchronization: Connected local JSON storage with the backend API
- Open the
backenddirectory - Copy
.env.exampleto.envand add your FNS credentials - Run
./start.sh - The API will be available at
http://localhost:8000
- Open
ExpenseTracker.xcodeprojin Xcode - Wait for Swift packages to resolve
- Start the backend
- Select a simulator or device and press Run (
βR)
ExpenseTracker/
βββ ExpenseTracker/
β βββ Core/ # App shell, models, auth and profile
β βββ Components/ # Reusable SwiftUI components
β βββ ReceiptScanner/ # QR scanning and receipt confirmation
β βββ Services/ # Network, FNS and API services
β βββ ViewModels/ # Transaction list and form logic
β βββ Views/ # Expenses, filters and charts
β βββ Assets.xcassets/
βββ backend/
β βββ api/ # FNS client
β βββ models/ # Category mappings and model config
β βββ services/ # QR processing and categorization
β βββ database.py # SQLite data layer
β βββ main.py # FastAPI application
βββ ExpenseTrackerTests/
βββ ExpenseTrackerUITests/
βββ ExpenseTracker.xcodeproj/