Back to projects

Putzschichten Manager

Code
Tech stack
Next.jsTailwind CSSSupabaseTelegram Bot APIVercel
Categories
Scheduler
Year
2026

Motivation

At our free church, several groups coordinate the cleaning shifts for the community rooms — repetitive processes that always run the same way are a natural fit for automation. Who's cleaning this week? Who was responsible last time? Who's on vacation right now? These questions come up every week — and that's exactly what software is made for. We're kicking off a test phase now to see how it holds up in everyday use.

UX · UI

  1. Plan a shift
    01

    Plan a shift

    Create shifts in the calendar, assign the crew, see open slots at a glance. Templates create recurring shifts without retyping.

  2. Members
    02

    Members

    Roles, availability and assignment stats per person — without a separate spreadsheet.

  3. Configure shift
    03

    Configure shift

    Tasks, crew size and templates. Defined once — from there the assignment runs by itself.

  4. Compose message
    04

    Compose message

    Draft reminders and schedule them for the right moment — ping only the people involved.

  5. Delivery
    05

    Delivery

    The reminder lands automatically in the group chat. The bot handles it — nobody manages Telegram.

Architecture

Three layers, one loop — input on top, logic in the middle, persistence at the bottom.

System architecture — iCal, Next.js on Vercel, Supabase and Telegram bot
  1. 01Input

    iCal · Telegram

    The hall's calendar as an iCal feed delivers upcoming events, the Telegram bot brings registrations and cancellations in from the group.

  2. 02Compute

    Next.js auf Vercel

    Small services, one job each: read the calendar, turn templates into shifts, distribute people fairly, schedule reminders. Two cron jobs check twice a day for due reminders and push them into the group via the Telegram Bot API.

  3. 03Storage

    Supabase Postgres

    Events, shifts, assignments, members, absences, templates and reminder status. The DB persists — only the service logic ever decides anything.

The result is a clean flow: calendar in, shifts generated, people assigned, reminded at the right time — all without anyone having to maintain a spreadsheet.