← All work

Cove Laundry: from the room to the folding table, with every item counted.

Guests scan a code in their room, photograph their basket and list every item. Staff collect it, tick each piece off, wash, dry and fold, then close the job with a photo. The guest gets a notification the moment it's done.

Client
Accommodation operator
Platform
Android app + guest web app
My role
Design and full build
Year
2025

This is a portfolio version of a laundry app I built for a working accommodation operator. It's shown with a fictional hotel, Cobalt Cove Hotel, and made-up guests and staff. The live demo runs entirely in your browser, so you can play both the guest and the staff side. These demo app concepts are owened by the company that requested them.

Guest sending a new basket
Guest: new basketcove-laundry/hero-1.png
Guest order status
Guest: my orderscove-laundry/hero-2.png
Staff queue
Staff: queuecove-laundry/hero-3.png
Staff working through a basket
Staff: basket detailcove-laundry/hero-4.png

The problem

Laundry requests came in by message or at the door, and nothing recorded what was in each bag. When a sock or a shirt went missing there was no way to show what had been handed over, and guests had to keep asking whether their washing was ready.

What I built

Two apps from one codebase. Guests use a web app opened from a QR code in their room, with nothing to install. The laundry team uses an Android app. Every basket is photographed and counted item by item when it's sent, and checked off again before it goes back.

How a basket moves through it

  1. Guest scans the room code

    A card in each room has its own QR code, so the order already knows the room and the property.

  2. Guest photographs the basket and lists the items

    A photo plus a count of each item, like 3 shirts and 2 towels, becomes the record of what was handed over.

  3. Staff collect it

    The basket appears in the staff queue. Tapping Collect Order moves it to in progress.

  4. Tick, wash, dry and fold

    Staff tick off every item and mark each stage as they go.

  5. Close it with a photo

    The complete button only unlocks once every item and stage is done. Staff add a photo of the finished laundry as they close it.

  6. The guest is notified

    A push notification tells the guest their laundry is ready, even if the web app is closed.

Key features

Item checklist on a basket
Item checklistcove-laundry/feature-items.png

Every item counted twice

The guest lists what's in the basket, and staff tick each item off before it can be marked complete. Photos at both ends settle any question about what was handed over.

Order limit message
Order limitscove-laundry/feature-limits.png

Limits the system enforces

One open basket per room, five per room a day, fifty per property a day, and only real room numbers. The database checks these rules itself, so a public QR page can't be used to flood the team with fake orders.

Basket logged with no signal
No signalcove-laundry/feature-offline.png

Works with no signal

Staff can log a basket themselves, for example when a guest hands one over in person, and work through it fully offline. It uploads by itself once the phone reconnects.

Laundry manager dashboard
Manager dashboardcove-laundry/feature-dashboard.png

A dashboard for managers

Orders per day, turnaround time, the status of every basket, what each staff member has done and which rooms use the service most.

Open the dashboard

Under the hood

React Native and Expo Router build both the staff Android app and the guest web app from the same screens. Supabase is the backend, and the ordering limits are enforced in the database rather than in the app.

When staff mark a basket complete, a server function sends the guest a web push notification through Firebase.

The portfolio demo recreates both apps in the browser with sample data, so anyone can try the whole flow without installing anything.

  • React Native
  • Expo Router
  • TypeScript
  • Supabase
  • Edge Functions
  • Web push
  • Offline sync

Results

[e.g. 0 lost items]

since every basket started being counted

[e.g. 300+ baskets]

handled through the app so far

[quote]

A line from a manager or staff member about using it

Next case study The Last Conjuration

Want something like this for your business?

Ordering, bookings, requests: if your customers ask for it, they can probably order it from their phone.