Laundry Booking

Book the shared washing machine in one click.

A small, self-hosted web app for apartment buildings. Residents see a week calendar with three slots per day and book a free one with a single click. Whoever is first gets the slot; if something doesn't fit, neighbours talk to each other.

Week view with three slots per day, some booked

Simple on purpose

No quotas, no app store. One login per resident, grouped into households that share their bookings if you like, a German user interface, and it runs on a single small server.

One click to book

Click a free slot to book it, click your own booking to cancel it. "Ganzer Tag" books every free slot of a day at once.

Week and month view

The week calendar is the default; the month overview shows the bigger picture. Both work well on phones.

At a glance

A "now in the laundry room" card, the next free slot and your upcoming bookings, with adjacent slots shown as one block.

Mail and push reminders

A reminder before your booking and a note when a slot becomes free: by mail, as a push notification on phone or computer, or both. Plain Web Push, no extra account.

In your calendar

Subscribe to your own bookings, or those of your whole household, as an iCal feed: on the iPhone with one tap, on Android with ICSx⁵, or in Google Calendar. A private link you can renew any time.

Minimal admin area

Create and delete users, group them into households, reset passwords, set how many weeks ahead people can book, cancel any booking. An audit log shows logins, failed login attempts, bookings and changes, and cleans itself up after a number of days you choose.

Small and safe

Flask and SQLite, no external CDNs. CSRF protection, a strict CSP, login throttling, an unprivileged container and weekly dependency audits.

Screenshots

The interface is in German (Swiss style).

Get started

Run it with Docker Compose on any small server, behind an HTTPS reverse proxy. The first admin is created from the environment; everyone else is added in the app under Verwaltung.

Production (Docker Compose)

git clone https://github.com/martigr/laundry-booking
cd laundry-booking
cp .env.example .env   # SECRET_KEY, admin, BASE_URL, mail, push
chmod 600 .env
docker compose up -d --build

Try it locally

python -m venv .venv && . .venv/bin/activate
pip install -r requirements-dev.txt
flask --app laundry --debug seed-demo
flask --app laundry --debug run
# http://localhost:5000  alice / password123

Before going online, work through the security checklist (HTTPS proxy, secrets, backups, updates).

Configuration, mail and push setup, volumes and the command line are described in the README; architecture and conventions in docs/DEVELOPMENT.md.