
Technikverleih — Ausleihplattform
Inventar, Reservierungen, Rechnungen und Ausleihhistorie für Theatertechnik und Equipment
Screenshots


Über das Projekt
Der Landesverband der Freien Theater in Sachsen e.V. (LFTS) verleiht seinen Mitgliedern und weiteren Kulturakteur:innen Audio-, Video- und Präsentationstechnik. Dafür habe ich eine Ausleihplattform gebaut: öffentlicher Technikpool, Mitglieder-Login, Reservierungen, Ausleihverwaltung, Rechnungen und ein Admin-Backend für die Geschäftsstelle.
Der LFTS wollte seinen Mitgliedern und der freien Kulturszene in Sachsen einen einfachen, transparenten Zugang zu Technik ermöglichen. Die Anschaffung des Equipments wurde im Rahmen des Förderprogramms »KulturErhalt — Investieren in die Kultur« des Sächsischen Staatsministeriums für Wissenschaft, Kultur und Tourismus gefördert. Technisch ist das Projekt ein Turborepo-Monorepo mit drei Anwendungen. Das öffentliche Website-Frontend (Vite + React 19, i18next, OIDC via Keycloak) zeigt das Inventar, nimmt Reservierungen an und listet eigene Ausleihen. Das Backend (ElysiaJS + Bun, Prisma ORM + PostgreSQL) stellt eine REST-API mit OpenAPI-Spezifikation und Eden Treaty für typsichere Clients bereit. Im Admin-Interface (Next.js) verwaltet die Geschäftsstelle Gegenstände, Ausleihen und Nutzer und erzeugt Rechnungen und Leihverträge. Das Datenmodell läuft über das Graviola-Framework: `@graviola/json-schema2prisma` übersetzt die JSON-Schema-Definitionen in Prisma-Schemas, `@graviola/prisma-db-impl` liefert die generische Datenbankschicht. Rechnungen und Leihverträge werden mit Typst und Pug als PDF erzeugt. Die Authentifizierung läuft über einen selbst gehosteten Keycloak mit eigenem LFTS-Theme.
Kernfunktionen
Öffentlicher Technikpool mit Suche und Filterung
Alle Geräte mit Kategorien (Audio-, Video-, Präsentationstechnik, Elektrozubehör), Verfügbarkeit, Mengen und Detailansicht.
Reservierungs- und Ausleihsystem
Mitglieder reservieren Geräte, sehen ihre Ausleihen und verwalten Rückgaben. Feiertage und Schließzeiten werden berücksichtigt.
Rechnungen und Leihverträge
PDF-Erzeugung mit Typst (Rechnungen) und Pug-Templates (Leihverträge). Die Preisberechnung liegt in einem eigenen `price-utils`-Paket.
Admin-Backend für die Geschäftsstelle
Inventar, Ausleihen, Nutzer, Reservierungen und Statistiken in einem Next.js-Admin-Interface.
Keycloak mit eigenem Theme
OIDC-Login über einen selbst gehosteten Keycloak mit LFTS-Theme (FreeMarker + CSS). Rollenbasierte Zugriffsrechte.
E-Mail-Benachrichtigungen
Mails bei Reservierungsbestätigung, Ausleihbeginn und Rückgabefälligkeit via nodemailer.
JSON-Schema-getriebenes Datenmodell
Das `data-model`-Paket definiert alle Entitäten als JSON Schema. Graviola-Tools erzeugen daraus Prisma-Schema und Datenbankschicht.
Mehrsprachigkeit
i18next im Website-Frontend mit Deutsch und Englisch. Übersetzungen werden per CLI verwaltet und typsicher generiert.
Technologien
frontend
backend
datenbank
admin
auth
dokumente
infrastruktur
Architektur
Turborepo-Monorepo mit drei Anwendungen und mehreren gemeinsamen Paketen. JSON Schema ist die einzige Quelle der Wahrheit für alle Entitätsdefinitionen.
apps
- • apps/website — öffentliche Ausleihplattform (Vite + React 19 + OIDC)
- • apps/backend — REST-API (ElysiaJS + Bun + Prisma + PostgreSQL)
- • apps/admin — Geschäftsstellen-Backend (Next.js)
packages
- • packages/data-model — JSON-Schema-Definitionen aller Entitäten
- • packages/price-utils — Preisberechnungslogik mit Tests
- • packages/holidays — Feiertagskalender Sachsen
- • packages/keycloak-lvfts-theme — eigenes Login-Theme
Was wir dabei gelernt haben
- –Erst im Produktivbetrieb sind in den Graviola-Paketen für Prisma Lücken aufgefallen, die in Beispielanwendungen nie sichtbar geworden wären. Einiges davon ist direkt ins Framework zurückgeflossen.
- –Der aufwändigste Teil war nicht die Technik, sondern die Regeln: Preisstaffeln, Feiertage, Schließzeiten, Ausnahmen. Diese Logik in eigene, getestete Pakete zu ziehen hat sich gelohnt.
- –Für die Geschäftsstelle wurde das System mit den serverseitig erzeugten Rechnungen und Leihverträgen nützlich, nicht mit der Oberfläche.
- –Typsichere API-Clients sparen viel Abstimmung zwischen Frontend und Backend. Dafür muss das Typmodell im Backend stimmen – Ungenauigkeiten dort tauchen an vielen Stellen gleichzeitig auf.
- –Keycloak selbst zu betreiben ist überschaubar. Das eigene Login-Theme kostet bei jedem Upgrade Zeit; dem Verband war ein vertrautes Erscheinungsbild für die Mitglieder das wert.
- –Ein zentral als JSON Schema geführtes Datenmodell zahlt sich bei Änderungen aus. Fehler im Modell landen dafür bis in der Datenbank.
- –Mehrsprachigkeit von Anfang an einzuplanen war günstiger, als sie nachzurüsten – auch wenn im Verband fast nur auf Deutsch gearbeitet wird.
- –Eine kleine, gut erreichbare Nutzergruppe gibt direktes Feedback. Falsche Annahmen fallen dadurch schnell auf.
Anwendungsfälle
- •Ausleihverwaltung für Kulturorganisationen mit eigenem Gerätepool
- •Reservierungssystem für zeitlich begrenzte Ressourcen
- •Digitale Rechnungsstellung und Leihvertragsmanagement
- •Mitglieder-Self-Service-Portale mit Rollenverwaltung
- •Inventarsysteme mit Nutzungshistorie und Zustandsdokumentation
Besonderheiten
Schema-First-Datenmodell
JSON Schema definiert alle Entitäten zentral; Graviola-Tools erzeugen daraus Prisma-Schema und Datenbankschicht. Modelländerungen passieren an einer Stelle statt an vier.
Graviola im Produktivbetrieb
Das Ausleihsystem ist ein Produktiveinsatz des Graviola-Frameworks. json-schema2prisma und prisma-db-impl werden hier unter realen Bedingungen benutzt und weiterentwickelt.
Dokumente aus dem System
Rechnungen (Typst) und Leihverträge (Pug) entstehen serverseitig als PDF – ohne händisch gepflegte Vorlagen und ohne externen Dienst.
Eigenes Keycloak-Theme
Das Login sieht aus wie der Verband, nicht wie Keycloak. Kleiner Eingriff, aber die Mitglieder wissen, wo sie sich anmelden.
Projektpartner
Landesverband der Freien Theater in Sachsen e.V. (LFTS)
Auftraggeber, Betreiber und erster Nutzer der Plattform
2025–heute
Förderung
Die Anschaffung des Equipments für den Technikpool wurde im Rahmen des Förderprogramms »KulturErhalt — Investieren in die Kultur« gefördert.
Fördermittelgeber im Rahmen des KulturErhalt-Programms.
Einsatz
- •Live-Instanz unter technikverleih.freie-theater-sachsen.de
