Cosmetra
SaaS-Plattform für Beauty- und Dienstleistungsstudios mit einem selbstgebauten CalDAV-Server für echte Kalendersynchronisation.
Cosmetra bündelt Terminverwaltung, Kunden, Personal, Buchung und Finanzen für Beauty- und Dienstleistungsstudios in einer Plattform. Das Kernversprechen: Studios sehen ihre Termine dort, wo sie ohnehin schon arbeiten — im Apple-Kalender, in Thunderbird, in DAVx&sup5; — ohne ein separates Sync-Tool.
Dafür betreibt Cosmetra einen eigenen CalDAV-Server statt einer fertigen Bibliothek wie sabre/dav: schlank auf den tatsächlichen Funktionsumfang zugeschnitten und direkt in das eigene Workspace-/Token-Modell integriert.
Galerie
Case Study
Ausgangslage
Beauty- und Dienstleistungsstudios verwalten Termine oft in mehreren, unverbundenen Systemen. Cosmetra ist als Zwei-Personen-Vorhaben (Felix Schattenberg als technischer Umsetzer, ein Mitgründer für Produkt/Go-to-Market) angetreten, das mit echter Kalendersynchronisation zu lösen, statt Studios auf ein weiteres Insel-Tool zu verpflichten.
Herausforderung
Der CalDAV-Server ist mit rund 450 Zeilen eigenem Controller-Code kein triviales Anhängsel: Basic-Auth über eigene Tokens, PROPFIND/REPORT/GET/PUT/DELETE-Handling und manuelles iCal-Parsing und -Serialisieren (Zeilen-Unfolding, Property-/Parameter-Parsing, TZID-Handling, Escaping). Die PUT-Methode war ursprünglich ein Stub, der jeden eingehenden iCal-Payload ignorierte — externe Kalender-Clients konnten damit keine Termine anlegen oder ändern. Der Fix brauchte einen echten VEVENT-Parser, der DTSTART/DTEND/SUMMARY/DESCRIPTION/STATUS extrahiert und per updateOrCreate auf Termine mappt — und machte customer_id in der Termine-Tabelle nullable, weil CalDAV-Clients Termine ohne bekannten Kunden anlegen können.
Vorgehen
Laravel 13 mit PHP 8.5, Vue 3.5 und TypeScript über Inertia.js, shadcn/ui (reka-ui) auf Tailwind CSS 4, Pest für Tests. Mehrmandantenfähigkeit als Shared-Schema-Multi-Tenancy: jede Kernentität trägt eine workspace_id statt eine Datenbank pro Kunde zu betreiben. Auslieferung über GitHub Actions und Deployer mit atomarem Symlink-Swap, Queue-Worker über systemd.
Entscheidungen
Schlanker, workspace- und staff-gescopter Funktionsumfang statt einer vollwertigen DAV-ACL-Bibliothek, direkt ins eigene Token-Modell integriert.
Ein CaldavToken-Modell mit Workspace- oder Staff-Scope, pro Mitarbeiter einzeln einschränkbar.
Auth- und Deployment-Komplexität für ein Zwei-Gründer-MVP bewusst niedrig gehalten statt Backend und Frontend als getrennte Deployments zu betreiben.
Vermeidet spätere Table-Rewrites; jede Kernentität trägt eine workspace_id statt Schema-per-Tenant.
Rundungsfehler bei Beträgen ausgeschlossen; Zeit wird intern konsequent in UTC gehalten und erst zur Anzeige in die Workspace-Zeitzone konvertiert.
Eigenanteil
Technische Gesamtumsetzung: Datenmodell, CalDAV-Server, Vue/TypeScript-Frontend, Buchungs- und Finanzlogik, Deployment. Ein zweiter Mitgründer ist als Super-Admin registriert und für Produktseite verantwortlich — primär, aber nicht ausschließlich Einzelarbeit.
Ergebnisse