
CleanHaus
Rental cleaners see only their jobs in a role-aware turnover calendar app
CleanHaus needed a new mobile app to replace its older Ionic and Vue app. We built one React Native codebase for iOS and Android whose calendar shows owners, managers and cleaners only what their role allows.
Real Estate & HospitalityField operations mobile appModernized a live product
- Who uses it
- Owners, cleaner managers and cleaners
- Platforms
- iOS and Android from one codebase
- Calendar
- Month, week and day views per role
- Ships through
- The platform's own store accounts
The challenge
The platform's older Ionic and Vue app was hard to maintain, and its most critical screen, the turnover calendar, had to respect strict role rules on phones.
What we did
One Expo and TypeScript app on the platform's existing backend and logins, with phone sign-in, push actions, deep links and role-based month, week and day calendars.
The outcome
The new app shipped through the platform's own store accounts and went live alongside its AI agent.
The starting point
CleanHaus, a live operations platform where property owners, cleaner managers and cleaners coordinate short-term rental bookings and cleanings. It runs on a serverless AWS backend with a web app and an older Ionic and Vue mobile app.
What had to change
The platform wanted one codebase for iOS and Android that it could deploy to test stores and maintain easily. The calendar, where every turnover is planned, had to work for three roles with different rights.
What could not break
- Owners cannot assign cleaners, and cleaners see only their own jobs
- The app runs on the existing backend and Cognito logins
- Dates stay correct across property time zones
- Development, staging and production builds stay separate
The calls we made
We treated the calendar as the product and the role rules as part of the calendar, not a filter added later.
- 01
Analyze the calendar before building it
The calendar carries booking bars, cleaning and service blocks, unassigned turnover gaps and urgency cues close to check-in, so it got its own analysis before any code.
Ruled outPorting the old calendar screen as it was.
- 02
Role rules in every view
Month, week and day views read the user's role, so a cleaner's calendar holds only their own jobs and an owner's has no assign action.
Ruled outOne calendar for everyone with actions hidden in the interface.
- 03
One codebase on the existing backend
Expo and TypeScript give iOS and Android from one codebase, and the app calls the platform's own APIs and Cognito accounts, starting from the user profile.
Ruled outSeparate native apps, or a new backend for mobile.
- 04
Builds per environment
EAS builds for development, staging and later production let the platform test each release in a store build before users see it.
Ruled outA single build pointed at whichever backend was current.
How the system fits together
What we built
Role-based turnover calendar
Month, week and day views with booking bars, cleaning and service blocks, unassigned gap indicators, timezone-safe dates and role-based permissions.
Sign-in on existing accounts
Cognito phone code login through Amplify, plus Google and Apple sign-in, localization and onboarding.
Push, deep links and analytics
Push notifications with interactive actions, deep links into the right screen, analytics and crash reporting.
Store builds per environment
EAS builds for each environment and a move to the platform's own company accounts, shipped through TestFlight.
How it works
Sign in
A user signs in with a phone code or a Google or Apple account on their existing login.
Open the calendar
The app loads bookings and jobs that the user's role is allowed to see.
Spot the gaps
Unassigned turnovers and urgency cues close to check-in stand out on the calendar.
Act from a push
A push notification with actions opens the right job through a deep link.
What changed
The platform moved to one React Native app for iOS and Android, shipped under its own store accounts, and the app went live alongside its AI agent.
Under the hood
- Datics role
- Engineering delivered by Datics
- Identity
- Amazon Cognito with phone code login through Amplify Gen 2, and Google and Apple sign-in on the same accounts.
- Messaging and telemetry
- Firebase Cloud Messaging and Expo push with interactive actions, Firebase Analytics and Crashlytics.
- Delivery
- Expo EAS builds per environment and TestFlight under the platform's own store accounts.
Cloud and infrastructure
Also in the stack
How it shipped
Requirements and proposal
Requirements from the platform's CTO, a proposal and a revised statement of work for the React Native port.
Five planned sprints
The base, sign-in, push, deep linking, analytics and the calendar, planned sprint by sprint from a feature breakdown.
Continuous delivery
Ongoing pull requests into the platform's mobile app repository as the app and its AI agent went live.
In the platform's repository
Every change went into the platform's own mobile app repository through pull requests reviewed by its team.
Planned in sprints
A feature breakdown sheet and a separate calendar analysis set each sprint before it started.
What this unlocked
With one codebase on the existing backend, new features reach iOS and Android together.
Related work
Have a product with the same kind of constraints?
Tell us what already exists and what you want it to do. We will tell you what it takes.
