Reinover

Vom Vertrag zur Rechnung.

Freelance · Solo

Gebaut mit

  • TypeScript
  • Next.js
  • tRPC
  • Drizzle ORM
  • PostgreSQL
  • Row Level Security
  • Redis
  • BullMQ
  • WebSockets
  • Clerk
  • Docker
Einsatzplaner von Reinover: ein Wochenraster mit Teams und Terminen

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.

Operations-Cockpit von Reinover: Umsatz, Aufträge des Tages, offene Posten und Live-Aktivität
Der Leitstand des Betriebs.

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.

Die mobile Außendienst-App auf drei Smartphones: heutige Einsätze, Einsatzdetails mit Aufgabenliste und Mitteilungen
Die mobile App fürs Team vor Ort — eine von drei Oberflächen aus einer Codebasis.

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.

Einsatzplaner mit Optimierungsvorschlägen, die Konflikte auflösen und die Auslastung erhöhen
Automatische Mitarbeiter-Vorschläge für einen Einsatz, bewertet nach Eignung und Auslastung
Der Planer schlägt Teams nach Eignung, Konflikten und Auslastung vor — Zuweisung mit einem Klick.

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.

Das Kundenportal im dunklen Design: ein abgeschlossener Einsatz mit Aufgaben, Notizen und Bewertung
Das Kundenportal im hellen Design: die Übersicht mit Terminen, offenem Betrag und letzter Rechnung
Dieselbe Oberfläche in Hell und Dunkel — aus einem themenfähigen Designsystem.