REFERENZ|

Innehalten Schweiz

Eine Eventplattform für eine Achtsamkeitswoche in vier Städten

Der Verein Innehalten lädt einmal im Jahr eine ganze Stadt dazu ein, eine Woche lang innezuhalten: lokale Anbieter:innen öffnen ihre Räume für kostenlose Angebote rund um Achtsamkeit. 2026 gleichzeitig in Bern, Biel, Baden und Aarau. Damit vier ehrenamtliche Teams rund 200 Termine ohne IT-Abteilung ins Netz bringen, habe ich eine Plattform gebaut, die aus einer gepflegten Tabelle eine öffentliche Programmseite und fertige Anmeldeseiten macht.

AUFTRAGGEBER
Verein Innehalten Schweiz
PROJEKTDAUER
Januar bis Oktober 2026
ROLLE
Konzept, Entwicklung und Betrieb
ENTWICKLUNGSZEIT
24 aktive Entwicklungstage (Feb.–Aug.)
4
Städte gleichzeitig
~200
Termine in einer Woche
24 Tage
aktive Entwicklungszeit
~500 $
Lizenzkosten pro Jahr

Die Entscheidung: kleiner bauen statt grösser verkaufen

Am Anfang stand die Frage, was so eine Plattform überhaupt kostet. Was ein Verein dafür üblicherweise offeriert bekommt, lag weit weg vom Budget. Mein erstes Angebot war deshalb schon konsequent auf den Anwendungsfall geschnitten — nur das, was diese Woche wirklich braucht — und kam damit auf rund die Hälfte der günstigsten Vergleichsofferte, die der Verein von Schweizer Agenturen erhalten hatte.

Und es war immer noch zu gross. Geplant war eine Gesamtlösung mit eigenem Anbieter-Portal, eigener Anmeldung und eigener Datenbank; der Prototyp stand bereits zu rund 85 Prozent. Wir haben ihn verworfen — nicht wegen der Technik, sondern weil jedes eigene System jemanden braucht, der es erklärt, pflegt und dauerhaft bezahlt. Aus dem ohnehin schlanken Angebot ist am Ende noch einmal knapp ein Drittel herausgeflogen.

Was blieb, ist der Kern: Statt eigener Software kam, was die Teams ohnehin kennen — Google Forms und Sheets für die Redaktion, Luma für die Anmeldung, zum NGO-Tarif für rund 500 Dollar im Jahr. So günstig lässt sich das weder bauen noch betreiben. Meine Arbeit war, beide Welten sauber zu verbinden und genau das zu ergänzen, was dazwischen fehlt.

Die Woche lebt davon, dass viele kleine Anbieter:innen mitmachen — und wie unterschiedlich sie sind, sieht man erst im Programm: Morgenmeditation, Zen und Vipassana, Breathwork und Atempausen, Waldbaden und Gehmeditation, Feldenkrais, Qigong und Taijiquan, Liegekonzerte und Klangbäder, MBSR und Selbstmitgefühl, Tanz, achtsames Kochen, stilles Lesen. Jedes Standort-Team wirbt diese Menschen an, prüft die Angebote und trägt sie ein. Alles ehrenamtlich, neben dem Beruf, in vier Städten parallel.

Der erste Entwurf war eine Website, die jemand von Hand pflegt. Das skaliert nicht: Jede Terminverschiebung, jedes neue Angebot und jede Absage hätte über eine Person laufen müssen — und die Anmeldung wäre ein Mailpostfach gewesen.

Die Aufgabe war deshalb nicht „eine Website bauen“, sondern: ein Arbeitsablauf, den die Teams selbst bedienen können, und an dessen Ende ohne Zutun eine öffentliche Programmseite und eine funktionierende Anmeldung stehen.

1

Die Tabelle ist das Redaktionssystem

Jedes Standort-Team pflegt seine Angebote in einer Google-Tabelle — dem Werkzeug, das es ohnehin schon benutzt. Kein zusätzlicher Login, keine Schulung, kein neues Passwort. Wer eine Zeile ändert, ändert die Website.

TECHNISCH: Google Sheets API mit Service-Account; ein Cron-Job liest alle fünf Minuten alle vier Tabellen, erkennt neue Formular-Einreichungen über einen Inhalts-Hash und schreibt den Verarbeitungsstand in die Zeile zurück.

2

Freigabe pro Stadt, Vorschau inklusive

Ein neues Angebot ist zuerst nur für das Team sichtbar. Erst wenn jemand es auf „Freigegeben“ setzt, erscheint es öffentlich. Über einen Vorschau-Modus sieht das Team seinen kompletten Stand — auch das, was noch nicht freigegeben ist — und kann prüfen, bevor es live geht.

TECHNISCH: Eine Statusspalte je Zeile steuert Sichtbarkeit und Sync gleichzeitig; der Vorschau-Modus umgeht den Daten-Cache, damit Änderungen im Sheet sofort sichtbar sind.

Programmseite der Stadt Bern mit Angebotskacheln, jeweils mit Foto, Datum, Uhrzeit, Ort und Anbieter:in
Stadtseite Bern — jede Kachel entsteht aus einer Zeile der Team-Tabelle.
3

Anmeldeseiten entstehen von selbst

Zu jedem Termin entsteht automatisch eine Anmeldeseite mit Ort, Zeit, Bild, Teilnehmergrenze, Warteliste und Datenschutzhinweis. Verschiebt ein Team einen Termin, zieht die Anmeldeseite nach; wird ein Angebot abgelehnt, wird sie zurückgezogen. Niemand muss zweimal tippen.

TECHNISCH: Luma-API; ein Sync-Hash je Zeile erkennt echte Änderungen, ein Ort-Feld unterscheidet Präsenz- von Online-Angeboten, und die Identität eines Termins hängt an seiner Startzeit statt an der Angebotsnummer — sonst wären mehrtägige Angebote nur einmal erreichbar.

Detailseite eines Angebots mit Bildergalerie, Beschreibung und Anmeldebox
Detailseite mit Anmeldebox — Datenschutzhinweis und Kontakt stehen direkt daneben.
4

Drei Blicke auf dasselbe Programm

200 Termine in einer Woche sind unübersichtlich. Es gibt darum Kacheln zum Stöbern, eine kompakte Liste und einen Wochenplan, in dem man sofort sieht, was Dienstagmittag läuft — und ob sich zwei Wunschtermine überschneiden.

TECHNISCH: Eine Datenquelle, drei Renderings; die Ansicht steckt in der URL und bleibt damit teilbar.

Wochenplan-Ansicht: eine Kalendermatrix von Samstag bis Samstag mit allen Terminen nach Uhrzeit
Wochenplan — die ganze Woche auf einen Blick.
5

Rahmenprogramm sichtbar machen

Ein paar Angebote tragen die Woche: die Eröffnung, das Liegekonzert, das gemeinsame Innehalten am Sonntagabend. Die stehen jetzt in einem eigenen Block ganz oben statt irgendwo zwischen 200 Terminen.

TECHNISCH: Kuratierte Liste in einer Konfigurationsdatei im Code — das Redaktions-Sheet der Teams bleibt unangetastet.

6

Ein dünner Layer über Luma — damit niemand in Luma muss

Die Anmeldungen liegen bei Luma. Dort selbst nachzusehen hiesse: Konto anlegen, sich zurechtfinden, das eigene Angebot unter rund 200 Terminen heraussuchen. Stattdessen gibt es zwei Ansichten, die je genau eine Frage beantworten. Anbieter:innen bekommen einen persönlichen Link auf ihre eigenen Termine: wie viele Menschen angemeldet sind, wer auf der Warteliste steht, und einen Knopf, um allen zu schreiben. Das Innehalten-Team sieht dieselben Zahlen über alle Anbieter:innen hinweg, nach Stadt gruppiert. Kein Konto, kein Passwort — der Link genügt.

TECHNISCH: Capability-URL mit HMAC-Token und noindex für die Anbieter-Ansicht, Basic Auth für die Team-Übersicht; die Zahlen kommen aus einem regelmässig aufgebauten Snapshot statt aus rund 200 Einzelabfragen je Seitenaufruf, Teilnehmerlisten darin AES-256-GCM-verschlüsselt.

Private Anbieter-Ansicht mit Terminen, Anmeldezahlen, Teilnehmerliste und Bild zum Teilen
Die Ansicht der Anbieter:innen — hier mit erfundenen Beispieldaten.
Team-Übersicht mit Anmeldungen je Anbieter, nach Stadt gruppiert
Die Team-Übersicht über alle Städte — ebenfalls Beispieldaten.
7

Das Mühsamste ist nicht die Anmeldung, sondern das Bewerben

Fast alle Anbieter:innen machen ihr Marketing selbst, neben dem eigentlichen Beruf — und genau da bleibt Arbeit liegen. Wer setzt sich abends noch hin und gestaltet ein Bild? Die Plattform liefert es fertig: Hochformat für Instagram- und WhatsApp-Storys, Querformat für Newsletter und Facebook, dazu alle eigenen Termine als PDF zum Ausdrucken. Titel, Name, Datum und Uhrzeit stehen schon drauf, im Erscheinungsbild von Innehalten. So bewirbt jede:r das eigene Angebot und die gemeinsame Woche im selben Handgriff.

TECHNISCH: Beide Formate entstehen serverseitig je Termin aus einer Vorlage (Satori/ImageResponse); der QR-Code führt auf die eigene Detailseite und trägt Kampagnen-Parameter, sodass in der Auswertung sichtbar wird, welche Anbieter:innen Besucher:innen bringen.

Dasselbe Angebot als Hochformat für Storys und als Querformat für Newsletter, beide im Erscheinungsbild von Innehalten mit QR-Code
Beide Formate entstehen aus einer Vorlage — pro Termin in Sekunden.
8

Ein Foto mit 92 Megapixeln

Ein loses System aus Formular und Tabelle, bedient von rund hundert Menschen ohne technischen Hintergrund, bringt zwangsläufig Dinge hervor, die niemand vorhergesehen hat. Jemand lud ein Foto in Druckauflösung hoch — 11'220 × 8'268 Pixel. Auf einer Stadtseite summierten sich die Bilder dadurch auf 77 Megabyte, und auf dem Handy dauerte es über eine Minute, bis alles geladen war. Das ist niemandes Fehler: Wer ein schönes Bild hat, lädt das schöne Bild hoch. Die Aufgabe liegt beim System, nicht bei den Menschen.

TECHNISCH: Alle Bilder laufen über den Bild-Optimizer (AVIF/WebP, responsives srcset, lazy loading); dazu liegt der Tabellen-Abruf im Daten-Cache statt bei jedem Aufruf live — die erste Antwort kommt in 0,3 statt 0,8 Sekunden.

Wie solche Randfälle abgefangen werden
  • Bilder werden automatisch verkleinert und ins passende Format gebracht; was noch nicht sichtbar ist, wird gar nicht erst geladen. Beim ersten Aufruf auf dem Handy sind es jetzt 0,4 statt 77 Megabyte — sichtbar in unter zwei Sekunden statt nach über einer Minute.
  • Kopiert ein Team eine Tabellenzeile, um einen zweiten Termin anzulegen, wandert die Kennung der Anmeldeseite mit. Ohne Schutz überschreiben sich beide Termine gegenseitig; der Sync erkennt das und gibt der Kopie eine eigene Anmeldeseite.
  • Zeilen ohne gültiges Datum oder ohne Endzeit erscheinen nicht öffentlich und werden nicht synchronisiert — sie landen stattdessen auf einer Übersicht, auf der die Teams ihre Problemfälle selbst sehen und beheben können.
  • Gemessen wird vorher und nachher. Der erste Verdacht — schlecht gesetztes Caching — war falsch; die Cache-Einstellungen waren in Ordnung, es lag schlicht an der Dateigrösse.
9

Auswertung ohne Cookie-Banner

Der Verein sieht, welche Städte und welche Angebote gefragt sind — ohne Einwilligungsbanner und ohne dass Besucherdaten an Werbenetzwerke gehen.

TECHNISCH: Selbst gehostetes Plausible, cookiefrei; Kampagnen-Parameter an QR-Zielen und ausgehenden Links machen die Wege sichtbar, ohne Personen zu verfolgen.

0 Handgriffe
von der Tabellenzeile zur Anmeldeseite
4
Teams pflegen ihr Programm selbst
< 2 Sek.
bis eine Stadtseite mobil steht
cookiefrei
Reichweitenmessung

Jonas hat die komplette Event-Plattform für Innehalten gebaut, über die unsere ganze Achtsamkeitswoche an vier Standorten läuft. Was ich dabei besonders geschätzt habe: Er hat immer mitgedacht und nicht einfach abgearbeitet, was wir uns überlegt haben. Er hat von sich aus Verbesserungen gebracht und eigene Ideen eingebaut, auf die wir selber gar nicht gekommen wären. Die Zusammenarbeit war unkompliziert und trotzdem jederzeit verlässlich. Ich empfehle Jonas jederzeit und uneingeschränkt weiter.

Reto Vogel
Reto Vogel
Initiant und Präsident, Verein Innehalten Schweiz
  • Next.js 15 (App Router)
  • TypeScript
  • Tailwind CSS
  • Google Sheets API
  • Luma API
  • Vercel (Hosting, Cron, Blob)
  • Satori / OG Image
  • Plausible Analytics
  • Vitest
  • Playwright

Ein Verein oder KMU mit einem ähnlichen Vorhaben?

Viele Organisationen stecken an derselben Stelle: Die Arbeit ist da, die Menschen sind da — es fehlt das Stück Software, das beides verbindet, ohne dass jemand ein neues System lernen muss. Schreib mir kurz, worum es geht. Ich sage dir ehrlich, ob und wie sich das lohnt.

make@jonasoesterle.de
NEWSLETTER

Gelegentliche Updates zu Projekten und Tech-Insights.

VERFÜGBAR|Projekt für Q3 2026 buchen →_
>
🔧 Innehalten Schweiz • 🚀 Quittify • 🔧 Innehalten Automations • ⚙️ Holotropes Atmen — Doku|🔧 Innehalten Schweiz • 🚀 Quittify • 🔧 Innehalten Automations • ⚙️ Holotropes Atmen — Doku