Tokopaerbe is an e-commerce application that sells a variety of electronic products, featuring functionalities such as pre-login, store browsing, order fulfillment, shopping cart, wishlist, product details, and Firebase integration
- Adaptive layout based on screen size (Phone vs Tablet) using Material 3 Window Size Classes
- Bottom navigation for phones
- Navigation rail for tablets
- User authentication and Google OAuth integration
- Product browsing, cart, and checkout flow
- Payment method selection and integration
- Real-time remote configuration using Firebase Remote Config
- Push notifications with Firebase Cloud Messaging
- Crash reporting and analytics with Firebase Crashlytics and Analytics
- Offline caching with Room database
- Network communication using Retrofit with response inspection via Chucker
- Image loading with Glide and Coil
- MVVM architecture with clean separation of concerns
- Reactive data flow with Kotlin Coroutines, LiveData, and Flow
- Dependency injection via Hilt (optionally Koin or manual DI)
- Modularized codebase (optional) for scalable app structure
- Code quality enforcement with Detekt and Proguard for obfuscation and optimization
- Unit testing for core modules
| Category | Technology / Library |
|---|---|
| Language | Kotlin |
| UI | Material 3 + Jetpack Compose |
| Responsive Layout | Window Size Classes |
| Concurrency & Reactive | Kotlin Coroutines, LiveData, Flow |
| Dependency Injection | Hilt, Manual DI |
| Image Loading | Glide, Coil |
| JSON Parsing | Gson |
| Data Storage | SharedPreferences, DataStore |
| Build System | Gradle Kotlin DSL + Version Catalog |
| Architecture | Single Activity, MVVM, Clean Architecture |
| Local Database | Room |
| Network | Retrofit, Chucker |
| Firebase Services | Authentication, Remote Config, Cloud Messaging, Crashlytics, Analytics |
| Testing | JUnit, Mockito, MockK, Robolectric |
| Code Quality | Detekt, Proguard |
The app follows Clean Architecture principles divided into layers:
- UI Layer: Activities, Fragments, Composables, ViewBinding, and UI state management
- ViewModel Layer: State holders using LiveData / StateFlow, coroutine scopes
- Domain Layer: Business logic and UseCases
- Data Layer: Repository implementations, data sources (Network, Local DB, Preferences, Firebase)
- Clone the repository
- Configure Firebase project and add
google-services.jsontoapp/ - Set up Google OAuth scopes for Firebase Cloud Messaging:
- Visit Google OAuth Playground
- Input the scope
https://www.googleapis.com/auth/firebase.messaging
- Build and run the app using Android Studio
- Customize Remote Config parameters via Firebase Console
- Adaptive layout: Uses
WindowSizeClassto adapt UI based on screen width- Displays bottom navigation on phones
- Uses navigation rail on tablets
- Firebase Remote Config is used for controlling payment methods and feature toggles
- Retrofit is used for all API calls with Chucker for debugging
- ViewModel with Flow and LiveData handles UI reactivity
- Push notifications are managed via FCM
- Crashlytics and Analytics log errors and user behavior
- During development, Firebase Remote Config fetch interval is set to
0for immediate updates - In production, a fetch interval of
3600seconds (1 hour) is used to optimize network usage - The app supports modularization for scalability; modules can be found under
/modules(optional) - Code quality and obfuscation is ensured using Detekt and Proguard
- Static code analysis is enforced using Detekt
- Configured using
config/detekt/detekt.yml - Runs via Gradle task:
./gradlew detekt - Custom rules adapted for Jetpack Compose and Clean Architecture
- Formatting enforced via
detekt-formatting(based on ktlint)
- Configured using
- Obfuscation and optimization enabled via Proguard
- Unit tests are located in the
testdirectory - Run tests with
./gradlew testor via Android Studio
Contributions are welcome! Feel free to submit pull requests or open issues.
Specify your license here.