ai_overview.md 3.1 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.
  • 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
    • api/upload-preview.php
    • api/delete-upload.php
  • Admin:
    • admin/login.php
    • admin/auth.php
    • admin/index.php
    • admin/application.php
    • admin/download.php
    • admin/download-zip.php
    • admin/export-pdf.php
    • admin/delete.php
    • admin/test-mail.php
    • admin/cleanup.php
  • Kernlogik (src/-Ordner strukturiert nach Domains):
    • src/autoload.php (Basis Autoloader)
    • src/app/bootstrap.php (App-Initialisierung und Konfiguration)
    • src/storage/jsonstore.php
    • src/storage/fileuploadstore.php
    • src/storage/filesystem.php
    • src/form/validator.php
    • src/security/csrf.php
    • src/security/ratelimiter.php
    • src/mail/mailer.php (HTML-Mails + PDF-Anhänge)
    • src/mail/mimemailbuilder.php (MIME-Mails via nativer mail()-Funktion)
    • src/mail/pdfgenerator.php (FPDF, Antrags- und Anlagen-PDFs)
    • src/mail/submissionformatter.php (Formulardaten für Mail/PDF aufbereiten)
  • Bibliotheken:
    • lib/fpdf/ — FPDF 1.86, einzelne Klasse + Schrift-Metriken

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.local.php + optional pro Feld im Schema
  • Admin-Session/Login: config/app.local.php + admin/auth.php
  • Mailtexte/Empfänger: config/mail.local.php + src/mail/mailer.php
  • Retention-Tage: config/app.local.php + Cron admin/cleanup.php
  • Rate-Limit-Parameter: config/app.local.php -> rate_limit (Details: docs/rate_limiting.md)
  • Disclaimer-Startseite: config/app.local.php -> disclaimer + index.php
  • Versionskontrollierte Config-Vorlagen: config/app.sample.php, config/mail.sample.php
  • Lokale Runtime-Configs (nicht versioniert): config/app.local.php, config/mail.local.php

Harte Regeln

  • Ein Antrag pro E-Mail (Submission blockiert weitere Anträge).
  • Drafts: 14 Tage, Submissions: 90 Tage.
  • Keine DB-Pflicht, Flatfile-only.
  • Keine Paketmanager (kein Composer). Bibliotheken liegen direkt in lib/.