Readme und Agend.md gefüllt

This commit is contained in:
2026-02-19 18:13:00 +00:00
parent 3dc872f064
commit 879ebd53b0
2 changed files with 539 additions and 44 deletions

298
README.md
View File

@@ -0,0 +1,298 @@
💍 Wedding App Svenja & Dominic
Eine private, moderne Hochzeits-Webanwendung für eingeladene Gäste.
Die Anwendung ermöglicht eine geschützte Registrierung, RSVP-Verwaltung, Foto-Uploads sowie den Zugriff auf alle relevanten Informationen rund um die Hochzeit in einem eleganten, mobilen Design.
🎯 Projektziel
Die Wedding-App soll:
unter dem Link https://www.svenja-dominic-hochzeit.de/ zum login führen.
Gästen einen passwortgeschützten Zugang bieten
Zu- und Absagen verwalten (inkl. Begleitperson)
eine gemeinsame Fotogalerie bereitstellen
Informationen zur Location, Hotels in der Nähe, Taxi und Ablauf anzeigen
eine eingebettete Google Maps Karte enthalten
einen prominenten Link zur offiziellen Website der Hochzeitslocation anzeigen
Einen Switch auf Englisch haben.
Die Seite soll modern, ästhetisch und mobil optimiert sein.
🎨 Design-Anforderung (WICHTIG)
Die Anwendung soll:
modern, elegant und hochwertig wirken
mobil-first entwickelt werden
viel Weißraum verwenden
runde Karten mit sanften Schatten nutzen
eine konsistente Farbpalette haben (z. B. Beige, Creme, Dunkelgrün, Gold-Akzente)
klare Typografie verwenden (z. B. Google Fonts)
dezente Hover-Animationen besitzen
Seitenstruktur
Mindestens folgende Seiten müssen umgesetzt werden:
Login / Landing Page (mit Hero-Section)
Dashboard
RSVP-Bereich
Upload-Seite
Galerie
Informationsseiten:
Ablauf
Hotels
Taxi
Location
🗺 Location-Seite Anforderungen
Die Location-Seite muss enthalten:
Google Maps Embed (iframe)
Name der Location
Adresse
Einen deutlich sichtbaren Button:
„Zur Location-Webseite“
Dieser Button muss:
in neuem Tab öffnen (target="_blank")
rel="noopener" verwenden
URL aus Environment Variable beziehen
Konfigurierbare Variablen:
LOCATION_NAME
LOCATION_ADDRESS
LOCATION_WEBSITE_URL
GOOGLE_MAPS_EMBED_URL
🔐 Login & Registrierung
Zugriff nur mit Event-Passwort
Passwort wird als Environment Variable gespeichert:
EVENT_PASSWORD
Registrierung:
Gast gibt Event-Passwort ein
Gast gibt seinen Namen ein
Nach erfolgreicher Prüfung → Weiterleitung zum Dashboard
Session-basiert (Flask Sessions)
Keine E-Mail-Verifikation
Kein Rollen-System
Keine öffentliche Registrierung
📝 RSVP-System
Im Dashboard kann der Gast auswählen:
Ich komme
Ich komme nicht
Ich bringe eine Begleitperson mit (nur wenn attending = true)
Daten werden persistent in der Datenbank gespeichert.
📸 Foto-Upload
Erlaubte Formate: jpg, jpeg, png
Dateigröße begrenzen (konfigurierbar)
Speicherung in /uploads
Dateinamen müssen sanitisiert werden
Path Traversal verhindern
Upload wird in Datenbank referenziert
🖼 Galerie
Alle Gäste sehen alle Bilder
Responsive Grid
Optional: einfache Modal-Ansicht bei Klick
🧱 Datenbank (SQLite)
Tabelle: guests
id (Primary Key)
name (String, required)
attending (Boolean, nullable)
plus_one (Boolean, default False)
created_at (Timestamp)
Tabelle: uploads
id (Primary Key)
filename
uploaded_by (Guest ID)
uploaded_at (Timestamp)
🧪 Entwicklungsphasen
Phase 1 MVP
Authentifizierung
Datenbank
RSVP
Phase 2
Upload
Galerie
Phase 3
Informationsseiten
Location + Google Maps
Externer Location-Link
Phase 4
UI-Feinschliff
Sicherheitsverbesserungen
🧰 Technischer Stack
Python 3.12
Flask
Gunicorn
uv (Dependency Management)
SQLite
Docker
Docker Compose
Optional: Nginx + Certbot (Production)
📦 Dependency Management
Keine requirements.txt
Nutzung von uv
Abhängigkeiten in pyproject.toml
uv.lock wird committed
Docker nutzt:
uv sync --frozen --no-dev
🐳 Docker Anforderungen
Base Image: python:3.12-slim
uv im Container installiert
Gunicorn als Produktionsserver
Persistente Volumes für:
uploads
SQLite-Datenbank
Startbefehl:
uv run gunicorn -b 0.0.0.0:8000 app:app
🔒 Sicherheitsanforderungen
Event-Passwort darf niemals im Frontend erscheinen
Upload-Dateitypen validieren
Dateigröße limitieren
HTTPS verpflichtend im Produktivbetrieb
Keine unnötigen Features implementieren
❌ Nicht-Ziele
Kein Admin-Panel
Keine E-Mail-Funktion
Kein Payment
Kein OAuth
Keine Cloud-Storage-Integration
Keine Microservices
💡 Design-Philosophie
Schön vor komplex
Einfach vor überengineered
Wartbar vor clever
Modern, aber nicht verspielt
Mobil optimiert