Your Campus Marketplace
Connecting campus hustlers with customers through trust, convenience, and innovation
Features โข Tech Stack โข Getting Started โข Contributing โข Roadmap
HustleHub is a native Android marketplace app that transforms the informal peer-to-peer service economy at Meru University of Science & Technology. Students offer laundry, salon, tutoring, graphic design, food, and more โ but currently rely on chaotic WhatsApp groups and word of mouth.
HustleHub organizes this economy into a structured, trustworthy platform with:
- ๐ AI-powered search โ "braids near Gate B under 500"
- ๐ฌ Safe in-app messaging โ no phone number sharing required
- ๐บ๏ธ Campus map โ real-time provider locations
- โญ Reputation system โ ratings, reviews, and trust scores
- ๐ Student-only access โ verified via university email
- ๐ธ Portfolio showcase โ providers display their work
Authentication: Student email signup (@must.ac.ke), email OTP verification, Google Sign-In, role selection (Provider / Customer / Both)
Service Management: Create and edit listings with portfolio images, category selection, price range, availability toggle (Available / Busy / Offline)
Discovery: Browse by category, text search, AI-powered natural language search via Gemini, sort by relevance / rating / distance
Messaging: Real-time 1-on-1 chat, voice notes with waveform, image sharing, location sharing, Service Request Cards, read receipts, push notifications (FCM)
Campus Map: Google Maps with provider pins color-coded by category, distance-based discovery, quick actions from map
Ratings & Reviews: 5-star rating, written reviews, moderation, auto-prompt after service
- ๐ Voice/video calls (WebRTC)
- ๐ฐ M-Pesa payment integration
- ๐ Gamified Hustle Score, badges, leaderboards
- ๐ซ Multi-campus support (Kenyatta, UoN, etc.)
- ๐ Provider analytics dashboard
- Language: Kotlin 2.x
- UI: Jetpack Compose + Material 3 Expressive
- Architecture: MVVM + Clean Architecture (feature-based)
- Navigation: Navigation 3 (
androidx.navigation3) - DI: Hilt (Dagger)
- Networking: Retrofit 3.0.0 + OkHttp 5.x
- Real-time Chat: OkHttp WebSocket client โ Spring Boot WebSocket/STOMP
- Local Cache: Room 2.8.4 + DataStore Preferences (offline-first)
- Image Loading: Coil 2.7.0
- State: Kotlin Flow + StateFlow
- REST API: Spring Boot (Kotlin) โ all data at
/api/v1/ - Real-time: Spring WebSocket / STOMP โ live chat and presence
- Authentication: Firebase Auth (Email/Password + Google Sign-In)
- Push Notifications: Firebase Cloud Messaging (FCM)
- AI Search: Gemini API (invoked server-side)
- Maps: Google Maps SDK for Android
โ ๏ธ No Firestore, no Firebase Realtime Database, no Supabase. All application data is served by the Spring Boot backend. Firebase is used exclusively for Auth and FCM.
Android Client
โโโ Presentation (Compose + ViewModels)
โโโ Domain (Use Cases + Repository Interfaces)
โโโ Data (Retrofit APIs + Room Cache + WebSocket)
โ
โผ REST /api/v1/ + WebSocket
Spring Boot Backend
โโโ REST API (services, discovery, chat, users, reviews, media)
โโโ WebSocket Server (real-time chat)
โโโ Gemini AI Service (natural language search)
โโโ Database + File Storage
โ
Firebase (Auth + FCM only)
must.kdroiders.hustlehub/
โโโ core/ # Shared: ApiClient, AuthInterceptor, theme, utils
โโโ di/ # Hilt: NetworkModule, FirebaseModule, RepositoryModule
โโโ navigation/ # Navigation 3 NavKeys + NavGraph
โโโ local/ # Room: DAOs, entities (offline cache)
โโโ feature/
โโโ auth/ # Firebase Auth โ POST /api/v1/auth/register
โโโ profile/ # GET/PUT /api/v1/users/me
โโโ services/ # CRUD /api/v1/services
โโโ discovery/ # /api/v1/discovery/* (browse, search, AI, map pins)
โโโ chat/ # REST history + WebSocket real-time
โโโ map/ # Google Maps + provider pins
โโโ reviews/ # POST /api/v1/reviews
โโโ notifications/ # FCM service + notification center
โโโ media/ # POST /api/v1/media/upload
See ARCHITECTURE.md for full detail.
- Android Studio Ladybug (or latest stable)
- JDK 17+
- Firebase account (Auth + FCM only)
- Google Cloud account (Maps API key)
- HustleHub Spring Boot backend running locally
-
Clone the Android repo
git clone git@github.com:Android-Community-MUST/kotlin-hustlehub.git cd kotlin-hustlehub -
Clone and start the Spring Boot backend
git clone git@github.com:Android-Community-MUST/hustlehub-backend.git cd hustlehub-backend ./gradlew bootRun # starts on localhost:8080
-
Set up Firebase (Auth + FCM only)
- Create a Firebase project at console.firebase.google.com
- Add Android app with package
must.kdroiders.hustlehub - Download
google-services.jsonโ place inapp/ - Enable Authentication (Email/Password + Google Sign-In)
- Enable Cloud Messaging (auto-enabled)
- โ Do NOT enable Firestore, Realtime Database, or Storage
-
Configure API keys
cp keys.properties.template keys.properties
Edit
keys.properties:MAPS_API_KEY=AIzaSy...your_maps_key BASE_URL=http://10.0.2.2:8080/api/v1/ WS_BASE_URL=ws://10.0.2.2:8080/ws GEMINI_API_KEY=AIzaSy...your_gemini_key GOOGLE_WEB_CLIENT_ID=your_google_web_client_id_here
-
Build and run
./gradlew installDebug
See SETUP.md for full setup instructions.
- Fork the repo and create a feature branch:
git checkout -b feature/amazing-feature - Follow Kotlin coding conventions
- Run quality checks before committing:
./gradlew ktlintCheck detekt test - Use Conventional Commits:
feat(chat): add typing indicators - Open a Pull Request against
develop
See CONTRIBUTING.md for full guidelines.
- Authentication & profile setup
- Design system + shared composables
- Service creation & discovery feed
- AI-powered search
- Real-time messaging (WebSocket)
- Campus map with provider pins
- Ratings & reviews
- Beta launch (500 users)
- In-app voice/video calls
- M-Pesa payment integration
- Gamification (Hustle Score, badges, leaderboards)
- Provider analytics dashboard
- Multi-campus support
- Service swap / barter matching
- Emergency request broadcasts
- Web admin panel
# Unit tests
./gradlew test
# Instrumented tests (requires emulator/device + backend running)
./gradlew connectedAndroidTest
# Code quality
./gradlew ktlintCheck detektTest coverage targets: 70%+ for domain and data layers, critical UI flows covered.
| Document | Description |
|---|---|
| PRD.md | Full product requirements |
| ARCHITECTURE.md | Codebase structure and patterns |
| API.md | Spring Boot REST + WebSocket API reference |
| SETUP.md | Development environment setup |
| TROUBLESHOOTING.md | Common issues and solutions |
| CHANGELOG.md | Version history |
| CONTRIBUTING.md | Contribution guidelines |
- Student verification: Only @must.ac.ke emails allowed
- Token security: All API calls use short-lived Firebase ID tokens (auto-refreshed)
- No phone number sharing: In-app messaging only
- User safety: Block/report features, content moderation, in-app safety tips
- Privacy Policy: View Policy
Built and maintained with โค๏ธ by the Android Community MUST engineering team at Meru University of Science & Technology:
- Korir Aldo โ @korryrdev โ Lead Android Engineer & Backend Architect
- Vertigo โ @vertigo0628 โ Android Developer
- Botmaster Kenya โ @Botmasterkenya โ Android Developer
- Nancy โ @NancyN00 โ Android & KMP Developer
Proprietary & Confidential License โ see LICENSE for details.
- Meru University of Science & Technology for the inspiration
- Spring Boot + Kotlin for the backend
- Jetpack Compose for the UI toolkit
- Firebase for Auth and FCM
- Google AI for Gemini API
- All beta testers and early adopters
Built with โค๏ธ by campus hustlers, for campus hustlers
