Skip to main content

19 — Staff Mobile Companion Specification

Surface: iOS + Android (React Native / Expo) — personal devices for housekeeping, maintenance, F&B runners, and concierge staff Phase: P2 / R2 Competitive reference: hotelkit, Cloudbeds housekeeping, Operto, Whistle for Hoteliers


1. Overview

The staff mobile companion is a lightweight Expo React Native app for non-front-desk operational staff. It is deliberately scope-limited — it does not replicate the full operator desktop. It focuses on:

  • Housekeeping: Room cleaning queue, claim rooms, mark clean, log issues, photo evidence
  • Maintenance: Receive work orders, update status, photo evidence, request parts
  • F&B runners: See delivery orders, mark delivered, communicate with kitchen
  • Concierge: Guest messages, service requests, request routing

Differentiator vs hotelkit/Cloudbeds: Native to the Melmastoon platform — charges post directly to folios, room statuses update the front-desk desktop in real-time, push notifications from the same Pub/Sub pipeline.


2. Tech stack

LayerTechnology
FrameworkReact Native (Expo SDK 51+)
NavigationReact Navigation (stack + bottom tabs)
StateZustand + TanStack Query
OfflineMMKV (fast storage) + outbox pattern
PushExpo Notifications → FCM (Android) / APNs (iOS)
AuthBiometric (Face ID / fingerprint) + PIN fallback
Cameraexpo-camera (photo evidence)
Geolocationexpo-location (geo-fenced clock-in)

3. User personas and access

PersonaModules available
Housekeeping attendantCleaning queue, room claim, photo evidence, issue log
Housekeeping supervisorAll attendant + assign rooms, approve inspection, shift report
Maintenance technicianWork order queue, status updates, parts request
F&B runnerDelivery order queue, route map, mark delivered
ConciergeGuest messages, service requests, escalation

Role assigned by operator in the desktop app (Settings → Staff → [staff member] → Mobile app role).


4. Authentication

  1. Staff member downloads app from App Store / Play Store
  2. Operator sends invite link (one-time token, 48h expiry)
  3. Staff sets up biometric + PIN on first launch
  4. Daily: biometric or PIN to unlock (no re-auth on each use during shift)
  5. Auto-lock after 10 min idle

Geo-fenced clock-in (optional, tenant-configurable): Staff can only access their room list after clocking in within the property's GPS geofence (radius: 200 m from property GPS coordinates). Uses expo-location.


5. Housekeeping flow

5.1 My rooms (attendant)

[Avatar + Name] Today's shift: 08:00 – 16:00
────────────────────────────────────────────
Assigned rooms:
201 🟡 Checkout — Clean [Start] [Skip]
202 🟡 Stayover — Due today [Start] [Skip]
205 🔴 Priority — VIP arrival [Start] [Skip]

Unassigned (tap to claim):
203 🟡 Checkout
204 🟡 Checkout

5.2 Clean a room

  1. Tap "Start" → timer starts
  2. Cleaning in-progress indicator
  3. Tap "Done" → opens completion screen:
    • Photo evidence (required if tenant.housekeeping.require_photo = true)
    • "Any issues?" → category picker (Plumbing, Furniture, Electrical, Other)
    • Notes (optional voice-to-text via expo-speech)
  4. Submit → room status → "Awaiting inspection"
  5. Notification sent to supervisor

5.3 Supervisor assignment

Supervisor sees all rooms with unassigned status. Drag (or tap) to assign to a staff member. Push notification sent to assigned staff member's device.


6. Maintenance flow

6.1 Work order queue

My work orders (Karim — Maintenance)
────────────────────────────────────
Room 305 — Bathroom faucet dripping 🔴 Urgent
Room 201 — TV remote not working 🟡 Normal
Lobby — AC unit noise 🟡 Normal

6.2 Work order detail

  • Description + photos from reporter
  • Parts needed: checklist (technician marks parts used from inventory)
  • Status: Acknowledged → In Progress → Resolved / Needs parts / Escalate
  • Resolution photo: required for completion
  • Time logged: auto-tracked (start/stop timer)

7. Push notifications

EventNotification
New room assigned"Room 201 assigned to you — checkout clean"
Priority room alert"⚠️ VIP arriving in 2h — Room 205 needs urgent clean"
New maintenance work order"New work order: Room 305 — plumbing"
Maintenance escalated"Escalation: Room 305 plumbing — needs parts order"
Guest message (concierge)"Guest in Room 201: 'Can I get extra towels?'"

Notification tap → opens directly to relevant screen (deep link).


8. Offline behaviour

ScenarioHandling
No connectivityRoom list from MMKV cache; actions queued in outbox
ReconnectOutbox synced; push notifications delivered when online
Push notification offlineiOS/Android OS delivers when device comes online

9. Geo-fenced clock-in

When tenant enables geo_fenced_clock_in:

  1. App requests expo-location "always" permission on first launch
  2. Clock-in screen shows: "You must be within [property name] to clock in"
  3. GPS checked; if within 200 m: clock-in allowed
  4. If not within range: "You appear to be [X km] from the property. Please see your manager."
  5. Manager override: manager PIN bypasses geo-fence check

10. Panic button (optional, Phase 3)

A persistent "SOS" button in the app header (hidden behind 3-second press to prevent accidental trigger):

  • Sends immediate push notification to all supervisors on duty
  • Shares GPS location
  • Logs a timestamped panic event in safety-service

11. Walkie-talkie-style chat (Phase 3)

Press-to-talk audio messages between staff members via notification-service:

  • Low-latency audio clip (≤ 10 s)
  • Group channels: "Housekeeping Floor 2", "Maintenance", "F&B Team"
  • Auto-transcribed for Deaf/HoH staff members

12. Performance budgets

MetricTarget
App launch to room list≤ 2 s (cached)
Photo capture + upload≤ 5 s on 3G
Push notification delivery≤ 5 s from event
Outbox sync on reconnect≤ 10 s

References