A modern Android application that connects homeowners with professional home service providers.
| Splash Screen | Home Screen | Search Screen |
|---|---|---|
![]() |
![]() |
![]() |
| Provider Detail | Provider Detail | Request Service |
|---|---|---|
![]() |
![]() |
![]() |
| Admin Dashboard | Manage Requests | Manage Providers |
|---|---|---|
![]() |
![]() |
![]() |
| Map Location Picker | Provider Detail | Request Service |
|---|---|---|
![]() |
![]() |
![]() |
- Browse service providers by category (Plumbing, Electrical, Carpentry, Cleaning, etc.)
- Search & filter by name, rating, price, and availability
- View provider details: rating, price/hr, experience, jobs done
- Book services with date, time, address scheduling
- Estimated cost calculator
- Track order status in real-time
- Rate completed services (1–5 stars)
- View provider location on Google Maps
- Dashboard with live statistics (Total Requests, Providers, Completed, Pending)
- Top Rated Providers list
- Most Requested Services chart
- Manage service categories (Add / Edit / Delete)
- Manage providers with interactive map location picker (Add / Edit / Delete)
- Manage and update service requests status (Pending → In Progress → Completed)
| Technology | Usage |
|---|---|
| Kotlin | Primary programming language |
| MVVM Architecture | Clean separation of concerns |
| Firebase Authentication | Secure user login & registration |
| Firebase Firestore | Cloud NoSQL database |
| Google Maps SDK | Interactive maps & location picking |
| Jetpack Navigation | Fragment navigation management |
| Coroutines + LiveData | Async operations & reactive UI |
| Material Design 3 | Modern UI components |
| Glide | Efficient image loading |
| ViewBinding | Type-safe view access |
| Shimmer | Smooth skeleton loading effect |
| CircleImageView | Circular provider avatars |
┌─────────────────────────────────────┐
│ UI Layer │
│ (Fragments + Activities + XML) │
│ observes LiveData │
└──────────────┬──────────────────────┘
│
┌──────────────▼──────────────────────┐
│ ViewModel Layer │
│ (HomeViewModel, SearchViewModel, │
│ AuthViewModel, OrdersViewModel) │
│ calls suspend functions │
└──────────────┬──────────────────────┘
│
┌──────────────▼──────────────────────┐
│ Repository Layer │
│ (AuthRepository, ProviderRepository │
│ CategoryRepository, RequestRepo) │
│ uses .await() │
└──────────────┬──────────────────────┘
│
┌──────────────▼──────────────────────┐
│ Data Layer │
│ Firebase Firestore + Local Storage │
└─────────────────────────────────────┘
firestore/
├── users/
│ └── {uid}
│ ├── fullName, email, phone
│ └── role: "admin" | "customer"
│
├── categories/
│ └── {categoryId}
│ ├── name, description, imageUrl
│ └── providerCount (auto-synced)
│
├── providers/
│ └── {providerId}
│ ├── name, phone, address
│ ├── latitude, longitude
│ ├── pricePerHour, categoryId
│ ├── rate (auto-calculated), reviewCount
│ └── isAvailable, experienceYears
│
└── requests/
└── {requestId}
├── customerId, providerId
├── scheduledDate, scheduledTime, address
├── status: pending|in_progress|completed|cancelled
└── rating: 0–5 (set by customer after completion)
Firestore Security Rules ensure:
- ✅ Customers can only read/write their own data
- ✅ Only admin can create/delete providers and categories
- ✅ Customers can only update
ratingfield on their own completed requests - ✅ Customers can only update
rateandreviewCounton providers
- Android Studio Meerkat or later
- Android SDK 36+
- Google Maps API Key
- Firebase project (Authentication + Firestore enabled)
1. Clone the repository
git clone https://github.com/YOUR_USERNAME/HomeServ.git2. Open in Android Studio
3. Add google-services.json
- Go to Firebase Console
- Download
google-services.json - Place it in the
app/folder
4. Add Google Maps API Key
- Open
app/src/main/res/values/strings.xml - Replace
YOUR_MAPS_API_KEY_HEREwith your actual key - Enable Maps SDK for Android and Directions API in Google Cloud Console
5. Create Admin Account
- Firebase Console → Authentication → Add user (email + password)
- Firestore →
userscollection → Add document with the admin's UID:
{
"uid": "ADMIN_UID",
"fullName": "Admin",
"email": "admin@homeserv.com",
"phone": "",
"role": "admin",
"createdAt": 0
}6. Sync & Run
File → Sync Project with Gradle Files → Run
Splash Screen
├── Logged in as Admin → Admin Dashboard
├── Logged in as Customer → Home Screen
└── Not logged in → Login Screen
└── Register Screen
Customer Flow:
Home → Search → Provider Detail → Request Service → Orders → Rate Service
Admin Flow:
Dashboard → Manage Requests → Update Status
→ Manage Providers → Add/Edit/Delete
→ Manage Categories → Add/Edit/Delete
- Firebase Storage for cloud image hosting
- Push Notifications (FCM) for order status updates
- Real-time Firestore listeners
- In-app chat between customer and provider
- Payment gateway integration
- Geographic distance-based search (GeoQuery)
- Dark mode support
- Arabic language support
Kotlin + Firebase + Google Maps + Material Design 3
⭐ If you found this project helpful, please give it a star!









