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)
bin/cleanup.php tägliche Bereinigung
docs/ AI-first Dokumentation
.htaccess Apache-Schutz und Routing
Setup (Shared Hosting)
- Projekt hochladen.
- Apache verwenden (mit aktiviertem
mod_rewrite) und AllowOverride All für das Projekt sicherstellen.
- Document Root auf das Projekt-Root setzen.
- Schreibrechte für
storage/ sicherstellen (mind. Webserver-User).
- Konfiguration anpassen:
config/app.php (Admin-Passwort, Kontakt, Disclaimer, Retention, Rate Limit)
config/mail.php (Absender, Empfänger)
- Admin-Hash setzen:
- Auf Server:
php -r "echo password_hash('DEIN-PASSWORT', PASSWORD_DEFAULT), PHP_EOL;"
- Ergebnis in
config/app.php -> admin.password_hash
- Danach
password_plain_fallback entfernen/leer setzen.
- Cronjob einrichten (täglich):
php /pfad/zum/projekt/bin/cleanup.php
Sicherheitshinweise
- CSRF aktiv auf POST-Endpunkten.
- Honeypot + Rate Limit aktiv.
- Uploads werden auf Typ, MIME und Größe geprüft.
- Interne Ordner (
config, src, storage, bin, docs) 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/FORM_SCHEMA.md
docs/OPERATIONS.md
docs/RATE_LIMITING.md