---
title: "Home Services App"
description: "Emergency home services platform for Indian housing societies — three clients (Android, admin dashboard, API) sharing one REST API with role-based middleware, real-time tracking, and Razorpay payments."
canonical: "https://shivanshutiwari.in/projects/home-services-app"
lastUpdated: "2026-09-02"
---

# Home Services App

Emergency home services platform for Indian housing societies — three clients (Android, admin dashboard, API) sharing one REST API with role-based middleware, real-time tracking, and Razorpay payments.

**Stack:** JavaScript, TypeScript, Kotlin, Express, Sequelize, Next.js, Jetpack Compose, Hilt, Retrofit, PostgreSQL, Socket.io, Razorpay  
**Date:** 2026  

## The Problem

In Indian residential societies, urgent household breakdowns — electrical faults, water leaks, appliance failures — need fast, trustworthy help. Existing platforms like Urban Company serve this at city-wide scale; I wanted to explore a society-focused model instead, where concentrated local demand could reduce delivery cost and build trust through repeat local partnerships.

## What I Built

I built three clients talking to one REST API.

My backend runs an MVC pattern with role-based middleware (customer/partner/admin), Sequelize ORM over PostgreSQL in production, JWT auth, and location-based provider search using the Haversine formula. Real-time technician tracking and customer-partner chat run through Socket.io rooms scoped to each booking. The Android app follows clean architecture with Hilt DI and Retrofit; the admin dashboard is a typed Next.js client calling the same API.

By the numbers: 12 Sequelize models, 9 route groups, 15 backend test files, 15 seeded services across 8 categories, 23 commits over 18 days.

## Architecture

```
Android App (Kotlin/Compose) ──┐
Admin Panel (Next.js)        ──┼──▶  Express API ──▶ PostgreSQL
                                │         │
                                │         ├──▶ Socket.io (live tracking + chat)
                                │         └──▶ Razorpay (payments)
```

## Key Decisions & Tradeoffs

- I used SQLite + a mock DB fallback for local dev — no Postgres setup needed to run the project, but the mock doesn't enforce schema constraints, so model-level bugs can slip through to production undetected.
- I mocked Razorpay for testing — tests run without network access, but the mock returns hardcoded data, so real payment integration bugs only surface after deployment.
- I put tracking and chat on one Socket.io server — simple to implement, at the cost of coupling two features that probably deserve separation as the app grows.

## Highlights

- Three clients (Android/Compose, Next.js admin, Express API) sharing one REST API with role-based middleware
- Real-time technician tracking and customer-partner chat via Socket.io rooms scoped per booking
- Location-based provider search using Haversine formula across 8 service categories
- 12 Sequelize models, 9 route groups, 15 backend test files — 23 commits over 18 days
- Included a gap-analysis doc, mock Razorpay service for offline testing, and SQLite fallback for local dev

---
*Source: https://shivanshutiwari.in/projects/home-services-app*
