Nafusite is a premium Jewellery Store mobile application tailored for the Kenyan market. Built with modern Android technologies, it provides a seamless shopping experience for high-quality jewelry, including rings, necklaces, bracelets, and more.
Designed specifically for the Kenyan audience, Nafusite integrates local preferences and payment systems to provide a localized shopping experience.
- Product Showcase: High-resolution image galleries and video previews for each jewelry piece.
- Modern UI/UX: Clean, elegant interface built with Jetpack Compose using Material 3.
- Custom Video Player: Experience jewelry in motion with integrated video components powered by Media3.
- Real-time Catalog: Browse products and categories fetched in real-time from Firebase.
- Profile Management: Update user details and upload profile pictures via Cloudinary integration.
- Onboarding Journey: Personalized registration flow including product preference selection.
- Secure Authentication: Firebase-backed authentication for user accounts and data persistence.
- Localized Payments: Support for Kenyan payment methods including M-PESA (Planned).
- Dark Mode Support: Full compatibility with system-wide dark and light themes.
- Language: Kotlin
- UI Framework: Jetpack Compose
- Architecture: MVVM (Model-View-ViewModel) with Unidirectional Data Flow.
- Backend: Firebase (Auth & Realtime Database)
- Image Hosting: Cloudinary for dynamic profile image management.
- Media: Media3 ExoPlayer for high-quality video playback.
- Navigation: Type-safe Navigation Compose.
- Testing: JUnit 4, MockK, Turbine (Flow testing), and Compose UI Testing.
- Dependency Management: Version Catalog (libs.versions.toml).
Nafusite follows a clean MVVM + UDF (Unidirectional Data Flow) approach.
- State In: Compose screens subscribe to ViewModel state flows using
collectAsStateWithLifecycle(). - Event Out: UI sends interactions (clicks, text input) back to the ViewModel.
- One-off Events: Navigation and Toasts are handled via
SharedFlowobserved inLaunchedEffect.
The project maintains a high standard of reliability with:
- Unit Tests: Coverage for ViewModels and Repositories using MockK and Turbine.
- UI Tests: Instrumented tests for critical user flows like Registration and Login.
- Android Studio Iguana or newer
- JDK 17
- Android SDK 24+ (Android 7.0+)
- Clone the repository.
- Add your Cloudinary credentials to
local.properties:CLOUDINARY_API_KEY=your_api_key CLOUDINARY_API_SECRET=your_api_secret
- Connect your Firebase project and add
google-services.jsonto theapp/folder. - Sync Gradle and Run.
com.majasociet.nafusitemobileapp
├── features
│ ├── auth # Registration, Login, and Preference selection
│ ├── products # Catalog, Categories, and Product details
│ ├── profile # Profile settings and Image uploads
│ ├── home # Dashboard and personalized highlights
│ └── carts # Shopping cart and checkout flow
├── shared # Reusable UI components, Utils, and Network clients
├── navigation # Type-safe navigation graphs and screen definitions
└── ui.theme # Material3 Theme, Typography, and Design tokens
The app is optimized for the Kenyan financial ecosystem:
- M-PESA Integration: Direct STK Push for seamless transactions.
- Local Pickup/Delivery: Options tailored for major Kenyan cities (Nairobi, Mombasa, Kisumu, etc.).
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.
Created with ❤️ by Maja Societ