Zempto
Eigenes Produkt: Projektmanagement mit CRM, Zeiterfassung, Kundenportal und E-Rechnungen (ZUGFeRD/XRechnung), ergänzt um ein Gerät zur Zeiterfassung am Arbeitsplatz.
- Rolle
- Konzeption, Architektur und Entwicklung
- Zeitraum
- 2025 – heute
- Status
- In Entwicklung
- Kontext
- Eigenes Produkt, nebenberuflich
- Laravel
- PHP
- MySQL
- Redis
- Horizon
- Tailwind CSS
- Docker
- ESP32
- C++
- Webhooks
Überblick
Zempto ist eine Plattform für kleine Teams: Kunden, Projekte, Aufgaben, Zeiterfassung mit Freigabe-Workflow, Rechnungen mit eingebettetem ZUGFeRD und ein Kundenportal. Dazu kommt ein Gerät zur Zeiterfassung am Arbeitsplatz, das Buchungen über eine signierte Webhook-API an die Plattform meldet.
Mein Beitrag
Zempto ist mein eigenes Projekt. Alle Entscheidungen und der gesamte Code stammen von mir.
- Konzeption, Datenmodell und Architektur
- Backend, Oberfläche, Tests und CI-Pipeline
- Firmware für das ESP32-Gerät und die signierte Webhook-Schnittstelle
- Betrieb auf einem eigenen Server mit Docker
Das Problem
In kleinen Teams werden Zeiten oft erfasst, aber nicht freigegeben, nicht abgerechnet und gegenüber Kunden nicht transparent gemacht. Gleichzeitig ist der Griff zur Software beim Start einer Aufgabe eine Hürde. Die Folge: Zeiten werden am Ende der Woche geschätzt.
Die Lösung
Ein Laravel-System mit klaren Zuständen: Buchung, eingereicht, freigegeben, abgerechnet. Rechnungen entstehen aus freigegebenen Zeiten, sind lückenlos nummeriert und nach der Finalisierung unveränderlich. Ein kleines Gerät mit Taster und Display startet und stoppt Buchungen physisch.
- Rollen- und Rechtesystem mit Projektmitgliedschaften
- Audit-Log mit Feld-Diffs für alle Kernobjekte
- Queues über Redis und Horizon für Mails, PDFs und Benachrichtigungen
- HMAC-signierte Webhooks in beide Richtungen
Architektur
Das Gerät (ESP32) spricht per HTTPS mit der API. Buchungen landen in MySQL, Folgeaktionen laufen über Redis-Queues. Das Kundenportal ist Teil des Monolithen und hat einen eigenen Guard.
Technische Entscheidungen
Monolith mit Queues statt Microservices. Eine Person, ein Deployment. Asynchrone Arbeit über Horizon reicht vollkommen.
Rechnungen unveränderlich. Korrekturen nur per Storno. Das ist unbequem, aber fachlich und rechtlich der saubere Weg.
Eigene Hardware. Ein Taster ist schneller als ein Browser-Tab. Firmware in C++ auf dem ESP32, weil die Plattform verbreitet und günstig ist.
Ergebnis
- Durchgängiger Ablauf von der Buchung bis zur Rechnung mit eingebettetem ZUGFeRD
- Gerät und Plattform kommunizieren über signierte Webhooks
- CI mit Pint, Larastan, Tests und Dependency-Audit