Umsetzung des gewaehlten Redaktionssystems (B oder C) #8

Closed
opened 2026-09-22 13:17:47 +02:00 by Tom · 1 comment
Owner

Redaktionssystem ist entschieden: PocketBase (schlanke Variante von Option C — eine Binary, SQLite eingebaut, Admin-UI + Login dabei; kein Directus). Siehe #6/#7.

Betrieb / Infrastruktur

  • PocketBase als zweiter Container im selben Compose-Stack (eb-pocketbase neben eb-blazor, Projekt eb-stack)
  • Drei-Datei-Overlay: compose.yaml (prod-Basis) + compose.dev.yaml (lokal) + compose.test.yaml (Tests)
  • Lokale Dev-Umgebung: Rider-Run-Config „DevEnvironment" + docker compose … up --build
  • Content-Collections in PocketBase modelliert: pages, posts, events, faqs (je public-Flag, Zugriffsregeln lesen offen / schreiben nur eingeloggt)

Blazor-Anbindung

  • Getippter PocketBaseClient + Elternbeirat.Contracts (record-Typen, Zeitzonen-Fix WallClock)
  • Integrationstests fahren PocketBase aus den echten Compose-Dateien hoch (PocketBaseFixture, -p eb-test-stack)
  • DI-Registrierung in der Web-App (AddHttpClient<PocketBaseClient>, PocketBase:BaseUrl lesen), Web→PocketBase-Projektreferenz
  • Generischer Seiten-Renderer (body + embed-Blöcke) und generierte Navigation aus pages
  • Routen auf Englisch: /beitraege→/posts, /termine→/events, /termine.ics→/events.ics; RouteSmokeTests nachziehen
  • Alte Content/-Reader (Markdown/YAML) entfernen, sobald die App aus PocketBase liest
  • End-to-End-Stack-Test: App rendert echten PocketBase-Inhalt

Doku

  • docs/redaktion.md (PocketBase-Pflege) + docs/entwicklung.md (Stack lokal + Tests)
  • docs/architektur.md (AE-2/AE-3 „keine DB") + CLAUDE.md mit der PocketBase-Richtung versöhnen
  • Rechtstext-Slugs englisch nachziehen (docs/recht.md verweist noch auf impressum.md/datenschutz.md)

Gehoert zu #6.


Erledigt auf Branch feature/pocketbase-consume (PR offen): Die App liest ihren gesamten Inhalt pro Request aus PocketBase (generischer Seiten-Renderer, generierte Navigation, Embeds), die Datei-Schicht ist entfernt, die Doku ist mit der PocketBase-Richtung versöhnt, und die Rechtstext-Slugs sind englisch. End-to-End verifiziert (App rendert echten PocketBase-Inhalt, 31 Tests grün). Zusätzlich: Dev-Volumes werden beim ersten Start aus einer geteilten Schema-Datei automatisch mit Beispielinhalten befüllt, die sich Migration und Test-Fixture teilen.

Redaktionssystem ist entschieden: **PocketBase** (schlanke Variante von Option C — eine Binary, SQLite eingebaut, Admin-UI + Login dabei; kein Directus). Siehe #6/#7. **Betrieb / Infrastruktur** - [x] PocketBase als zweiter Container im selben Compose-Stack (`eb-pocketbase` neben `eb-blazor`, Projekt `eb-stack`) - [x] Drei-Datei-Overlay: `compose.yaml` (prod-Basis) + `compose.dev.yaml` (lokal) + `compose.test.yaml` (Tests) - [x] Lokale Dev-Umgebung: Rider-Run-Config „DevEnvironment" + `docker compose … up --build` - [x] Content-Collections in PocketBase modelliert: `pages`, `posts`, `events`, `faqs` (je `public`-Flag, Zugriffsregeln lesen offen / schreiben nur eingeloggt) **Blazor-Anbindung** - [x] Getippter `PocketBaseClient` + `Elternbeirat.Contracts` (record-Typen, Zeitzonen-Fix `WallClock`) - [x] Integrationstests fahren PocketBase aus den echten Compose-Dateien hoch (`PocketBaseFixture`, `-p eb-test-stack`) - [x] DI-Registrierung in der Web-App (`AddHttpClient<PocketBaseClient>`, `PocketBase:BaseUrl` lesen), Web→PocketBase-Projektreferenz - [x] Generischer Seiten-Renderer (body + `embed`-Blöcke) und generierte Navigation aus `pages` - [x] Routen auf Englisch: `/beitraege`→`/posts`, `/termine`→`/events`, `/termine.ics`→`/events.ics`; `RouteSmokeTests` nachziehen - [x] Alte `Content/`-Reader (Markdown/YAML) entfernen, sobald die App aus PocketBase liest - [x] End-to-End-Stack-Test: App rendert echten PocketBase-Inhalt **Doku** - [x] `docs/redaktion.md` (PocketBase-Pflege) + `docs/entwicklung.md` (Stack lokal + Tests) - [x] `docs/architektur.md` (AE-2/AE-3 „keine DB") + `CLAUDE.md` mit der PocketBase-Richtung versöhnen - [x] Rechtstext-Slugs englisch nachziehen (`docs/recht.md` verweist noch auf `impressum.md`/`datenschutz.md`) Gehoert zu #6. --- **Erledigt** auf Branch `feature/pocketbase-consume` (PR offen): Die App liest ihren gesamten Inhalt pro Request aus PocketBase (generischer Seiten-Renderer, generierte Navigation, Embeds), die Datei-Schicht ist entfernt, die Doku ist mit der PocketBase-Richtung versöhnt, und die Rechtstext-Slugs sind englisch. End-to-End verifiziert (App rendert echten PocketBase-Inhalt, 31 Tests grün). Zusätzlich: Dev-Volumes werden beim ersten Start aus einer geteilten Schema-Datei automatisch mit Beispielinhalten befüllt, die sich Migration und Test-Fixture teilen.
Tom added this to the Elternbeirat-Website milestone 2026-09-22 13:17:47 +02:00
Author
Owner

Kontext-Update: Der Titel spricht noch von „B oder C" — entschieden wurde PocketBase, eine schlanke Ausprägung von Option C (kein Directus). Der Issue-Body ist entsprechend auf eine PocketBase-Checkliste umgestellt.

Heutiger Stand (Branch feature/pocketbase-client):

  • Erledigt: Zwei-Container-Compose-Stack (eb-blazor + eb-pocketbase, Projekt eb-stack) mit prod-/dev-/test-Overlay; lokale Dev-Umgebung per Rider-Run-Config; getippter PocketBaseClient + Elternbeirat.Contracts; Integrationstests, die PocketBase aus den echten Compose-Dateien hochfahren (-p eb-test-stack, laufen parallel zum Dev-Stack); Doku docs/redaktion.md + docs/entwicklung.md.
  • Als Nächstes: App-Anbindung — DI-Registrierung (AddHttpClient<PocketBaseClient>, PocketBase:BaseUrl), generischer Seiten-Renderer + generierte Navigation, Routen auf Englisch, alte Content/-Reader entfernen, End-to-End-Stack-Test.
  • Danach nachzuziehen: docs/architektur.md/CLAUDE.md (AE-2/AE-3 „keine DB") mit der PocketBase-Richtung versöhnen.
Kontext-Update: Der Titel spricht noch von „B oder C" — entschieden wurde **PocketBase**, eine schlanke Ausprägung von Option C (kein Directus). Der Issue-Body ist entsprechend auf eine PocketBase-Checkliste umgestellt. Heutiger Stand (Branch `feature/pocketbase-client`): - **Erledigt:** Zwei-Container-Compose-Stack (`eb-blazor` + `eb-pocketbase`, Projekt `eb-stack`) mit prod-/dev-/test-Overlay; lokale Dev-Umgebung per Rider-Run-Config; getippter `PocketBaseClient` + `Elternbeirat.Contracts`; Integrationstests, die PocketBase aus den echten Compose-Dateien hochfahren (`-p eb-test-stack`, laufen parallel zum Dev-Stack); Doku `docs/redaktion.md` + `docs/entwicklung.md`. - **Als Nächstes:** App-Anbindung — DI-Registrierung (`AddHttpClient<PocketBaseClient>`, `PocketBase:BaseUrl`), generischer Seiten-Renderer + generierte Navigation, Routen auf Englisch, alte `Content/`-Reader entfernen, End-to-End-Stack-Test. - **Danach nachzuziehen:** `docs/architektur.md`/`CLAUDE.md` (AE-2/AE-3 „keine DB") mit der PocketBase-Richtung versöhnen.
Tom closed this issue 2026-09-23 16:02:46 +02:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Tom/Elternbeirat#8