Neue Features>: zu viele um sie zu beschrieben :D

This commit is contained in:
2026-02-22 16:36:37 +00:00
parent 396055a705
commit 9e2716ba9c
19 changed files with 1269 additions and 249 deletions

376
AGENTS.md
View File

@@ -1,8 +1,17 @@
AGENTS.md
💍 Wedding App Agent Specification (Modern UI Edition)
💍 AGENTS.md
Wedding App Agent Specification (Hero + Secure Edition)
1. Project Overview
A private wedding web app for invited guests. (Link: https://www.svenja-dominic-hochzeit.de/)
A private wedding web application for invited guests.
Production URL:
https://www.svenja-dominic-hochzeit.de/
The entire platform is protected by login.
There is no public content accessible without authentication.
Core goals:
@@ -12,115 +21,190 @@ RSVP + plus-one selection
photo upload + shared gallery
modern information pages (schedule, hotels, taxi)
modern information pages (schedule, hotels, taxi, location)
embedded Google Maps location
embedded Google Maps (2-click solution)
external link to the official location website
external link to official location website
button to switch the language of the webapp from german to english
language switch (German / English)
visually polished, modern design (mobile-first)
visually polished, modern, mobile-first UI
2. Access Model (IMPORTANT)
The entire site must be login-protected.
2. Tech Stack (Required)
No publicly accessible landing page.
Python 3.12
Flow:
Flask
User visits root URL → redirected to login
Gunicorn
User enters:
uv (dependency management)
event password
SQLite
guest name
Docker + Docker Compose
On success:
Frontend approach:
guest stored in database (if new)
Use server-rendered templates (Jinja2)
session created
Use modern CSS (prefer one of the following):
redirect to internal start page
Tailwind CSS via CDN (fastest)
All internal routes must require authentication.
or a small handcrafted CSS design system (preferred if no CDN)
3. Internal Start Page Structure (Hero + Dashboard Concept)
No heavy JS frameworks required.
After login, the start page consists of two sections:
3. UI / UX Design Requirements (IMPORTANT)
The site must look modern, elegant, and “wedding-like”:
Visual Style
Clean typography (Google Fonts allowed)
Soft spacing, rounded cards, subtle shadows
Consistent color palette (e.g., beige / cream / dark green / gold accents)
Smooth hover states and transitions
High-quality hero section on landing page
Layout
Mobile-first (works on phones)
Clear navigation
Dashboard cards for features (RSVP, Upload, Info)
Minimal clutter, lots of whitespace
Pages
Must implement at least:
Landing / Login page (with hero design)
Dashboard
RSVP page (or dashboard section)
Upload page
Gallery page
Info pages (schedule, hotels, taxi, location)
4. Location Page Requirements
Section 1 Hero Area (Emotional Welcome)
Must include:
Embedded Google Maps iframe
large background image
Address (configurable)
headline:
“Willkommen zu unserer Hochzeit”
A prominent button:
wedding date
“Zur Location-Webseite” (or “Visit Location Website”)
short personal text
open in new tab (target="_blank" rel="noopener")
smooth scroll transition to dashboard
The location website URL must be configurable via environment variable:
Purpose:
Make the platform feel emotional and elegant, not like a business app.
LOCATION_WEBSITE_URL
Section 2 Dashboard Area
Optionally also:
Below the hero section:
Card-based grid layout containing:
RSVP
Upload
Gallery
Ablauf (Schedule)
Hotels
Taxi
Location
The dashboard must:
use rounded cards
soft shadows
consistent spacing
mobile-first responsive layout
4. Tech Stack (Required)
Python 3.12
Flask
Gunicorn
uv (dependency management)
SQLite
Docker + Docker Compose
Frontend:
Jinja2 templates
Tailwind via CDN OR lightweight custom CSS
No heavy JS frameworks
Minimal JavaScript only where needed
5. UI / UX Requirements (Very Important)
Visual style:
elegant and modern
wedding-like aesthetic
soft spacing
rounded elements
subtle shadows
warm color palette (cream / beige / dark green / gold accents)
clean typography (Google Fonts allowed)
Mobile-first design required.
Minimal clutter.
Smooth hover transitions.
6. Language Switch (DE / EN)
Must include:
language toggle in header
switch stored in session
no automatic geo-detection
static text controlled via simple translation dictionary or structure
7. Location Page Requirements
Must include:
Location name (env variable)
Address (env variable)
Google Maps embed (iframe)
Prominent button:
“Zur Location-Webseite” / “Visit Location Website”
target="_blank"
rel="noopener"
Environment variables:
LOCATION_NAME
LOCATION_ADDRESS
LOCATION_WEBSITE_URL
GOOGLE_MAPS_EMBED_URL
5. Authentication Requirements
Google Maps Privacy Requirement
Registration/login requires event password
Google Maps must NOT load automatically.
Implement a 2-click solution:
Show placeholder container
Display privacy notice:
“Zur Anzeige der Karte werden Daten an Google übertragen.”
Only after user click → load iframe dynamically
No global cookie banner required.
8. Authentication Requirements
Event password stored in environment variable:
@@ -130,13 +214,19 @@ Guest provides:
event password
guest name
name
Use Flask sessions
Use Flask sessions.
Keep it simple (no email verification, no roles)
No:
6. Database Schema (Minimum)
email verification
role system
admin panel
9. Database Schema
Table: guests
@@ -160,92 +250,142 @@ uploaded_by (guest id)
uploaded_at (timestamp)
SQLite is sufficient.
SQLite only.
7. RSVP Logic
10. RSVP Logic
In the UI:
Guest selects:
guest selects attending Yes/No
attending Yes / No
plus_one option only shown if attending Yes
plus_one only visible if attending Yes
persist to database
Persist to database.
8. Upload Requirements
11. Upload Requirements
allowed types: jpg, jpeg, png
Allowed types:
configurable max upload size
jpg
jpeg
png
Must:
validate file extension
validate MIME type
limit file size (configurable)
sanitize filenames
prevent path traversal
store in /uploads
store files in /uploads
store upload reference in DB
store reference in database
9. Gallery Requirements
Optional but recommended:
all guests can view uploaded images
remove EXIF metadata before saving
show thumbnails in a responsive grid
12. Gallery Requirements
click opens a larger view (simple modal or dedicated page)
All guests see all images
10. Dependency Management Rules
Responsive grid layout
Use uv
Click → larger view (simple modal)
Dependencies defined in pyproject.toml
No download tracking
Commit uv.lock
13. Legal Pages (Important)
No requirements.txt
Must implement:
In Docker:
/datenschutz
/impressum
Both:
accessible without login (legal requirement)
linked in footer
always visible in footer
No cookie banner required because:
only technically necessary session cookies used
Google Maps loaded via 2-click solution
14. Dependency Management Rules
Use uv.
Dependencies defined in:
pyproject.toml
Commit:
uv.lock
No requirements.txt allowed.
Docker must run:
uv sync --frozen --no-dev
11. Docker Requirements
15. Docker Requirements
Dockerfile must:
Base image:
Base: python:3.12-slim
python:3.12-slim
Install uv
Must:
Copy pyproject.toml + uv.lock first (cache-friendly)
install uv
Run uv sync --frozen --no-dev
copy pyproject.toml + uv.lock first (cache optimization)
Start with:
run uv sync --frozen --no-dev
expose port 8000
start with:
uv run gunicorn -b 0.0.0.0:8000 app:app
Uploads + SQLite database must be persistent via volumes.
Uploads + SQLite database must use persistent volumes.
12. Non-Goals (Do NOT implement)
16. Non-Goals (Strict)
Do NOT implement:
Admin dashboards
Email systems
Payments
Payment systems
OAuth
External cloud storage
Cloud storage
Microservices
13. Design Philosophy
Tracking tools
Aesthetic first, but not overengineered
Analytics tools
Simple, maintainable code
17. Design Philosophy
Minimal dependencies
Good UX on mobile
Aesthetic first, but not overengineered.
Simple, maintainable code.
Minimal dependencies.
Excellent mobile UX.
Elegant, but not playful.