--- name: Formeleon Rules description: Projekt-Richtlinien für Formeleon --- # Formeleon - Projekt Leitfaden (CONTINUE.md) Willkommen im **Formeleon** Projekt! Diese Datei dient als Leitfaden und Regelwerk für Entwickler und KI-Assistenten (wie Continue.dev), die an dieser Codebasis arbeiten. ## 1. Projektübersicht **Formeleon** ist ein mandantenfähiges Formular-Service-System (Multi-tenant Form Generator & Backend API). Es dient dazu, Formular-Submissions von externen Mandanten-Webseiten entgegenzunehmen, diese vor Bot-Spam zu schützen (via Google reCAPTCHA v3), die Daten isoliert nach Mandanten zu speichern und ein Admin-Dashboard zur Verwaltung bereitzustellen. **Kern-Technologien:** * **Backend:** Python 3, Flask * **Datenbank:** PostgreSQL/SQLite via Flask-SQLAlchemy, Migrationen via Flask-Migrate * **Authentifizierung:** Zitadel via OIDC (OAuth2) * **Frontend (Admin):** Mithril.js, Bootstrap (CSS) * **Frontend (Public):** Leichtgewichtiges JS-Embed-Snippet * **Infrastruktur:** Docker / Docker Compose **Architektur-Ansatz:** Das Backend ist entkoppelt und nutzt das Flask Blueprint-Muster. * `api`: Public Form API für das Entgegennehmen von Daten. * `admin`: Dashboard zur Verwaltung. * `auth`: OIDC/Zitadel Handler. --- ## 2. Erste Schritte (Getting Started) ### Voraussetzungen * Docker & Docker Compose (für die einfachste lokale Umgebung) * Python 3.x (für lokale Entwicklung ohne Docker) * Eine `.env` Datei (Basis: `docs/dev-guide.md` für Mocking/Dev-Variablen) ### Lokale Entwicklung & Ausführung Die Anwendung kann typischerweise über Docker Compose gestartet werden: ```bash docker-compose up --build ``` *Weitere Details zur Einrichtung der Umgebung und Dev-Mocks (z.B. Mock-reCAPTCHA-Scores oder Dev-Bypass für OIDC) finden sich in `docs/dev-guide.md`.* --- ## 3. Projektstruktur Der Code ist modular (Blueprint-Muster) strukturiert. **Es gibt keine monolithische `app.py` für die Routen-Logik.** * `app.py`: Anwendungs-Initialisierung & Blueprint-Registrierung. * `models.py`: SQLAlchemy Datenmodelle. * `routes/`: Flask Blueprints. * `api.py` (`@api_bp`): Public Submissions & Handshake. * `admin.py` (`@admin_bp`): Admin Panel & Config. * `auth.py` (`@auth_bp`): OIDC / Zitadel Handler. * `services/`: Ausgelagerte Geschäftslogik. * `recaptcha.py`: reCAPTCHA Validation & Mocking. * `exporter.py`: Stream-Export Logik (CSV/JSON/YAML). * `mailer.py`: E-Mail Versand. * `static/`: Frontend Assets (JS Snippets, Mithril.js Admin UI, CSS). * `docs/`: Umfangreiche Projektdokumentation. * `AGENTS.md`: Wichtige Instruktionen für KI-Assistenten. * `ARCHITEKTUR.md`: Detaillierte Systemarchitektur. --- ## 4. Entwicklungs-Workflow & Code-Standards **DIESE REGELN SIND VERBINDLICH FÜR ALLE ENTWICKLER UND KI-AGENTEN!** 1. **Sprache:** * Code (Variablen, Funktionen, Modulnamen, Code-Kommentare): **Englisch**. * Dokumentation (Markdown, umfangreiche Architektur-Dokus): **Deutsch**. 2. **Dateiköpfe:** Jede neu erstellte oder modifizierte Quelltext-Datei (`.py`, `.j2`, `.html`, `.js`, `.css`) **MUSS** den standardisierten Dateikopf tragen. * Autor: `Björn Runden ` * Siehe genaue Formate in `docs/coding-standards.md`. 3. **Dokumentationspflicht (PyDoc & Jinja2):** * Jede Klasse, Funktion und Methode in Python muss PyDoc-Docstrings erhalten. * Logikführende Jinja2-Templates (Schleifen, Makros, etc.) müssen kommentiert werden. 4. **Datenbank & ORM:** * Zugriff **NIEMALS** direkt über Roh-SQL. * **AUSSCHLIESSLICH** über Flask-SQLAlchemy arbeiten. * Schema-Änderungen über Flask-Migrate (`flask db migrate`) abbilden. 5. **Git & Branching:** * Entwicklung erfolgt ausschließlich auf dem Branch `main`. * Merges auf `stable` sind der CI/CD-Pipeline vorbehalten. 6. **Modularität:** * Neue Routen müssen im entsprechenden Blueprint (`routes/auth.py`, `routes/api.py`, `routes/admin.py`) registriert werden. --- ## 5. Schlüsselkonzepte & Datenmodell * **Multi-Tenancy (Mandantenfähigkeit):** Logische Trennung auf Datenbankebene über `tenant_id` (`FormConfig`, `Submission`, `User`). * **Public Keys:** Format `pk_live_`. Enthalten intern einen SHA-basierten Verweis auf die `tenant_id`. * **Flexible Payloads:** Formulardaten werden in einem JSON-Payload-Feld (`Submission.Payload`) gespeichert, um Schema-Migrationen bei Formularänderungen zu vermeiden. * **RBAC (Role-Based Access Control):** Lokale Rechteverwaltung in der DB (`admin`, `tenant_admin`, `user`, `viewer`) verknüpft über die E-Mail-Adresse. Zitadel (OIDC) liefert nur Identität (Kein Rollen-Mapping aus Token-Claims!). * **Bot-Schutz:** Google reCAPTCHA v3. Schwellenwert konfigurierbar. Unter Schwellenwert wird die Submission als `flagged_as_spam` gespeichert und ein HTTP 400 zurückgegeben. --- ## 6. Frontend Einbindung (Das Embed Snippet) Mandanten binden das Formular wie folgt ein: ```html
``` Das Snippet (`static/js/...`) nutzt die Fetch API für einen Handshake (prüft `Origin`), injiziert das HTML direkt ins DOM und fängt das Submit-Event ab, um ein reCAPTCHA Token zu holen und die Daten an `/api/v1/...` zu senden. --- ## 7. Referenzen & Weiterführende Dokumentation Bevor du spezifische Module bearbeitest, lies bitte die entsprechenden Detail-Dokumente: * **KI-Agenten Steuerzentrale:** `AGENTS.md` * **System-Architektur & DB:** `ARCHITEKTUR.md` * **Feinkonzept & Spezifikation:** `docs/feinkonzept.md` * **Header & PyDoc Standards:** `docs/coding-standards.md` * **Dev-Environment & Mocks:** `docs/dev-guide.md` * **CI/CD & Deployment:** `docs/deployment.md` * **Git-Workflow:** `docs/git-workflow.md` *(Hinweis: Für konkrete Troubleshooting-Fälle, lies bitte die jeweiligen Markdown-Dateien im `docs/` Verzeichnis, z.B. bezüglich der Entwicklungsumgebung in der `dev-guide.md`)*