How doukfama/ecobudget-kmp works
EcoBudget is an Android budgeting app being migrated toward a Kotlin Multiplatform shared core. The principal workflow is viewing and navigating transactions by month, then entering transactions through the Android UI; shared state and repository logic support that UI. The README documents the shared models, repository, UI state, localized category resources, and platform-specific time/UUID implementations. Source excerpts are limited to build configuration, so detailed runtime wiring between UI components and shared code is not verified.
Main entry points: EcoBudgetScreen.kt Budget screen · FakeTransactionRepository.kt Fake transaction data · EcoBudgetViewModel.kt Budget view model · Transaction.kt Transaction model
Components 21
Android interface
- Main activity
app/src/main/java/com/example/MainActivity.kt - Budget screen
app/src/main/java/com/example/ui/screens/EcoBudgetScreen.kt - Month navigator
app/src/main/java/com/example/ui/components/MonthNavigatorBar.kt - Transaction card
app/src/main/java/com/example/ui/components/TransactionCard.kt - Add transaction
app/src/main/java/com/example/ui/components/AddTransactionDialog.kt - UI theme
app/src/main/java/com/example/ui/theme/Theme.kt
Shared domain
- Budget view model
shared/src/commonMain/kotlin/com/example/viewmodel/EcoBudgetViewModel.kt - Budget UI state
shared/src/commonMain/kotlin/com/example/viewmodel/EcoBudgetUiState.kt - Transaction model
shared/src/commonMain/kotlin/com/example/model/Transaction.kt - Category model
shared/src/commonMain/kotlin/com/example/model/Category.kt - Month model
shared/src/commonMain/kotlin/com/example/model/YearMonth.kt - Category strings
shared/src/commonMain/kotlin/com/example/resources/CategoryResources.kt
Shared data
- Transaction repository
shared/src/commonMain/kotlin/com/example/data/repository/TransactionRepository.kt - Fake transaction data
shared/src/commonMain/kotlin/com/example/data/repository/FakeTransactionRepository.kt
Platform services
- UUID abstraction
shared/src/commonMain/kotlin/com/example/utils/UUID.kt - Time abstraction
shared/src/commonMain/kotlin/com/example/utils/Time.kt - Android UUID
shared/src/androidMain/kotlin/com/example/utils/UUID.kt - iOS UUID
shared/src/iosMain/kotlin/com/example/utils/UUID.kt - Android clock
shared/src/androidMain/kotlin/com/example/utils/Time.kt - iOS clock
shared/src/iosMain/kotlin/com/example/utils/Time.kt
Other components
- User
Connections 19
- User → Main activity: opens app
- Main activity → Budget screen: hosts screen
- Budget screen → Budget view model: uses shared state
- Budget screen → Month navigator: shows navigation
- Budget screen → Transaction card: shows transactions
- Budget screen → Add transaction: offers entry
- Budget screen → UI theme: uses styling
- Budget view model → Budget UI state: updates state
- Budget view model → Transaction repository: uses repository
- Fake transaction data → Transaction repository: implements
- Fake transaction data → Transaction model: stores models
- Transaction model → UUID abstraction: generates ID
- Fake transaction data → Time abstraction: uses clock
- Android UUID → UUID abstraction: implements
- iOS UUID → UUID abstraction: implements
- Android clock → Time abstraction: implements
- iOS clock → Time abstraction: implements
- Month model → Transaction model: supports date grouping
- Category strings → Category model: maps labels