Android Kotlin app using Jetpack Compose with Clean Architecture (domain/data/presentation layers). The app is an employee tracking application for field sales teams to log daily visits, travel plans, and expenses.
- Kotlin
- Jetpack compose with material 3
- Koin DI
- Supabase backend for Auth and Postgres
- MVVM Clean Architecture
- Build Flavors: dev, preview, prod
# Dev builds (applicationId: com.freyza.employee.dev)
./gradlew devDebugBuild # Debug APK
./gradlew devReleaseBuild # Release APK (requires signing config)
# Preview builds (applicationId: com.freyza.employee.preview)
./gradlew previewDebugBuild
./gradlew previewReleaseBuild
# Prod builds (applicationId: com.freyza.employee)
./gradlew prodDebugBuild
./gradlew prodReleaseBuildOther standard gradle commands available
- 2 spaces
- 100 chars in a line
- Kotlin code style:
official - Standard naming conventions
All business logic goes through UseCases.
Example: GetTodayDailyReportUseCase, CreateVisitUseCase
- Interface in domain layer (
domain/repository/) - Implementation in data layer (
data/repository/) - Implementation named with
Implsuffix
- Extend
androidx.lifecycle.ViewModel - Use
kotlinx.coroutines.flow.MutableStateFlowfor state - Expose
StateFlowwithstateIn()for UI collection - Use companion object for TAG constant
- Define modules in
core/di/AppModule.kt - Use
single<>,factory<>,viewModel<>for different lifetimes - ViewModels with constructor params use
parametersOf()