AI_OVERVIEW.md 3.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.
  • 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 (PHPMailer-basiert, HTML-Mails + PDF-Anhänge)
    • src/Mail/PdfGenerator.php (TCPDF/FPDI, erzeugt Antrags- und Anlagen-PDFs)
    • src/Mail/SubmissionFormatter.php (Formatierung der Formulardaten für Mail/PDF)

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 + src/Admin/Auth.php
  • Mailtexte/Empfänger: config/mail.local.php + src/Mail/Mailer.php
  • PDF-Erzeugung/Layout: src/Mail/PdfGenerator.php
  • Retention-Tage: config/app.local.php + Cron bin/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

Abhängigkeiten (Composer)

  • phpmailer/phpmailer — HTML-Mails mit MIME-Multipart und PDF-Anhängen.
  • tecnickcom/tcpdf — PDF-Erzeugung (Formulardaten, Bild-Einbettung).
  • setasign/fpdi — Import bestehender PDF-Seiten in kombinierte Anlagen-PDFs.
  • vendor/ wird committed (kein Composer-CLI auf Shared Hosting).

Harte Regeln

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