Headless CMS-Backend für den Studiengang Medieninformatik an der TH Köln, gebaut mit Kirby CMS. Die Inhalte werden ausschließlich als JSON-API bereitgestellt — kein eigenes Frontend.
- PHP 8.1 – 8.4
- Composer
composer installcomposer devDer lokale Server läuft anschließend unter http://localhost:8000.
Beim ersten Start muss einmalig ein Admin-Account angelegt werden:
http://localhost:8000/panel
Alle Endpunkte sind öffentlich (kein Auth erforderlich) und liefern application/json.
| Endpunkt | Beschreibung |
|---|---|
GET /abschlussarbeiten |
Alle veröffentlichten Abschlussarbeiten, sortiert nach Datum (absteigend) |
GET /abschlussarbeiten/{slug} |
Einzelne Abschlussarbeit; 404 wenn unveröffentlicht |
Inhalte werden über das Kirby Panel gepflegt: /panel
Login via TH-Köln-Keycloak (SSO) — nur Adressen mit @th-koeln.de sind zugelassen. Lokale Passwort-Logins sind deaktiviert.
mi-kirby-backend/
├── composer.json Abhängigkeiten & Skripte
├── index.php Kirby-Bootstrap
├── .htaccess Routing & Zugriffsschutz
├── content/
│ └── abschlussarbeiten/
│ └── {slug}/
│ └── abschlussarbeit.txt Inhaltsdateien (Kirby-Format)
└── site/
├── blueprints/pages/
│ ├── abschlussarbeiten.yml Panel-Listenansicht
│ └── abschlussarbeit.yml Panel-Eingabemaske (4 Tabs)
├── config/
│ ├── config.php Kirby-Konfiguration & OAuth-Setup
│ ├── config.local.php Lokale Credentials (nicht committen)
│ ├── config.local.php.example Vorlage für lokale Credentials
│ └── helpers.php JSON-Serialisierung
└── templates/
├── abschlussarbeiten.php JSON-Array-Ausgabe
└── abschlussarbeit.php JSON-Einzeleintrag
Neue Abschlussarbeiten erhalten im Panel automatisch eine URL aus dem Titel. Veröffentlichung erfolgt über den Status-Schalter im Panel (Unveröffentlicht / Veröffentlicht).
-
site/config/config.local.phpaus der Vorlage anlegen:cp site/config/config.local.php.example site/config/config.local.php
-
Einen Keycloak-Client beim TH-Köln-Admin anlegen (Typ:
confidential). Die Redirect-URI lautet:https://{deine-domain}/oauth/login/thkoeln -
Die Felder in
config.local.phpbefüllen:Feld Beschreibung clientIdClient-ID aus dem Keycloak-Client clientSecretClient-Secret aus dem Keycloak-Client keycloakBaseBasis-URL des Keycloak-Servers, z. B. https://sso.th-koeln.derealmName des Keycloak-Realms redirectUriVollständige Redirect-URI inkl. Domain
| Feld | Typ | Beschreibung |
|---|---|---|
title |
string | Vollständiger Titel |
type |
enum | Praxisprojekt, Bachelorarbeit, Masterarbeit |
date |
date | Abgabedatum (YYYY-MM-DD) |
status |
enum | in-preparation, in-progress, in-evaluation, finished |
visibility |
enum | published, unpublished |
firstname |
string | Vorname |
lastname |
string | Nachname |
first_supervisor |
string | Erstprüfung |
second_supervisor |
string | Zweitprüfung |
| Feld | Typ | Beschreibung |
|---|---|---|
abstract |
string | Zusammenfassung (Markdown) |
keywords |
string[] | Schlagwörter |
awards |
string[] | Auszeichnungen, z. B. RTL-Preisgewinner 2025 |
thesis_url |
string | PDF der Arbeit (Pfad oder URL) |
teaser_image_url |
string | Teaserbild (Pfad oder URL) |
teaser_image_copyright |
string | Copyright-Angabe zum Teaserbild |
avatar_url |
string | Profilfoto (Pfad oder URL) |
repository_url |
uri | Repository-URL |
project_url |
uri | Projekt- oder Demo-URL |
slideshow |
boolean | Präsentation verfügbar |
final_presentation_youtube_id |
string | YouTube-Video-ID (11-stellig) |
research_diary |
boolean | Forschungstagebuch vorhanden |
related_folder |
string | Verknüpfter Ordner (z. B. Proposal) |
personal_website_url |
uri | Persönliche Website |
personal_social_media_urls |
uri[] | Social-Media-Profile |
cooperation_partner |
string | Name des Kooperationspartners |
cooperation_partner_url |
uri | Website des Kooperationspartners |
Internes Werkzeug der TH Köln – Medieninformatik. Keine öffentliche Lizenz.