A multi-module Kotlin Multiplatform (KMP) application built to demonstrate modern development best practices. It consumes the Spaceflight News API to provide a list-detail view of the latest spaceflight articles.
This project is developed with AI assistance. I guide the implementation and review every AI-generated line to check whether it is necessary and follows best practices. For example, I refined the convention plugins' build file line by line to keep the configuration minimal. I also reworked the Navigation 3 back stack multiple times to find the most straightforward approach.
- Cross-Platform UI - 100% shared UI using Compose Multiplatform
- Offline-First - Caches network requests using Room (KMP) for seamless offline viewing
- Modern State Management - Unidirectional Data Flow using the MVI (Model-View-Intent) pattern
- Deep Modularization - Strict separation of concerns via feature-based multi-module architecture
This project utilizes Clean Architecture combined with a multi-module setup managed by Gradle
Convention Plugins (build-logic). The project is split into the following layers:
base- Core utilities and base classesfeature- Feature modulesapi- Public models and interfacesdata- Internal implementation (Repositories, Network, Database)presentation- UI, ViewModels, and Composables
data- Core module that collects featuredatamodulesshared- The module that wires dependencies together using dependency injectionandroidApp,iosApp,desktopApp- The app entry points
- Core: Kotlin Multiplatform, Coroutines, Flow, Metro ( dependency injection)
- UI: Compose Multiplatform, Navigation 3, Coil
- Data: Ktor, Room 3, DataStore, Kotlinx Serialization
- Build and CI: Gradle convention plugins, version catalogs, GitHub Actions
- Tests and lint:
kotlin-test,ktor-client-mock, Android Lint, compose-lints
- Replace Koin with Metro(Kotlin 2.3.20)
- Add
feature:settings - Replace Nav2 with Nav3
- Room 3
- Add icons
- Build binaries with CI
