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)
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
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.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Redaktionssystem ist entschieden: PocketBase (schlanke Variante von Option C — eine Binary, SQLite eingebaut, Admin-UI + Login dabei; kein Directus). Siehe #6/#7.
Betrieb / Infrastruktur
eb-pocketbasenebeneb-blazor, Projekteb-stack)compose.yaml(prod-Basis) +compose.dev.yaml(lokal) +compose.test.yaml(Tests)docker compose … up --buildpages,posts,events,faqs(jepublic-Flag, Zugriffsregeln lesen offen / schreiben nur eingeloggt)Blazor-Anbindung
PocketBaseClient+Elternbeirat.Contracts(record-Typen, Zeitzonen-FixWallClock)PocketBaseFixture,-p eb-test-stack)AddHttpClient<PocketBaseClient>,PocketBase:BaseUrllesen), Web→PocketBase-Projektreferenzembed-Blöcke) und generierte Navigation auspages/beitraege→/posts,/termine→/events,/termine.ics→/events.ics;RouteSmokeTestsnachziehenContent/-Reader (Markdown/YAML) entfernen, sobald die App aus PocketBase liestDoku
docs/redaktion.md(PocketBase-Pflege) +docs/entwicklung.md(Stack lokal + Tests)docs/architektur.md(AE-2/AE-3 „keine DB") +CLAUDE.mdmit der PocketBase-Richtung versöhnendocs/recht.mdverweist noch aufimpressum.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.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):eb-blazor+eb-pocketbase, Projekteb-stack) mit prod-/dev-/test-Overlay; lokale Dev-Umgebung per Rider-Run-Config; getippterPocketBaseClient+Elternbeirat.Contracts; Integrationstests, die PocketBase aus den echten Compose-Dateien hochfahren (-p eb-test-stack, laufen parallel zum Dev-Stack); Dokudocs/redaktion.md+docs/entwicklung.md.AddHttpClient<PocketBaseClient>,PocketBase:BaseUrl), generischer Seiten-Renderer + generierte Navigation, Routen auf Englisch, alteContent/-Reader entfernen, End-to-End-Stack-Test.docs/architektur.md/CLAUDE.md(AE-2/AE-3 „keine DB") mit der PocketBase-Richtung versöhnen.