holzi weg

This commit is contained in:
2026-07-25 13:56:02 +00:00
parent 45b37597a9
commit 4f34d373d5
10 changed files with 26 additions and 18 deletions

View File

@@ -2,7 +2,7 @@
Aktueller Stand der Login-Gruppen aus `backend/app.py` (`DEFAULT_INVITATION_GROUPS`). Aktueller Stand der Login-Gruppen aus `backend/app.py` (`DEFAULT_INVITATION_GROUPS`).
Anzahl Gruppen: **41** Anzahl Gruppen: **40**
| Username | Rolle | Passwort | Members | | Username | Rolle | Passwort | Members |
|---|---|---|---| |---|---|---|---|
@@ -32,7 +32,6 @@ Anzahl Gruppen: **41**
| Kiki | guest | `Kiki!Rose24#` | Kiki | | Kiki | guest | `Kiki!Rose24#` | Kiki |
| Lana & Eric | guest | `Lan&Eric24!#` | Lana, Eric | | Lana & Eric | guest | `Lan&Eric24!#` | Lana, Eric |
| Britta | guest | `Brit!Tanz24#` | Britta | | Britta | guest | `Brit!Tanz24#` | Britta |
| Holzi | guest | `Holz!Ring24#` | Holzi |
| Eirene | guest | `Eire$Fest24!` | Eirene | | Eirene | guest | `Eire$Fest24!` | Eirene |
| Family Hynes | guest | `Hyne&Fam24!#` | Michael, Traci, Bethany, Josiah, Nicholas | | Family Hynes | guest | `Hyne&Fam24!#` | Michael, Traci, Bethany, Josiah, Nicholas |
| Steven & Martha | guest | `Stev&Mart24!#` | Steven, Martha | | Steven & Martha | guest | `Stev&Mart24!#` | Steven, Martha |

View File

@@ -595,9 +595,6 @@ Mitglieder: Lana, Eric
Britta Britta
Mitglieder: Britta Mitglieder: Britta
Holzi
Mitglieder: Holzi
Eirene Eirene
Mitglieder: Eirene Mitglieder: Eirene

View File

@@ -37,7 +37,7 @@ app.config["GOOGLE_MAPS_EMBED_URL"] = os.environ.get(
) )
app.config["WEDDING_DATE"] = os.environ.get("WEDDING_DATE", "") app.config["WEDDING_DATE"] = os.environ.get("WEDDING_DATE", "")
app.config["WEDDING_COUNTDOWN_ISO"] = os.environ.get("WEDDING_COUNTDOWN_ISO", "") app.config["WEDDING_COUNTDOWN_ISO"] = os.environ.get("WEDDING_COUNTDOWN_ISO", "")
app.config["WEDDING_COUNTDOWN_LOCAL"] = os.environ.get("WEDDING_COUNTDOWN_LOCAL", "2026-09-04 15:00") app.config["WEDDING_COUNTDOWN_LOCAL"] = os.environ.get("WEDDING_COUNTDOWN_LOCAL", "2026-09-04 16:00")
app.config["WEDDING_TIMEZONE"] = os.environ.get("WEDDING_TIMEZONE", "Europe/Berlin") app.config["WEDDING_TIMEZONE"] = os.environ.get("WEDDING_TIMEZONE", "Europe/Berlin")
app.config["HERO_IMAGE_FILENAME"] = os.environ.get("HERO_IMAGE_FILENAME") app.config["HERO_IMAGE_FILENAME"] = os.environ.get("HERO_IMAGE_FILENAME")
@@ -157,7 +157,6 @@ DEFAULT_INVITATION_GROUPS = [
"members": ["Lana", "Eric"], "members": ["Lana", "Eric"],
}, },
{"name": "Britta", "password": "Brit!Tanz24#", "role": "guest", "members": ["Britta"]}, {"name": "Britta", "password": "Brit!Tanz24#", "role": "guest", "members": ["Britta"]},
{"name": "Holzi", "password": "Holz!Ring24#", "role": "guest", "members": ["Holzi"]},
{"name": "Eirene", "password": "Eire$Fest24!", "role": "guest", "members": ["Eirene"]}, {"name": "Eirene", "password": "Eire$Fest24!", "role": "guest", "members": ["Eirene"]},
{ {
"name": "Family Hynes", "name": "Family Hynes",
@@ -334,13 +333,14 @@ TEXTS = {
"hero_app_hint_single": "In dieser Webapp kannst du zu- oder absagen, Fotos hochladen, die Galerie ansehen und alle wichtigen Infos rund um den Tag finden. Im Header findest du außerdem unsere FAQ und eine Deutsch-Englisch-Übersetzungshilfe. Bitte gib deine Zu- oder Absage möglichst bald ab.", "hero_app_hint_single": "In dieser Webapp kannst du zu- oder absagen, Fotos hochladen, die Galerie ansehen und alle wichtigen Infos rund um den Tag finden. Im Header findest du außerdem unsere FAQ und eine Deutsch-Englisch-Übersetzungshilfe. Bitte gib deine Zu- oder Absage möglichst bald ab.",
"hero_app_hint": "In dieser Webapp könnt ihr zu- oder absagen, Fotos hochladen, die Galerie ansehen und alle wichtigen Infos rund um den Tag finden. Im Header findet ihr außerdem unsere FAQ und eine Deutsch-Englisch-Übersetzungshilfe. Bitte gebt eure Zu- oder Absage möglichst bald ab.", "hero_app_hint": "In dieser Webapp könnt ihr zu- oder absagen, Fotos hochladen, die Galerie ansehen und alle wichtigen Infos rund um den Tag finden. Im Header findet ihr außerdem unsere FAQ und eine Deutsch-Englisch-Übersetzungshilfe. Bitte gebt eure Zu- oder Absage möglichst bald ab.",
"to_guest_area": "Zum Gästebereich", "to_guest_area": "Zum Gästebereich",
"schedule_text": "15:00 Trauung, 17:00 Empfang, 19:00 Dinner.", "schedule_text": "16:00 Ankunft, 16:15 Trauzeremonie, anschließend Sektempfang.",
"schedule_intro": "Hier findet ihr den Ablauf für unseren Hochzeitstag.", "schedule_intro": "Hier findet ihr den Ablauf für unseren Hochzeitstag.",
"schedule_arrival_title": "Ankunft", "schedule_arrival_title": "Ankunft",
"schedule_arrival_text": "Wir freuen uns auf eure Ankunft.", "schedule_arrival_text": "Wir freuen uns auf eure Ankunft.",
"schedule_ceremony_title": "Trauzeremonie", "schedule_ceremony_title": "Trauzeremonie",
"schedule_ceremony_text": "Trauzeremonie im Hof und Fotos.", "schedule_ceremony_text": "Trauzeremonie im Hof und Fotos.",
"schedule_reception_title": "Sektempfang & Häppchen", "schedule_reception_title": "Sektempfang & Häppchen",
"schedule_reception_time": "Im Anschluss",
"schedule_reception_text": "Sektempfang im Hof der Hochheimer Terrasse.", "schedule_reception_text": "Sektempfang im Hof der Hochheimer Terrasse.",
"schedule_buffet_title": "Buffet-Eröffnung", "schedule_buffet_title": "Buffet-Eröffnung",
"schedule_buffet_text": "Das Buffet wird eröffnet, danach folgen die Brautpaarspiele. Später gibt es zusätzlich Käseplatten.", "schedule_buffet_text": "Das Buffet wird eröffnet, danach folgen die Brautpaarspiele. Später gibt es zusätzlich Käseplatten.",
@@ -418,7 +418,9 @@ TEXTS = {
"faq_change_question": "Kann ich meine Antwort später noch ändern?", "faq_change_question": "Kann ich meine Antwort später noch ändern?",
"faq_change_answer": "Ja, ihr könnt eure Zu- oder Absage jederzeit bis zum Ende der Rückmeldefrist anpassen.", "faq_change_answer": "Ja, ihr könnt eure Zu- oder Absage jederzeit bis zum Ende der Rückmeldefrist anpassen.",
"faq_when_where_question": "Wann und wo findet die Hochzeit statt?", "faq_when_where_question": "Wann und wo findet die Hochzeit statt?",
"faq_when_where_answer": "Unsere Hochzeit beginnt um 15:30 Uhr auf der Hochheimer Terrasse. Weitere Informationen findet ihr auf der Location-Seite.", "faq_when_where_answer": "Wir erwarten euch ab 16:00 Uhr auf der Hochheimer Terrasse. Die Trauzeremonie beginnt um 16:15 Uhr. Weitere Informationen findet ihr auf der Location-Seite.",
"faq_dresscode_question": "Gibt es einen Dresscode?",
"faq_dresscode_answer": "Wir wünschen uns festliche Abendgarderobe. Wählt gerne ein elegantes Outfit, in dem ihr euch wohlfühlt ob Kleid, Anzug oder eine andere festliche Kombination.",
"faq_parking_question": "Gibt es Parkmöglichkeiten?", "faq_parking_question": "Gibt es Parkmöglichkeiten?",
"faq_parking_answer": "In der Hochheimer Altstadt und in der näheren Umgebung gibt es viele Parkmöglichkeiten. Plant bitte etwas Zeit für die Parkplatzsuche und den anschließenden Fußweg ein.", "faq_parking_answer": "In der Hochheimer Altstadt und in der näheren Umgebung gibt es viele Parkmöglichkeiten. Plant bitte etwas Zeit für die Parkplatzsuche und den anschließenden Fußweg ein.",
"faq_hotel_question": "Wo können wir übernachten?", "faq_hotel_question": "Wo können wir übernachten?",
@@ -530,13 +532,14 @@ TEXTS = {
"hero_app_hint_single": "In this web app, you can send your RSVP, upload photos, view the gallery, and find all important details for the day. The header also includes our FAQ and a German-English translation helper. Please submit your RSVP soon.", "hero_app_hint_single": "In this web app, you can send your RSVP, upload photos, view the gallery, and find all important details for the day. The header also includes our FAQ and a German-English translation helper. Please submit your RSVP soon.",
"hero_app_hint": "In this web app, you can send your RSVP, upload photos, view the gallery, and find all important details for the day. The header also includes our FAQ and a German-English translation helper. Please submit your RSVP soon.", "hero_app_hint": "In this web app, you can send your RSVP, upload photos, view the gallery, and find all important details for the day. The header also includes our FAQ and a German-English translation helper. Please submit your RSVP soon.",
"to_guest_area": "Open guest area", "to_guest_area": "Open guest area",
"schedule_text": "3:00 PM ceremony, 5:00 PM reception, 7:00 PM dinner.", "schedule_text": "4:00 PM arrival, 4:15 PM wedding ceremony, followed by a sparkling reception.",
"schedule_intro": "Here is the schedule for our wedding day.", "schedule_intro": "Here is the schedule for our wedding day.",
"schedule_arrival_title": "Arrival", "schedule_arrival_title": "Arrival",
"schedule_arrival_text": "We look forward to welcoming you.", "schedule_arrival_text": "We look forward to welcoming you.",
"schedule_ceremony_title": "Wedding Ceremony", "schedule_ceremony_title": "Wedding Ceremony",
"schedule_ceremony_text": "Wedding ceremony in the courtyard and photos.", "schedule_ceremony_text": "Wedding ceremony in the courtyard and photos.",
"schedule_reception_title": "Sparkling Reception & Snacks", "schedule_reception_title": "Sparkling Reception & Snacks",
"schedule_reception_time": "Afterwards",
"schedule_reception_text": "Sparkling reception in the courtyard of Hochheimer Terrasse.", "schedule_reception_text": "Sparkling reception in the courtyard of Hochheimer Terrasse.",
"schedule_buffet_title": "Buffet Opening", "schedule_buffet_title": "Buffet Opening",
"schedule_buffet_text": "The buffet opens, followed by wedding games. Cheese platters will be served later.", "schedule_buffet_text": "The buffet opens, followed by wedding games. Cheese platters will be served later.",
@@ -614,7 +617,9 @@ TEXTS = {
"faq_change_question": "Can I change my response later?", "faq_change_question": "Can I change my response later?",
"faq_change_answer": "Yes, you can update your RSVP at any time before the response deadline.", "faq_change_answer": "Yes, you can update your RSVP at any time before the response deadline.",
"faq_when_where_question": "When and where is the wedding taking place?", "faq_when_where_question": "When and where is the wedding taking place?",
"faq_when_where_answer": "Our wedding begins at 3:30 PM at Hochheimer Terrasse. You can find more information on the location page.", "faq_when_where_answer": "We look forward to welcoming you from 4:00 PM at Hochheimer Terrasse. The wedding ceremony begins at 4:15 PM. You can find more information on the location page.",
"faq_dresscode_question": "Is there a dress code?",
"faq_dresscode_answer": "We would love for you to wear formal evening attire. Please choose an elegant outfit you feel comfortable in—whether that is a dress, a suit, or another festive ensemble.",
"faq_parking_question": "Is parking available?", "faq_parking_question": "Is parking available?",
"faq_parking_answer": "There are plenty of parking options in Hochheim's old town and the surrounding area. Please allow some extra time to find a space and walk to the venue.", "faq_parking_answer": "There are plenty of parking options in Hochheim's old town and the surrounding area. Please allow some extra time to find a space and walk to the venue.",
"faq_hotel_question": "Where can we stay overnight?", "faq_hotel_question": "Where can we stay overnight?",
@@ -717,7 +722,7 @@ def get_wedding_countdown_iso() -> str:
local_value = str(app.config.get("WEDDING_COUNTDOWN_LOCAL", "") or "").strip() local_value = str(app.config.get("WEDDING_COUNTDOWN_LOCAL", "") or "").strip()
timezone_name = str(app.config.get("WEDDING_TIMEZONE", "Europe/Berlin") or "Europe/Berlin").strip() timezone_name = str(app.config.get("WEDDING_TIMEZONE", "Europe/Berlin") or "Europe/Berlin").strip()
if not local_value: if not local_value:
return "2026-09-04T15:00:00+02:00" return "2026-09-04T16:00:00+02:00"
parsed_local = None parsed_local = None
for fmt in ("%Y-%m-%d %H:%M", "%Y-%m-%dT%H:%M", "%Y-%m-%d %H:%M:%S", "%Y-%m-%dT%H:%M:%S"): for fmt in ("%Y-%m-%d %H:%M", "%Y-%m-%dT%H:%M", "%Y-%m-%d %H:%M:%S", "%Y-%m-%dT%H:%M:%S"):
@@ -728,7 +733,7 @@ def get_wedding_countdown_iso() -> str:
continue continue
if parsed_local is None: if parsed_local is None:
return "2026-09-04T15:00:00+02:00" return "2026-09-04T16:00:00+02:00"
try: try:
tz = ZoneInfo(timezone_name) tz = ZoneInfo(timezone_name)
@@ -1141,6 +1146,7 @@ def faq():
("faq_deadline_question", "faq_deadline_answer"), ("faq_deadline_question", "faq_deadline_answer"),
("faq_change_question", "faq_change_answer"), ("faq_change_question", "faq_change_answer"),
("faq_when_where_question", "faq_when_where_answer"), ("faq_when_where_question", "faq_when_where_answer"),
("faq_dresscode_question", "faq_dresscode_answer"),
("faq_parking_question", "faq_parking_answer"), ("faq_parking_question", "faq_parking_answer"),
("faq_hotel_question", "faq_hotel_answer"), ("faq_hotel_question", "faq_hotel_answer"),
("faq_upload_question", "faq_upload_answer"), ("faq_upload_question", "faq_upload_answer"),

Binary file not shown.

View File

@@ -707,6 +707,12 @@ input[type="file"]:focus {
height: 1.02rem; height: 1.02rem;
} }
.toolbar-translate-btn svg path {
stroke: currentColor;
stroke-width: 0.9;
stroke-linejoin: round;
}
.toolbar-row { .toolbar-row {
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;

View File

@@ -7,7 +7,7 @@
<link rel="preconnect" href="https://fonts.googleapis.com" /> <link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:wght@600;700&family=Source+Sans+3:wght@400;500;600&display=swap" rel="stylesheet" /> <link href="https://fonts.googleapis.com/css2?family=Playfair+Display:wght@600;700&family=Source+Sans+3:wght@400;500;600&display=swap" rel="stylesheet" />
<link rel="stylesheet" href="{{ url_for('static', filename='styles.css', v='20260724v') }}" /> <link rel="stylesheet" href="{{ url_for('static', filename='styles.css', v='20260724x') }}" />
</head> </head>
<body> <body>
<header class="topbar"> <header class="topbar">

View File

@@ -13,17 +13,17 @@
<p>{{ t('schedule_intro') }}</p> <p>{{ t('schedule_intro') }}</p>
<div class="schedule-timeline"> <div class="schedule-timeline">
<article class="schedule-item" style="--schedule-card-image: url('{{ url_for('static', filename='assets/ankunft.png') }}'); --schedule-card-position: center 18%;"> <article class="schedule-item" style="--schedule-card-image: url('{{ url_for('static', filename='assets/ankunft.png') }}'); --schedule-card-position: center 18%;">
<p class="schedule-time">15:00</p> <p class="schedule-time">16:00</p>
<h2>{{ t('schedule_arrival_title') }}</h2> <h2>{{ t('schedule_arrival_title') }}</h2>
<p>{{ t('schedule_arrival_text') }}</p> <p>{{ t('schedule_arrival_text') }}</p>
</article> </article>
<article class="schedule-item" style="--schedule-card-image: url('{{ url_for('static', filename='assets/trauzermonie.png') }}'); --schedule-card-position: center 25%;"> <article class="schedule-item" style="--schedule-card-image: url('{{ url_for('static', filename='assets/trauzermonie.png') }}'); --schedule-card-position: center 25%;">
<p class="schedule-time">15:30</p> <p class="schedule-time">16:15</p>
<h2>{{ t('schedule_ceremony_title') }}</h2> <h2>{{ t('schedule_ceremony_title') }}</h2>
<p>{{ t('schedule_ceremony_text') }}</p> <p>{{ t('schedule_ceremony_text') }}</p>
</article> </article>
<article class="schedule-item" style="--schedule-card-image: url('{{ url_for('static', filename='assets/sektempfang.png') }}'); --schedule-card-position: center 32%;"> <article class="schedule-item" style="--schedule-card-image: url('{{ url_for('static', filename='assets/sektempfang.png') }}'); --schedule-card-position: center 32%;">
<p class="schedule-time">16:00</p> <p class="schedule-time">{{ t('schedule_reception_time') }}</p>
<h2>{{ t('schedule_reception_title') }}</h2> <h2>{{ t('schedule_reception_title') }}</h2>
<p>{{ t('schedule_reception_text') }}</p> <p>{{ t('schedule_reception_text') }}</p>
</article> </article>

Binary file not shown.

View File

@@ -25,7 +25,7 @@ services:
- EVENT_PASSWORD=${EVENT_PASSWORD:-wedding2026} - EVENT_PASSWORD=${EVENT_PASSWORD:-wedding2026}
- HOST_PASSWORD=${HOST_PASSWORD:-gastgeber2026} - HOST_PASSWORD=${HOST_PASSWORD:-gastgeber2026}
- WEDDING_DATE=${WEDDING_DATE:-} - WEDDING_DATE=${WEDDING_DATE:-}
- WEDDING_COUNTDOWN_LOCAL=${WEDDING_COUNTDOWN_LOCAL:-2026-09-04 15:00} - WEDDING_COUNTDOWN_LOCAL=${WEDDING_COUNTDOWN_LOCAL:-2026-09-04 16:00}
- WEDDING_TIMEZONE=${WEDDING_TIMEZONE:-Europe/Berlin} - WEDDING_TIMEZONE=${WEDDING_TIMEZONE:-Europe/Berlin}
- SECRET_KEY=${SECRET_KEY:-change-me-in-production} - SECRET_KEY=${SECRET_KEY:-change-me-in-production}
- MAX_UPLOAD_BYTES=${MAX_UPLOAD_BYTES:-268435456} - MAX_UPLOAD_BYTES=${MAX_UPLOAD_BYTES:-268435456}