Blog Projects About

A Housekeeping App for Mom and Dad

My parents run a small hospitality business at dovregubben.com. Cabins, rooms, guests coming and going — and someone always had to manually figure out which rooms needed cleaning, set up the lists, and make sure nothing fell through the cracks. It wasn't about paper schedules. It was about having control over everything.

Then my mom had hip surgery. Every minute she spent wrangling room lists and tracking cleaning status was a minute she couldn’t afford. I wanted to build them something that would save time, stress, and mental overhead — completely free of charge, because that’s what family is for.

The Brief: “Can You Make Us an App?”

Famous last words. The requirements sounded simple enough:

Simple.

It was not simple. This thing went through many versions. The first iteration was embarrassingly wrong. The second was almost right but completely unusable on a tablet. The third had a color scheme that made my dad squint. By version four, I was questioning my life choices. By version five, we were getting somewhere.

Tech Stack: Because One Rust Project Is Never Enough

I have a problem. When faced with “what tech should I use?” my brain short-circuits to “what if… all Rust?”

LayerTechnologyWhy
FrontendDioxus 0.7 (Rust → WASM)Because React is too mainstream and I enjoy suffering elegantly.
BackendAxum 0.8Tokio-powered, composable, and types so tight they squeak.
DatabaseSQLite + SQLxZero-config, single file, survives homelab reboots.
StylingTailwind + custom CSS tokensTablet-optimized big chunky buttons. Fingers are imprecise instruments.
Booking APITheir existing booking system’s APIThe source of truth. Or at least the source of some truth.

The entire thing compiles to a single binary + static files. Deployed via Docker on a proper server sitting in a rack at Dovregubben — hardware donated from my workplace, because enterprise hand-me-downs deserve a second life.

The Deployment: A Week in the Field

You can’t exactly deploy a housekeeping app over Discord. So I packed a bag, drove five hours to mom and dad’s place, and spent a week doing live demos by day, fixing bugs by night, and squeezing in my actual day job somewhere in between. By day three the cleaners had tablets. By day seven it was in production. I came home tired — turns out doing your day job and live-deploying for family in the same week is a special kind of marathon, even for someone used to on-site deployments.

Two Worlds: The Tablet and the Command Center

The Cleaner Tablet

Cleaners log in and immediately see which rooms need cleaning. They can reserve a room to claim it, work through a tailored checklist, and mark it as clean when done. No “Sign in with Google.” No OAuth dance. Just a password flow that gets out of the way so they can grab a mop and get to work.

The Manager Dashboard (Mom & Dad Mode)

Mom and Dad can assign rooms, build checklist templates, browse and resolve issues, track lost & found items, configure booking system sync and SMTP alerts, and view an audit log. There’s also a 7-day planning view so they can see the wave of checkouts coming like a tactical weather forecast.

Booking System Integration: The Necessary Evil

The booking system is the oracle. The app syncs in three modes:

ModeWhat It DoesWhen To Use
ColdFull wipe and re-import. Nuclear option.When everything looks wrong and you don’t trust computers anymore.
WarmIncremental sync, merges changes.The daily “let’s stay current” option.
HotQuick sync of today’s immediate changes.When someone just checked out early and the cleaner is already in the parking lot.

When a cleaner finishes a room, the app writes a clean-request back to the booking system. The circle of cleanliness is complete. One fun discovery: the booking API has opinions about rate limits and token lifetimes. The backend now has a small caching + retry layer that handles 401s with the patience of a saint.

Features That Actually Get Used

Checklists with Sections

Not just flat lists. Sections like “Bathroom” with items “Clean toilet”, “Replace towels”, “Check soap.” Reorder items, mark required or optional, assign templates to specific rooms.

Issue Reporting with Photos

Something broken? Snap a photo, log it, optionally email Mom and Dad. Manager marks it resolved when fixed. Audit trail included.

Lost & Found

Guests leave things behind. Cleaners log found items with a required photo. Managers mark items delivered when returned. No more “did we find a blue scarf?” texts at midnight.

Staff Management & Worker Colors

Each cleaner gets a color. Their assigned rooms show their color. The planning view shows who’s doing what in a rainbow of responsibility.

The Deploy

Docker Compose. One service. One SQLite file. Lives on a rack-mounted server at Dovregubben. Restart policy: unless-stopped.

services:
  housekeeping:
    build: .
    ports:
      - "3000:3000"
    volumes:
      - ./data:/app/data
    restart: unless-stopped

That’s it. A family’s cleaning workflow, distilled into a YAML file.

What I Learned

Is It Done?

Software is never done. But it’s deployed, it’s used daily, and it keeps the business running with less manual overhead than ever before. Mom and Dad have their dashboard and oversight. The cleaners can see what’s dirty, grab what they want, and mark it done. And I have the quiet satisfaction of knowing that somewhere in Norway, a Rust app is tracking whether the toilet in cabin 3 has been scrubbed.

If that isn’t what programming is all about, I don’t know what is. 🧹✨