SplitWise is a full-stack application designed to simplify the process of tracking and splitting expenses with friends and groups. This project features a modern Android application built with Jetpack Compose and a robust backend infrastructure.
The backend is a custom-built API developed using TypeScript and NestJS, deployed in the cloud to provide a seamless, real-time experience for users.
Note: This repository contains the Android client code. The backend source code is maintained in a separate repository.
| Onboarding | Login | Signup |
|---|---|---|
![]() |
![]() |
![]() |
| Dashboard | Activity Feed | Friends List |
|---|---|---|
![]() |
![]() |
![]() |
| Settle Bill | Send Reminder | User Profile |
|---|---|---|
![]() |
![]() |
![]() |
| Step 1: Details | Step 2: Participants | Step 4: Payer |
|---|---|---|
![]() |
![]() |
![]() |
| Step 5: Split Method | Step 6: Adjustments | Step 7: Review |
|---|---|---|
![]() |
![]() |
![]() |
- Adaptive UI Support: Fully responsive across all Window Size Classes, ensuring a seamless experience on phones, foldables, and tablets. Optimized for both Portrait and Landscape orientations to provide an ergonomic user experience across diverse device configurations.
- Multi-step Bill Creation: A guided 7-step process to add bills, select participants, define payers, and choose split methods.
- Flexible Splitting: Support for various split methods including:
- Equal: Automatically divides the total amount among all participants.
- Percentage: Define custom percentages for each individual.
- Exact Amount: Specify precise amounts for each participant.
- Group & Friend Management: Organize expenses by specific groups or individual friends.
- Dashboard & Activity: Track your total balance (owed vs. owing) and view a real-time activity feed of all transactions.
- Secure Authentication: Robust login and signup flows with encrypted token storage.
- Profile Management: Update personal information and manage account settings.
- Firebase Integration: Push notifications via Firebase Cloud Messaging (FCM) for bill reminders and activity updates.
- Privacy Controls: Secure password changes and account deletion options.
- Code Protection: Integrated R8/ProGuard rules for code obfuscation and shrinking.
- UI: Jetpack Compose - Modern, declarative UI toolkit.
- Architecture: MVVM (Model-View-ViewModel) with Clean Architecture principles.
- Dependency Injection: Hilt - Standard library for DI in Android.
- Networking: Retrofit & OkHttp for REST API communication.
- Reactive Programming: Kotlin Coroutines and Flow for asynchronous data handling.
- Pagination: Paging 3 for efficient loading of large activity feeds and bill lists.
- Local Storage: DataStore & EncryptedSharedPreferences for secure data persistence.
- Security & Optimization: R8/ProGuard for code shrinking, obfuscation, and optimization.
- Backend Services: Firebase Analytics, Crashlytics, and Cloud Messaging.
- Framework: NestJS (Node.js framework)
- Language: TypeScript
- Deployment: Cloud-hosted API
- Repository: Private/Separate repository
The project follows a feature-based package structure for high maintainability:
com.omodauda.splitwise
├── data
│ ├── local # DataStore, Preferences, Encrypted Storage
│ ├── network # API Interfaces, DTOs, Interceptors, Paging Sources
│ └── repository # Single source of truth for data logic
├── di # Hilt Modules (Network, Storage, etc.)
├── model # Domain models and UI state classes
├── services # Firebase Messaging Service
└── ui
├── components # Reusable UI widgets (Buttons, Toasts, Loaders)
├── features # Feature-specific screens and ViewModels
│ ├── auth # Login, Signup, Forgot Password
│ └── main # Dashboard, Add Bill, Groups, Friends, Activity
└── theme # Material3 Design System (Color, Typography, Shape)
- Android Studio Ladybug or newer.
- JDK 11+.
- A
local.propertiesfile containing yourBASE_URL. - A
google-services.jsonfile in theapp/directory (required for Firebase features).
- Clone the repository.
- Add your
BASE_URLto thelocal.propertiesfile. - Place your
google-services.jsonin theapp/folder. - Sync the project with Gradle files.
- Run the app on an emulator or physical device.
- Offline support with Room database.
- Unit and UI testing suite.
- Group management (creation, editing, member management).
- Group-specific expense tracking and settlements.
- Image upload support for receipts.
- Dynamic deep linking for group invites.
Developed as a showcase of modern Android development practices.














