Shared-house chores · Cleaning rota with photo check-off
A chores tool for shared houses: automatic rotating rota, on-the-spot photo check-off, anti-cheating duplicate detection and optional AI grading. Tenants just tap a WeChat link; the landlord runs everything from one admin page
Overview
In a shared house, keeping the common areas clean on goodwill and group-chat reminders almost always fails: nobody is sure whose turn it is, whether it got done, or whether it was done properly. This system hands all three to software — the rota rotates automatically, completion needs photos taken on the spot, and the photos are checked by the system. The landlord only handles the few cases that need a human.
The whole system is one Python file plus one web page, running on my own server. Tenants tap their personal link in WeChat — no sign-up, no app.
Core features
- Automatic rota: 4 areas (living room / kitchen / bathroom / laundry) × 5 people, rotating weekly with 1 person off each week; a 5-week cycle so everyone gets every area
- On-the-spot photos: the page opens the phone camera directly; at least 2 photos from different angles per area, and opening the camera issues a one-time code valid for 15 minutes
- Anti-cheating
- Every photo's perceptual hash is compared against all past photos; old photos or someone else's photos are rejected
- Photos in one batch can't be the same angle; too dark, too blurry or a blank wall gets rejected outright
- The server watermarks each photo: area | tenant | time | LIVE / UPLOAD
- Gallery upload is only allowed when the camera can't be opened, and always goes to the landlord for manual review
- All tenants can see each other's photos — transparency keeps everyone honest
- AI check (optional): with an Anthropic API key, Claude Haiku judges "is this the right area, is it a photo of a screen, is it clean" and scores it; ≥70 passes automatically, dirty areas are sent back to redo, suspicious ones go to the landlord
- Swap requests: a busy tenant can ask a housemate to cover; it only takes effect once the other person taps "accept" on their own link, after which they submit the photos and any overdue mark goes to them
- Landlord admin: view photos, approve / reject / undo in one tap, 12-week stats (passed, rejected, overdue, covered for others, covered by others), copy this week's or next week's rota message for the WeChat group
- Tenant management: rename, copy link, issue a new link (the old one stops working immediately), deactivate people who move out, add new tenants; changes affect the rota from next week, while this week and history stay as they were
How it's built
- Backend: a single FastAPI file + SQLite; photos on local disk, originals deleted after 90 days but hashes kept for duplicate checks
- Frontend: one plain HTML/JS page that works in WeChat's in-app browser, no build step
- Image processing: Pillow for brightness / sharpness checks and watermarks, imagehash for duplicate detection
- AI: Anthropic Messages API — the photos plus the acceptance criteria go to Claude Haiku, which returns structured JSON; everything still works without a key
- Deployment: Caddy or Nginx for HTTPS (a mobile web page needs HTTPS to use the camera) + systemd; about 10 minutes to set up, and AI costs a few cents a month
Live demo
Click "Visit" above for the demo. It looks exactly like the real system:
- Switch roles at the top: the landlord admin or any tenant
- As a tenant you can see this week's duty, take a photo (or pick one from the gallery) to submit, and send or accept swap requests
- As the landlord you can review photos, reject and undo, manage tenants, copy the rota message and see 12-week stats
- It comes with 12 weeks of sample data; everything runs in your browser, photos are never uploaded anywhere, and refreshing resets it
- The demo has no AI; live photos that pass the basic checks are approved directly
Source code and deployment notes are on GitHub.