Reinover
Vom Vertrag zur Rechnung.
Freelance · Solo
Gebaut mit
- TypeScript
- Next.js
- tRPC
- Drizzle ORM
- PostgreSQL
- Row Level Security
- Redis
- BullMQ
- WebSockets
- Clerk
- Docker

Der Auftrag
Reinover führt einen Reinigungsbetrieb in Hannover — Verträge, wiederkehrende Einsätze, Außendienst und monatliche Rechnungen. Der Alltag solcher Betriebe verteilt sich sonst über Tabellen, Zettel und Telefonate. Reinover bündelt ihn in einem System, vom Vertrag bis zur bezahlten Rechnung. Allein entworfen und gebaut — und im echten Einsatz.

Eine Plattform, drei Apps
Die Plattform
Drei Oberflächen für drei Rollen, aus einer Codebasis: ein Backoffice für die Disposition, ein Self-Service-Portal für Kundinnen und Kunden und eine mobile App für die Reinigungskräfte vor Ort. Alle teilen sich eine typsichere API, ein Datenmodell und ein Designsystem — eine Identität, kein Wildwuchs.

Vom Auftrag zur Rechnung
Ablauf
Verträge erzeugen wiederkehrende Einsätze automatisch. Ein Planer schlägt Teams nach Qualifikation, Konflikten und Auslastung vor; die Reinigungskräfte schließen ihre Einsätze in der App ab. Daraus entstehen Rechnungen — automatisch generiert, als PDF gerendert und über ihren ganzen Lebenslauf bis ‚bezahlt‘ verfolgt.


Was läuft, wenn niemand hinschaut
Hintergrund
Rechnungen entstehen nicht im Web-Request. Ein eigener Dienst plant die Läufe, eine Warteschlange auf Redis arbeitet sie ab, und ein Renderer baut daraus PDFs. Weil in diesem Teil Geld im Spiel ist, hängt hinter jedem Schritt ein Idempotenz-Schlüssel: Ein wiederholter Lauf erzeugt keine zweite Rechnung, ein doppelt zugestellter Zahlungsversuch keine zweite Buchung. Rechnungsnummern kommen aus einer eigenen Sequenz je Mandant, damit weder Lücken noch Dopplungen entstehen. Mahnungen und wiederkehrende Abrechnungen laufen über denselben Weg.
Enterprise-Niveau, von einer Hand
Technik
Unter der Oberfläche arbeitet die Plattform wie Unternehmenssoftware. Eine tRPC-API mit gemeinsamen Zod-Schemata macht den API-Vertrag zum Typsystem, sodass die drei Apps nicht auseinanderdriften können. Die Geschäftslogik liegt in einer eigenen Domänenschicht, entkoppelt von der Oberfläche und für sich testbar. Der Datenzugriff läuft über Drizzle, die Anmeldung über Clerk. Die Mandanten bleiben getrennt durch Postgres-Row-Level-Security, einen Org-Kontext pro Anfrage und durchgängig org-gebundene Abfragen, dazu ein zweistufiges Rechtemodell nach dem Prinzip ‚alles verboten, außer ausdrücklich erlaubt‘. Live-Aktualisierungen laufen über einen Outbox-gestützten, idempotenten Event-Relay nach LISTEN/NOTIFY und WebSockets.
In vier Sprachen, inklusive Arabisch
Reichweite
Die ganze Plattform spricht vier Sprachen — Deutsch, Englisch, Arabisch und Türkisch — mit vollständiger Rechts-nach-links-Darstellung für Arabisch und hellem wie dunklem Design auf jedem Bildschirm. Aus einem Designsystem, ohne Sonderwege je App. Für eine Belegschaft, die so vielfältig ist wie die Stadt.

