Cleaning Services
Two-sided service booking platform for home and commercial cleaning.

A dual-sided marketplace that connects residential and commercial clients with verified cleaning professionals. Cleaners complete a guided onboarding flow to declare service types — house, deep, office, move-in/out, and specialty cleans — then manage their schedule from a job feed with upcoming bookings, training modules, and earnings tracking. Customers browse provider profiles with ratings, tier badges, and transparent pricing, filter by date and service level, and book with requirement checklists, access instructions, and one-tap reschedule or cancel controls. Real-time notifications keep both sides aligned from booking confirmation through job completion.
The problem
Home and commercial cleaning was booked through calls and group chats. Customers could not compare verified cleaners, and cleaners had no single place for jobs, training, and earnings.
What we shipped
A two-sided marketplace. Cleaners onboard by declaring service types — house, deep, office, move-in/out, and specialty — then work from a job feed. Customers browse profiles with ratings, tier badges, and clear pricing, then book with a checklist and access notes.
How it works
- Guided cleaner onboarding by service type
- Job feed with upcoming bookings, training, and earnings
- Customer filters for date and service level
- Requirement checklists and access instructions on each booking
- One-tap reschedule or cancel, with live notifications both ways
The app is React Native and Expo. NestJS, PostgreSQL, and Prisma hold the booking state. Stripe Connect pays cleaners. Google Maps covers service area, and Redis plus Firebase Cloud Messaging keep the job feed current.
Technology stack
- React Native 0.74
- Expo SDK 51
- TypeScript 5
- NestJS 10
- PostgreSQL 16
- Prisma ORM
- Redis 7
- Stripe Connect
- Google Maps Platform
- Firebase Cloud Messaging
- AWS S3
- Docker
Start a project
Want a product in this shape?
Tell us who it is for and what has to work on day one. We reply with scope, timeline, and a fixed number.





