Files
Wedding-Website/README.md
2026-02-19 18:13:00 +00:00

4.2 KiB
Raw Blame History

💍 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