← Back to Home

ExpenseMate

SwiftSwiftUIPythonGemini APIOpenAI APIImage ProcessingOCRFastAPIGoogle Cloud RunGoogle Cloud SQLFirebase AuthenticationFirebase Cloud MessagingDockerRESTful APIsPush NotificationsReceipt ScanningReal-time Data SyncCloud InfrastructureCI/CDTypeScriptNext.jsTailwind CSS

ExpenseMate is a comprehensive bill-splitting application designed to simplify the way people share and track expenses. The idea behind this app comes from personal experience with the complexities of group expenses. It aims to make financial management in groups straightforward and efficient.

The app's standout feature is its intelligent receipt scanning capability, which automatically extracts expense details and categorizes them. This, combined with real-time expense tracking and group management, makes ExpenseMate a great tool for anyone who frequently shares expenses with others.

I built ExpenseMate with as a native iOS app using Swift and SwiftUI, focusing on creating a clean and intuitive interface. For the backend, we use FastAPI hosted on Google Cloud Run for scalability and reliability, with data stored securely in Google Cloud SQL. Firebase handles our authentication while push notifications are managed through our own Cloud Run service that communicates with Apple's APNs.

Currently available on iOS, with Android support planned for the near future, ExpenseMate represents my commitment to creating practical, user-friendly solutions to everyday problems.

System Architecture

Project content

ExpenseMate follows a modern service-oriented architecture with five main components:

  1. iOS App: Built with Swift and SwiftUI. It serves as the primary user interface, handling receipt scans, expense tracking, and group management. It communicates with Firebase for authentication, the Backend API for data operations, and receives push notifications via APNs.

  2. Backend API: Developed with FastAPI and deployed on Google Cloud Run. It manages all business logic, receipt processing, data validation, and API requests from the iOS app. It validates Firebase tokens, sends push notifications via APNs, and interacts securely with the database.

  3. Database: A PostgreSQL instance hosted on Google Cloud SQL. It stores all core application data including users, groups, expenses, receipts, and device tokens. It is only accessed by the Backend.

  4. Firebase: Used for authentication and cloud messaging. It issues tokens to the iOS app, which the Backend validates. It also manages sessions and push notification tokens.

  5. Marketing Website: A standalone Next.js application hosted on Vercel. It serves marketing content, links to the App Store, and hosts documentation. It has no direct interaction with the other systems.

Key Features

Smart Bill Splitting: Automatically calculate each person's share based on custom rules and percentages.

Receipt Scanning: Snap a photo and let ExpenseMate extract items and calculate splits automatically.

Group Management: Create and organize multiple groups for different events or living situations.

Expense Tracking: Monitor all expenses and settlements with a clear transaction history.

Real-time Updates: Receive instant notifications when expenses are added or bills are settled.

Debt Settlement: Streamline repayments with automated calculations and payment tracking.

Future Roadmap

Android App: Full-featured Android version launching August 2025 with parity to iOS.

Web Dashboard: Browser-based access for managing expenses, live by September 2025.

PDF/CSV Export: Generate downloadable reports for documentation and sharing (Q4 2025).

Offline Mode: Access and manage data without internet, ideal for travel (Q4 2025).

Multi-language Support: Support for German, French, Spanish, and Portuguese by end of 2025.

Personal Space: Track personal expenses separately with Excel import (Q1 2026).

Work Space: Manage business expenses with reporting and personal/business toggles (Q3 2026).