# Journal 2026-08-25

## Buchung: CSS/JS 404 auf Produktion

**Was:** Asset-Pfade in Mobi-Buchungsschritten und Landingpage von hardcodiert `/css/…`, `/js/…` auf Symfony `asset()` umgestellt.

**Warum:** App liegt unter `/ksbdueren/public/`; absolute Pfade ohne Prefix lieferten 404 (`dp-smartsolutions.de/css/…` statt `…/ksbdueren/public/css/…`).

**Dateien:** `_mobi_booking_assets.html.twig`, `step1`–`step5`, `public_mobi_landing.html.twig`

**Deploy:** Templates deployen, `php bin/console cache:clear`, Browser-Cache leeren.

---

## Fit wie ein Fisch — Spezifikation

**Was:** Konzept-Dokument `docs/FIT_WIE_EIN_FISCH.md` aus Word-Anforderungen erstellt.

**Inhalt:** Funktionale Anforderungen (Landing, Anmeldemaske, Warteliste, Admin), Ziel-Ordnerstruktur

(`fisch_booking/`, `admin/fisch/`, Entities `Fisch*`), Routen-Vorschlag, Datenmodell-Skizze, Phasenplan.

**Quelle:** `docs/Anforderungen Buchungstool Fit wie ein Fisch.docx`

---

## Phase 1 Demo-Seiten (2026-08-25)

**Was:** Gerüst mit Demo-Inhalten — öffentlich und Admin.

**Routen:**
- `/booking/fisch`, `/anmeldung`, `/danke`, `/warteliste`
- `/admin/fisch` (Dashboard, Kurse, Teilnehmer, Warteliste, Sammelanmeldung, Elternbriefe, E-Mail-Templates)

**Dateien:** `src/Controller/Fisch/`, `src/Controller/Admin/Fisch/`, `templates/fisch_booking/`, `templates/admin/fisch/`, `public/css/fisch-*.css`

**Hinweis:** Demo-Banner; Formular-Speicherung folgt.

---

## Phase 2 Datenbank (2026-08-25)

**Was:** Entities, Repositories, Services, Migration `Version20260825120000`.

**Tabellen:** `fisch_pool`, `fisch_season_config`, `fisch_course`, `fisch_registration`, `fisch_waitlist_entry`, `fisch_bulk_registration`, `fisch_bulk_registration_link`.

**Seed:** 6 Pools, 96 Kurse (2026), 4 Anmeldungen, 2 Wartelisten-Einträge. Admin-Listen aus DB.

**Deploy:** `php bin/console doctrine:migrations:migrate`, `cache:clear`.

**Offen:** E-Mail-Versand, Kapazität bearbeiten, Excel-Export, Admin-Wartelisten-Aktionen.

---

## Phase 3 Anmeldung speichern (2026-08-25)

**Was:** Öffentliche Anmeldung und Warteliste funktionsfähig.

**API:**
- `GET /booking/fisch/api/slots?birthDate=&poolId=` — freie Zeiten nach Alter
- `POST /booking/fisch/api/register` — Anmeldung mit pessimistischem Lock
- `POST /booking/fisch/api/waitlist` — Wartelisten-Eintrag

**Dateien:** `FischRegistrationService.php`, `FischBookingApiController.php`,

`public/js/fisch-booking-form.js`, `public/js/fisch-waitlist-form.js`, `register.html.twig`, `waitlist.html.twig`

**Schutz:** Keine Überbuchung (Lock + Kapazitätsprüfung), Altersgruppe automatisch, Duplikat-Check pro Kind/Kurs.

---

## Admin-Menü Altsystem (2026-08-25)

**Was:** Menüstruktur des bisherigen `fit-fisch.de`-Portals dokumentiert (Screenshot).

**Abschnitte:** Dashboard · Kursverwaltung (Kurse, TN, Warteliste, Übungsleiter, Anwesenheit) · Standortverwaltung · Einstellungen (Grundeinstellungen, Benutzer, Mandanten, Textvorlagen, Sammelanmeldung).

**Datei:** `docs/FIT_WIE_EIN_FISCH.md` → Abschnitt „Admin-Menü — Altes System“ inkl. Abgleich mit neuem Stand.

---

## Altsystem-Screenshots (2026-08-25, Nachzug)

**Was:** Detaillierte UI-Referenz aus neun Admin-Screens (Kurse, Teilnehmer, Warteliste, Übungsleiter, Standorte, Standortkategorien, Grundeinstellungen, Textvorlagen, Sammelanmeldung).

**Dokumentiert in:** `docs/FIT_WIE_EIN_FISCH.md` → „Admin-Oberflächen — Altes System“ (Spalten, Aktionen, Key-Value-Settings, Altersgruppen A/B).

**Auffälligkeiten:** Rurbad 1+2 im Alt vs. ein Rurbad neu; Standortkategorien = Altersgruppen; Anwesenheitsspalte bei Teilnehmern; Warteliste mit „Erinnerung“-Button.

---

## Admin-Sidebar + Grundeinstellungen (2026-08-25)

**Was:** Fisch-Admin-Menü an Altsystem-Struktur angeglichen; Grundeinstellungen-Seite mit Key-Value-Tabelle (Speichern pro Zeile).

**Warum:** Nutzerwunsch nach Screenshots — Sidebar wie Alt, Saison/Anmeldephase/Alter im Admin pflegbar.

**Dateien:** `templates/admin_base.html.twig`, `FischSettingsController`, `FischPoolController`, `FischLocationCategoryController`, `FischPlaceholderController`, `FischSeasonConfig` (+ Migration `Version20260825230000`), `FischSeasonService`, `FischAgeGroupResolver`, Templates unter `templates/admin/fisch/`.

**Route:** `/admin/fisch/grundeinstellungen`

**Keys:** `portal_open_from/to`, `alter_von/bis`, `alter_gruppe_a_bis`, `kurs_start/ende`, `anmeldung_aktiv`, `startseite_begruessung`.

---

## Öffentliche Seite — Layout fit-fisch.de (2026-08-25)

**Was:** Startseite und Unterseiten an [fit-fisch.de](https://fit-fisch.de/) angeglichen: Hero-Bild, Partner-Logos, Footer, Begrüßungstext.

**Assets:** `public/images/fisch/` (hero, logo-ksb, clients/stadt-dueren, clients/aok) — von fit-fisch.de übernommen.

**Templates:** `_layout.html.twig`, `_landing_content_default.html.twig`, `_fisch_partners.html.twig`, `_fisch_footer.html.twig`; alle Buchungsseiten erben Layout.

**Text:** Standard-Inhalt im Template; Override über Admin → Grundeinstellungen → `startseite_begruessung` (HTML möglich).

---

## Startseite Admin + UI-Modernisierung (2026-08-25)

**Was:** Eigene Admin-Seite `/admin/fisch/startseite` (Intro, Zusatzblock, Sponsoren, Kursplätze-Zahl); Landing mit Stats, Info-Karten, Standort-Chips, Accordion, CTA.

**Migration:** `Version20260825240000` (`landing_intro`, `landing_stat_spots`, `landing_sponsors`).
