AI_OVERVIEW.md 2.0 KB

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.

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.
  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)

Harte Regeln

  • Ein Antrag pro E-Mail (Submission blockiert weitere Anträge).
  • Drafts: 14 Tage, Submissions: 90 Tage.
  • Keine DB-Pflicht, Flatfile-only.