CARLA: Ein Hochschul-Archiv als vernetztes System

Stell dir vor, du hältst ein über hundert Jahre altes Matrikelbuch der Hochschule für Musik und Theater Leipzig in der Hand – handgeschrieben, vergilbt, voller Namen junger Menschen. Jeder Eintrag ist Kulturgeschichte. Und praktisch unauffindbar, solange er nur auf Papier existiert.

CARLA macht aus diesen Büchern eine durchsuchbare, vernetzte und weltweit zugängliche Forschungsdatenbank – von der Datenmodellierung bis zum laufenden Server.

Architektur: drei Schichten, klare Verantwortlichkeiten

CARLA ist bewusst als Drei-Schichten-System aufgebaut, jede Schicht mit einer Aufgabe und einem eigenen Repository:

  • Vue/Vite Frontend -> Node/TypeScript API (tsoa) -> Tryton Domänenmodell (Python)
  • Präsentation
  • Vermittlung, typisiert
  • Daten, Logik, Historie

Diese Trennung ist kein Selbstzweck: Sie hält das Domänenmodell frei von Transport-Belangen, macht die API unabhängig testbar und erlaubt es, das Frontend auszuliefern, ohne Backend-Internas preiszugeben.

Die Datenschicht: das eigentliche Herz

Der Kern ist ein Tryton-Modul mit einem umfangreichen relationalen Domänenmodell: hmt.person, hmt.document, hmt.inscription, hmt.directorium, hmt.staff, hmt.subject, hmt.course, hmt.geo_reference – verbunden über explizite Assoziationstabellen.

Vollständige Historisierung aller Änderungen auf den Kernmodellen.

Jede Änderung an einem Datensatz bleibt nachvollziehbar – für Quellenkritik und Provenienz im Archivkontext nicht verhandelbar.

Linked-Data-Anbindung auf Forschungsniveau:

  • automatische Verknüpfung über die GND (Gemeinsame Normdatei)
  • Verknüpfung zu Wikipedia
  • Verweise auf Wikisource-Transkriptionen
  • Anbindung RISM und Lobid
  • Verknüpfung mit Digitalisaten auf sachsen.digital.
  • Wikisource-Übersetzungen der Digitalisate
  • GND-Wizard zum interaktiven Abgleich lokaler Datensätze gegen die Normdaten mit Dublettenerkennung

Die API-Schicht: typisiert und selbstdokumentierend

Die Vermittlungsschicht ist eine REST-API in Node.js / TypeScript auf Basis von tsoa.
Der Gewinn: Controller-Definitionen erzeugen automatisch OpenAPI-Spec und Express-Routen, Swagger-UI unter /api/docs ist immer synchron zum Code.

Die Präsentationsschicht: schnell, vernetzt, auffindbar

Das Frontend ist eine Vue 3 / Vite-Anwendung mit:

  • Leaflet-Karte mit Marker-Clustering zur Herkunftsvisualisierung,
  • Chart.js-Auswertungen zu Fächern, Zeiträumen und Geografie,
  • vue-i18n für Mehrsprachigkeit,
  • SSG/Prerendering und generierten Bot-Pages plus Sitemap für SEO – wichtig, damit historische Personen über Suchmaschinen auffindbar werden,
  • Matomo (datenschutzkonformes Analytics) und Glitchtip fürs Error-Monitoring.

Staging und Production laufen als getrennte Podman-Pods: jeweils Nginx, PostgreSQL, Tryton, API (und Mailpit auf Staging). Gebaut wird das ganze als GitLab CI/CD mit branch-basiertem idempotenten Deployment.

Warum das den Unterschied macht

Dinge, die meine Arbeitsweise prägen:

  • Architektur vor Feature-Akkumulation.
    Saubere Schichten, explizite Verknüpfungsmodelle, Konfiguration über Environment – Entscheidungen, die in zwei Jahren noch tragen.
  • Die ganze Wertschöpfungskette in einer Hand. Datenmodell, API, Frontend, Containerisierung und CI/CD – ohne an jeder Schnittstelle die Verantwortung abzugeben.
  • Echte Daten, echte Ansprüche.
    Historisierung, Normdaten-Integration und Quellen-Verlinkung sind kein Beiwerk, sondern die fachliche Substanz.

CARLA verbindet ein Stück Leipziger Kulturgeschichte mit dem globalen Wissensnetz – als System, das nicht nur demonstriert, sondern produktiv läuft, gepflegt wird und Bestand hat.

https://carla.hmt-leipzig.de/