# Feuerwehr digitaler Antrag (MVP) Schlankes PHP-Flatfile-Projekt für einen digitalen Mitgliedsantrag (deutsches Frontend). ## Allgemeine Prinzipien - Mobile first und responsive für alle Seiten/Ansichten. - Frontend-Sprache ist Deutsch. - Architektur so einfach wie möglich bei vollständiger Zielerfüllung. ## Features - Mehrstufiges Wizard-Formular - Autosave + Wiederaufnahme über E-Mail - E-Mail wird im Browser gemerkt und Formular beim Besuch automatisch geladen - Genau ein Antrag pro E-Mail - Uploads mit Original-Dateiname in kurzem Zufallsordner - Upload-Felder bieten „Datei auswählen“ und „Foto aufnehmen“ (mobil optimiert) - Dateiupload startet sofort nach Auswahl (kein separater Speicher-Button nötig) - Selbstbedienung: Gespeicherte Daten zur aktuellen E-Mail löschen und neu starten - Abschlussversand per E-Mail (intern + Antragsteller) - Admin-Bereich mit Login, Detailansicht, Download einzeln/ZIP, Löschen - Cleanup per Cron (Entwürfe 14 Tage, Submissions 90 Tage) - Erste Seite zeigt einen konfigurierbaren Disclaimer vor Formularstart ## Projektstruktur - `index.php` im Projekt-Root als Einstiegspunkt - `api/`, `admin/`, `assets/` direkt im Projekt-Root - `src/` PHP-Logik - `config/` Konfiguration - `storage/` Datenablage (JSON, Uploads, Logs) - `admin/cleanup.php` tägliche Bereinigung - `docs/` AI-first Dokumentation - `.htaccess` Apache-Schutz und Routing ## Setup (Shared Hosting) Detaillierte Schritt-für-Schritt-Anleitung: `docs/initial_setup.md` 1. Projekt hochladen. 2. Apache verwenden (mit aktiviertem `mod_rewrite`) und `AllowOverride All` für das Projekt sicherstellen. 3. Document Root auf das Projekt-Root setzen. 4. Schreibrechte für `storage/` sicherstellen (mind. Webserver-User). 5. Lokale Konfiguration aus Samples erzeugen: - `cp config/app.sample.php config/app.local.php` - `cp config/mail.sample.php config/mail.local.php` 6. Konfiguration anpassen: - `config/app.local.php` (Admin-Credentials, Kontakt, Disclaimer, Retention) - `config/mail.local.php` (Absender, Empfänger) 7. Admin-Credential setzen: - Auf Server: `php -r "echo password_hash('DEIN-PASSWORT', PASSWORD_DEFAULT), PHP_EOL;"` - Ergebnis in `config/app.local.php -> admin.credentials[*].password_hash` - Benutzername in `config/app.local.php -> admin.credentials[*].username` 8. Cronjob einrichten (täglich): - `php /pfad/zum/projekt/admin/cleanup.php` Hinweis: - `config/app.php` und `config/mail.php` sind stabile Loader-Dateien im Repo. - `config/*.sample.php` sind versionskontrollierte Vorlagen. - `config/*.local.php` sind lokale Produktivdateien und werden per `.gitignore` nicht versioniert. ## Sicherheitshinweise - CSRF aktiv auf POST-Endpunkten. - Honeypot (Feld `website`) aktiv. - Uploads werden auf Typ, MIME und Größe geprüft. - Interne Ordner (`config`, `src`, `storage`, `docs`, `lib`) werden per `.htaccess` blockiert. ## Wichtige URLs - Formular: `/` - Admin Login: `/admin/login.php` - Admin Übersicht: `/admin/index.php` ## Entwicklung Lokale PHP-Laufzeit wird benötigt (CLI + Webserver), um Syntaxchecks/Tests auszuführen. ## Weiterführende Doku - `docs/ai_overview.md` - `docs/initial_setup.md` - `docs/form_schema.md` - `docs/operations.md` - `docs/auth_integration.md`