Skip to main content
Selected work
CleanBClient Project · RumiClean

I designed a service where hosts and cleaners don't argue over whether the cleaning was done.

RumiClean, a cleaning-matching service connecting Airbnb hosts and cleaners (client project)

Period
Nov 2025 – completed
Role
PM · Frontend · Design (team of 3)
Status
Client project · Completed

00

Summary

A client project: an Airbnb cleaning matching service. Hosts and cleaners who've never met need the completion standard to live inside the service, so I fixed the five-state job flow first and made five before-and-after photos the condition for completion. I built the entire cleaner-side app myself, shipped it, and wrapped up the engagement.

Impact

completion proof · before/after photos
5 photos
job flow the cleaner screens were derived from
5 states
planning through deployment · wrapped before payments
Delivered

01

Background

  • Airbnb hosts struggle to find reliable cleaners; cleaners struggle to get steady work. We set out to build a matching service — and to actually operate it with real users, not finish it like a hackathon project. (Client project · Nov 2025 through completion, 3-person team — service name RumiClean)
    • As overall PM I own planning, design, and release priorities, and built the entire cleaner-side frontend myself.

02

Execution

PM — Priorities & Deployment Decisions

  • Set priorities from feature work to deployment; manage code review, release merges, and QA across a 170+ PR repository.
    • Simplified deployment from k3s/ArgoCD to Docker Compose + Caddy to match a 3-person team, and served static files from a CDN (CloudFront) so pages stay up during deploys.

Process-Driven Screen Design

  • Defined the cleaning job lifecycle as a state machine (pending → scheduled → in progress → review → settlement) and derived each screen and its inputs from the states.
    • Completion requires at least 5 before/after photos — a policy that makes the service the custodian of evidence in host-cleaner disputes.
  • Implemented production integrations (Kakao Map search, Firebase Web Push) and keep team code consistent with atomic design and data-testid QA conventions.
Screens derived from the cleaning job's state flow
  1. Pending

    Request list — check place, date, options, pay; accept or decline

  2. Scheduled

    Job detail + calendar — entry method and place info

  3. In progress

    Progress shown — no extra input asked while working

  4. Completion rule

    Review

    Completion proven with 5+ before/after photos and notes

  5. Settlement

    Settlement status shown — cleaners see when they'll be paid

I fixed the state flow before the feature list and kept only the screens and inputs each state needed. Dev and QA scope were split along the same flow.

03

Results

  • Deployed to www.rumiclean.com with GitHub Actions auto-deployment, then wrapped up the engagement before Toss payments were connected, so it never took real users — my first client project carried through the full cycle: planning, design, development, deployment, and QA.

04

What I learned

  • Ops complexity has to match team size. Keeping k3s running was eating into a three-person team's feature time, so I simplified to Docker Compose and Caddy, and swapping tools stabilized the service more than adding features would have.
  • Write the feature list first and you only multiply screens. Fixing the state flow first distilled the screens and inputs we actually needed — and scope negotiations happened on top of that flow.