Date-Wizard 💕
Eine spielerische Web-App ("Choose Your Own Adventure") zum Planen gemeinsamer Dates – mit mobilem Design, dynamischen Aktivitäten & Terminen sowie einem Go-Microservice zum E-Mail-Versand der Reservierung.
📁 Projektstruktur
datetest/
├── public/ # Statische Webseiten & Assets
│ ├── appsettings.json # Konfiguration der Aktivitäten & Termine
│ ├── index.html # Startseite ("Willst du mit mir gehen?")
│ ├── datetime.html/.js # Datumsauswahl (Kalender)
│ ├── activity.html/.js # Aktivitätsauswahl
│ ├── name.html/.js # Namensauswahl ("Wer bist du?")
│ └── checkout.html/.js # Zusammenfassung & Bestätigung
├── main.go # Go-Microservice (HTTP-Server & SMTP E-Mail)
├── go.mod # Go-Moduldefinition
├── Dockerfile # Multi-Stage Dockerfile (Alpine Runtime)
├── docker-compose.yml # Docker-Compose mit Traefik Labels
├── .env.example # Vorlage für Umgebungsvariablen
└── .env # Lokale/Produktive Umgebungsvariablen (nicht ins Git committen)
⚙️ Konfiguration
1. E-Mail & Server .env anlegen
Kopiere .env.example zu .env:
cp .env.example .env
Trage in der .env deine Server- und SMTP-Zugangsdaten ein:
| Variable | Beschreibung | Beispiel |
|---|---|---|
PORT |
HTTP-Port des Go-Servers | 8080 |
WEB_DIR |
Verzeichnis der statischen Assets | public |
SMTP_HOST |
Postausgangsserver (SMTP) | mail.example.com |
SMTP_PORT |
SMTP-Port (Standard meist 587 oder 465) | 587 |
SMTP_USER |
Benutzername / E-Mail für SMTP-Auth | absender@example.com |
SMTP_PASS |
Passwort des SMTP-Kontos | secretpassword |
TO_EMAIL |
Ziel-Adresse für eingegangene Date-Anfragen | ziel@example.com |
FROM_EMAIL |
Absender-Adresse für die Benachrichtigung | absender@example.com |
(Hinweis: Wenn SMTP_HOST oder TO_EMAIL leer bleiben, läuft der Server im Testmodus ohne E-Mail-Versand.)
2. Aktivitäten & Termine anpassen (public/appsettings.json)
Passe in public/appsettings.json die zur Auswahl stehenden Aktivitäten sowie die verfügbaren Tage an:
activities: Liste von Objekten mitname,icon(Unicode Emoji) undtype(shortoderlong).availableDates: Liste von verfügbaren Tagen mitdate(YYYY-MM-DD) undtype(shortoderlong).names: Optional vordefinierte Namen zur Auswahl (ist die Liste leer, wird ein Standard-Fallback angeboten).
🚀 Inbetriebnahme
Option A: Mit Docker Compose (Empfohlen)
-
.envwie oben beschrieben anpassen. -
Container erstellen und starten:
docker-compose up -d --build -
Die Anwendung ist unter
http://localhost:8080erreichbar.
Traefik / Reverse Proxy
docker-compose.yml enthält bereits Traefik-Labels. Passe bei Bedarf die Domain an:
- "traefik.http.routers.date-wizard.rule=Host(`date.deine-domain.de`)"
Option B: Direkt mit Go (Lokal)
Voraussetzungen
- Installed Go SDK (Version 1.22 oder neuer)
-
Abhängigkeiten prüfen & kompilieren:
go run main.go -
Die Anwendung startet auf dem in
.envdefinierten Port (z. B.http://localhost:8080).
📱 Ablauf der Anwendung
- Startseite (
index.html): Spielerische Frage mit Ja/Nein-Interaktion. - Datumsauswahl (
datetime.html): Interaktiver Kalender mit Markierung von verfügbaren Tagen (short/long). - Aktivitätsauswahl (
activity.html): Auswahl passender Aktivitäten je nach verbleibender Zeit am gewählten Tag. - Namensauswahl (
name.html): Abfrage "Wer bist du?". - Checkout & Bestätigung (
checkout.html): Finale Übersicht und Absenden der Reservierung (überträgt Daten an/api/submitund löst den E-Mail-Versand aus).