251 lines
3.6 KiB
Markdown
251 lines
3.6 KiB
Markdown
AGENTS.md
|
||
💍 Wedding App – Agent Specification (Modern UI Edition)
|
||
1. Project Overview
|
||
|
||
A private wedding web app for invited guests. (Link: https://www.svenja-dominic-hochzeit.de/)
|
||
|
||
Core goals:
|
||
|
||
password-protected access (event password)
|
||
|
||
RSVP + plus-one selection
|
||
|
||
photo upload + shared gallery
|
||
|
||
modern information pages (schedule, hotels, taxi)
|
||
|
||
embedded Google Maps location
|
||
|
||
external link to the official location website
|
||
|
||
button to switch the language of the webapp from german to english
|
||
|
||
visually polished, modern design (mobile-first)
|
||
|
||
|
||
|
||
2. Tech Stack (Required)
|
||
|
||
Python 3.12
|
||
|
||
Flask
|
||
|
||
Gunicorn
|
||
|
||
uv (dependency management)
|
||
|
||
SQLite
|
||
|
||
Docker + Docker Compose
|
||
|
||
Frontend approach:
|
||
|
||
Use server-rendered templates (Jinja2)
|
||
|
||
Use modern CSS (prefer one of the following):
|
||
|
||
Tailwind CSS via CDN (fastest)
|
||
|
||
or a small handcrafted CSS design system (preferred if no CDN)
|
||
|
||
No heavy JS frameworks required.
|
||
|
||
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
|
||
|
||
Must include:
|
||
|
||
Embedded Google Maps iframe
|
||
|
||
Address (configurable)
|
||
|
||
A prominent button:
|
||
|
||
“Zur Location-Webseite” (or “Visit Location Website”)
|
||
|
||
open in new tab (target="_blank" rel="noopener")
|
||
|
||
The location website URL must be configurable via environment variable:
|
||
|
||
LOCATION_WEBSITE_URL
|
||
|
||
Optionally also:
|
||
|
||
LOCATION_NAME
|
||
|
||
LOCATION_ADDRESS
|
||
|
||
GOOGLE_MAPS_EMBED_URL
|
||
|
||
5. Authentication Requirements
|
||
|
||
Registration/login requires event password
|
||
|
||
Event password stored in environment variable:
|
||
|
||
EVENT_PASSWORD
|
||
|
||
Guest provides:
|
||
|
||
event password
|
||
|
||
guest name
|
||
|
||
Use Flask sessions
|
||
|
||
Keep it simple (no email verification, no roles)
|
||
|
||
6. Database Schema (Minimum)
|
||
|
||
Table: guests
|
||
|
||
id (PK)
|
||
|
||
name (required)
|
||
|
||
attending (boolean, nullable)
|
||
|
||
plus_one (boolean, default False)
|
||
|
||
created_at (timestamp)
|
||
|
||
Table: uploads
|
||
|
||
id (PK)
|
||
|
||
filename
|
||
|
||
uploaded_by (guest id)
|
||
|
||
uploaded_at (timestamp)
|
||
|
||
SQLite is sufficient.
|
||
|
||
7. RSVP Logic
|
||
|
||
In the UI:
|
||
|
||
guest selects attending Yes/No
|
||
|
||
plus_one option only shown if attending Yes
|
||
|
||
persist to database
|
||
|
||
8. Upload Requirements
|
||
|
||
allowed types: jpg, jpeg, png
|
||
|
||
configurable max upload size
|
||
|
||
sanitize filenames
|
||
|
||
prevent path traversal
|
||
|
||
store in /uploads
|
||
|
||
store upload reference in DB
|
||
|
||
9. Gallery Requirements
|
||
|
||
all guests can view uploaded images
|
||
|
||
show thumbnails in a responsive grid
|
||
|
||
click opens a larger view (simple modal or dedicated page)
|
||
|
||
10. Dependency Management Rules
|
||
|
||
Use uv
|
||
|
||
Dependencies defined in pyproject.toml
|
||
|
||
Commit uv.lock
|
||
|
||
No requirements.txt
|
||
|
||
In Docker:
|
||
|
||
uv sync --frozen --no-dev
|
||
|
||
11. Docker Requirements
|
||
|
||
Dockerfile must:
|
||
|
||
Base: python:3.12-slim
|
||
|
||
Install uv
|
||
|
||
Copy pyproject.toml + uv.lock first (cache-friendly)
|
||
|
||
Run uv sync --frozen --no-dev
|
||
|
||
Start with:
|
||
|
||
uv run gunicorn -b 0.0.0.0:8000 app:app
|
||
|
||
Uploads + SQLite database must be persistent via volumes.
|
||
|
||
12. Non-Goals (Do NOT implement)
|
||
|
||
Admin dashboards
|
||
|
||
Email systems
|
||
|
||
Payments
|
||
|
||
OAuth
|
||
|
||
External cloud storage
|
||
|
||
Microservices
|
||
|
||
13. Design Philosophy
|
||
|
||
Aesthetic first, but not overengineered
|
||
|
||
Simple, maintainable code
|
||
|
||
Minimal dependencies
|
||
|
||
Good UX on mobile |