A modern, feature-rich financial management application built with Kotlin and Jetpack Compose
Expense Manager is a powerful, intuitive financial management application designed to help users track expenses, manage budgets, and gain insights into their spending habits. Built entirely with modern Android development practices, the app provides a seamless user experience with beautiful Material Design 3 UI.
- 100% Kotlin codebase with modern best practices
- MVVM Architecture for clean, maintainable code
- Jetpack Compose for declarative UI development
- Offline-First design with local database storage
- Material Design 3 following latest design guidelines
- Add, edit, and delete expenses with ease
- Categorize expenses (Food, Transport, Entertainment, Bills, Shopping, etc.)
- Attach notes and descriptions to transactions
- Support for multiple currencies
- Date and time tracking for each expense
- Recurring expense management
- Set monthly/weekly budgets for different categories
- Real-time budget tracking with visual progress indicators
- Budget alerts and notifications
- Spending limit warnings
- Historical budget performance tracking
- Interactive charts and graphs using modern chart libraries
- Expense trends and spending patterns analysis
- Category-wise spending breakdown
- Monthly and yearly financial reports
- Time-based spending comparisons
- Export data to CSV format
- Beautiful Material Design 3 UI with dynamic theming
- Dark mode support with seamless switching
- Smooth animations and transitions using Compose
- Intuitive gesture-based navigation
- Customizable color themes
- Responsive layouts for different screen sizes
- Local data storage with Room Database (no cloud dependency)
- Data encryption for sensitive information
- Backup and restore functionality
- No ads, no third-party trackers
- Complete offline functionality
- Language: Kotlin 1.9+
- UI Framework: Jetpack Compose
- Architecture: MVVM (Model-View-ViewModel)
- Minimum SDK: 24 (Android 7.0)
- Target SDK: 34 (Android 14)
- Room Database - Local data persistence with SQLite
- ViewModel - UI state management and lifecycle awareness
- LiveData/Flow - Reactive data streams for UI updates
- Navigation Component - Type-safe navigation with Compose
- DataStore - Modern preferences storage (replaces SharedPreferences)
- WorkManager - Scheduled background tasks for reminders
- Kotlin Coroutines - Structured concurrency for async operations
- Flow - Reactive streams for data observation
- StateFlow - State management in ViewModels
- Material Design 3 - Latest Material components for Compose
- Accompanist - Compose utilities for system UI and more
- MPAndroidChart / Vico - Beautiful charts and data visualization
- Coil - Image loading and caching
- Hilt/Dagger - Compile-time dependency injection
- JUnit 4/5 - Unit testing framework
- Espresso - UI testing for Android
- Mockito/MockK - Mocking framework for unit tests
- Truth - Fluent assertions library
- Turbine - Testing Kotlin Flow
The app follows Clean Architecture principles with MVVM pattern:
app/
├── data/
│ ├── local/
│ │ ├── dao/ # Room DAOs
│ │ ├── entities/ # Database entities
│ │ └── database/ # Database instance
│ ├── repository/ # Repository implementations
│ └── models/ # Data models
│
├── domain/
│ ├── usecases/ # Business logic
│ ├── repository/ # Repository interfaces
│ └── models/ # Domain models
│
├── presentation/
│ ├── ui/
│ │ ├── screens/ # Composable screens
│ │ ├── components/ # Reusable UI components
│ │ └── theme/ # Material theming
│ ├── viewmodel/ # ViewModels
│ └── navigation/ # Navigation graphs
│
├── di/ # Dependency injection modules
└── util/ # Utility classes and extensions
- Separation of Concerns - Each layer has a specific responsibility
- Testability - Easy to unit test business logic independently
- Maintainability - Clear structure makes code easy to understand
- Scalability - Simple to add new features without breaking existing code
- Reusability - Components can be reused across the app
UI Layer (Composables)
↓
ViewModel (State Management)
↓
UseCase (Business Logic)
↓
Repository (Data Source Abstraction)
↓
Local Database (Room)
- Android Studio Hedgehog (2023.1.1) or newer
- JDK 11 or higher
- Android SDK with minimum API level 24
- Kotlin 1.9.0 or higher
- Gradle 8.0+
- Clone the repository
git clone https://github.com/Chinmay-tayade/Expense-Manager.git
cd Expense-Manager-
Open in Android Studio
- Launch Android Studio
- Select "Open an existing project"
- Navigate to the cloned repository folder
-
Sync Gradle
- Let Gradle sync and download all dependencies
- This may take a few minutes on first run
-
Build the project
./gradlew build- Run the app
- Connect an Android device via USB (with USB debugging enabled)
- Or start an Android emulator
- Click Run > Run 'app' or press Shift + F10
./gradlew assembleDebug./gradlew assembleReleaseThe APK will be generated in app/build/outputs/apk/
./gradlew test./gradlew connectedAndroidTest./gradlew jacocoTestReportCoverage reports will be available in app/build/reports/jacoco/
test/ # Unit tests
└── java/
├── viewmodel/ # ViewModel tests
├── repository/ # Repository tests
└── usecase/ # UseCase tests
androidTest/ # Instrumentation tests
└── java/
├── ui/ # UI tests with Compose
└── dao/ # Database tests
This project follows the official Kotlin coding conventions and Android Kotlin style guide.
- 4 spaces for indentation
- Maximum line length: 120 characters
- Use camelCase for variable and function names
- Use PascalCase for class names
- Organize imports alphabetically
# Format code with ktlint
./gradlew ktlintFormat
# Check code style
./gradlew ktlintCheckContributions are welcome! Here's how you can help:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Write meaningful commit messages
- Add unit tests for new features
- Update documentation if needed
- Follow the existing code style
- Keep pull requests focused on a single feature
- Cloud sync with Firebase
- Multiple account support
- Bill splitting feature
- Widget support for quick expense entry
- Expense receipt scanning with ML
- Financial goal tracking
- Investment tracking
- Multi-language support
- Wear OS companion app
This project is licensed under the MIT License - see the LICENSE file for details.
MIT License
Copyright (c) 2024 Chinmay Tayade
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
Chinmay Tayade
- GitHub: @Chinmay-tayade
- LinkedIn: chinmaytayade
- Email: chinmaytayade@outlook.com
- Android Jetpack team for amazing libraries
- Material Design team for beautiful design components
- Kotlin team for the fantastic language
- Android developer community for continuous support
If you find this project helpful, please consider:
- Giving it a star on GitHub
- Sharing it with others
- Contributing to the codebase
- Reporting bugs or suggesting features
Built with Kotlin and Jetpack Compose
Made by Chinmay Tayade