# AI Overview ## Ziel Digitaler Mitgliedsantrag für Feuerwehrverein mit Flatfile-Speicherung und Admin-Backend. ## General Principles - Mobile first und responsive über alle Frontend-Seiten. - Upload UX mit zwei Pfaden: Datei auswählen oder Foto aufnehmen. - Startfluss beginnt mit einer Disclaimer-Seite (Text aus Konfiguration). ## Architekturkarte - Frontend Wizard: `index.php` + `assets/js/form.js` - API: - `api/load-draft.php` - `api/save-draft.php` - `api/submit.php` - `api/reset.php` - Admin: - `admin/login.php` - `admin/index.php` - `admin/application.php` - `admin/download.php` - `admin/download-zip.php` - `admin/delete.php` - Kernlogik: - `src/Storage/JsonStore.php` - `src/Storage/FileUploadStore.php` - `src/Form/Validator.php` - `src/Security/Csrf.php` - `src/Security/RateLimiter.php` - `src/Mail/Mailer.php` ## Datenfluss 1. Nutzer gibt E-Mail ein. 2. `load-draft` prüft zuerst Submission (Unique-Constraint), dann Draft. 3. Wizard speichert regelmäßig per `save-draft`; Uploads werden zusätzlich sofort nach Dateiauswahl hochgeladen. 4. Uploads werden in `storage/uploads/{application_key}/{field}/{rand8}/{original_filename}` geschrieben. 5. `submit` führt atomaren Lock + Validierung + Submission + Mailversand aus. 6. Admin liest Submission-JSONs und bietet Downloads. ## Apache-Hinweis - Deploy auf Apache mit `mod_rewrite`. - `AllowOverride All` muss aktiv sein, damit die Root-`.htaccess` greift. - Sensitive Ordner werden via `.htaccess` blockiert. ## Änderungs-Guide - Neue Formularfelder: `config/form_schema.php` - Pflichtregeln ändern: `config/form_schema.php` (`required` / `required_if`) - Upload-Typen/Limits: `config/app.php` + optional pro Feld im Schema - Admin-Session/Login: `config/app.php` + `src/Admin/Auth.php` - Mailtexte/Empfänger: `config/mail.php` + `src/Mail/Mailer.php` - Retention-Tage: `config/app.php` + Cron `bin/cleanup.php` - Rate-Limit-Parameter: `config/app.php -> rate_limit` (Details: `docs/RATE_LIMITING.md`) - Disclaimer-Startseite: `config/app.php -> disclaimer` + `index.php` - Versionskontrollierte Config-Vorlagen: `config/app.sample.php`, `config/mail.sample.php` - Lokale Runtime-Configs (nicht versioniert): `config/app.php`, `config/mail.php` ## Harte Regeln - Ein Antrag pro E-Mail (Submission blockiert weitere Anträge). - Drafts: 14 Tage, Submissions: 90 Tage. - Keine DB-Pflicht, Flatfile-only.