Loading...

Organize Your Finances with Pocket Planner

User-friendly mobile application designed to help individuals efficiently manage their personal finances. It provides a simple yet powerful way to track expenses, log income, set monthly budgets, and visualize financial data using interactive charts. The app is developed with modern design principles and advanced technologies for performance and scalability.

View on GitHub Download APK

App Architecture

Pocket Planner is designed using a modular architecture, following Clean Architecture principles and the MVI pattern. Below is a detailed breakdown of the file structure:

Presentation Module

                    ─ presentation
                       ├── navigation
                       │     └── AppNavigation.kt
                       ├── screen
                       │     ├── categorymonthdetail
                       │     │     ├── content
                       │     │     │    └── CategoryMonthDetailContent.kt
                       │     │     └── observer
                       │     │          └── CategoryMonthDetailObserver.kt
                       │     ├── createexpense
                       │     │     ├── content
                       │     │     │    └── CreateExpenseContent.kt
                       │     │     └── observer
                       │     │          └── CreateExpenseObserver.kt
                       │     └── home
                       │           ├── content
                       │           │    ├── HomeBodyContent.kt
                       │           │    └── HomeHeaderContent.kt
                       │           └── observer
                       │                └── HomeObserver.kt
                       └── viewmodel
                             ├── createincome
                             │     └── CreateIncomeViewModel.kt
                             ├── editexpense
                             │     └── EditExpenseViewModel.kt
                             └── months
                                   ├── MonthsScreenState.kt
                                   └── MonthsViewModel.kt
                

Navigation Module

                    ─ navigation
                       ├── di
                       │     ├── AppModule.kt
                       │     └── PlatformModule.kt
                       └── impl
                             └── AppNavigationImpl.kt
                

Theme Module

                    ─ theme
                       ├── Color.kt
                       ├── Dimen.kt
                       ├── Shape.kt
                       └── Type.kt
                

Core Module

                    ─ core
                       ├── mapper
                       │     └── ResultMapper.kt
                       ├── network
                       │     └── ResponseResult.kt
                       ├── navigation
                       │     └── LocalNavController.kt
                       └── utils
                             ├── Extensions.kt
                             └── NoRippleInteractionSource.kt
                

Data Module

                    ─ data
                       ├── database
                       │     ├── expense
                       │     │     └── ExpenseFunctions.kt
                       │     ├── income
                       │     │     └── IncomeFunctions.kt
                       │     └── month
                       │           └── MonthFunctions.kt
                       ├── repository
                       │     └── FinanceRepositoryImpl.kt
                       └── sqldelight
                             ├── expense
                             │     └── Expense.sq
                             └── month
                                   └── Month.sq
                

Domain Module

                    ─ domain
                       ├── model
                       │     ├── FinanceModel.kt
                       │     ├── MonthModel.kt
                       │     └── FinanceLocalDate.kt
                       ├── repository
                       │     └── FinanceRepository.kt
                       └── usecase
                             ├── CreateExpenseUseCase.kt
                             └── GetExpenseUseCase.kt
                

Components Module

                    ─ components
                       ├── alertdialog
                       │     └── AlertDialog.kt
                       ├── button
                       │     └── Button.kt
                       ├── chart
                       │     ├── FinanceBarChart.kt
                       │     └── FinanceLineChart.kt
                       ├── textfield
                             └── AmountOutlineTextField.kt
                

Android App Module

                    ─ androidMain
                       ├── kotlin
                       │     └── com
                       │           └── daviekim
                       │                 └── myfinance
                       │                       └── app
                       │                             └── MainActivity.kt
                       └── res
                             ├── mipmap-anydpi-v26
                             │     └── ic_launcher.xml
                             └── values
                                   └── strings.xml
                

Test Module

                    ─ test
                       ├── data
                       │     ├── repository
                       │     │     ├── database
                       │     │     │     └── FakeDatabaseFinanceDataSource.kt
                       │     │     └── impl
                       │     │           └── FinanceRepositoryImplTest.kt
                       │     └── impl
                       │           └── FakeFinanceRepositoryImpl.kt
                       ├── domain
                       │     └── usecase
                       │           ├── GetExpenseUseCaseTest.kt
                       │           ├── GetFinanceUseCaseTest.kt
                       │           └── GetMonthsUseCaseTest.kt
                       ├── mock
                       │     └── DatabaseFinanceDataSourceMock.kt
                       └── presentation
                             └── viewmodel
                                   ├── createexpense
                                   │     └── CreateExpenseViewModelTest.kt
                                   ├── home
                                   │     └── HomeViewModelTest.kt
                                   └── months
                                         └── MonthsViewModelTest.kt
                

Technologies Used

During the development of Pocket Planner, the following technologies and tools were utilized:

Challenges Faced

Some of the major challenges encountered during development were:

Achievements

The development of Pocket Planner led to several significant achievements: