feat: Großes v3-Update – Sterne-Rating, Ranking, Kommentare, eigene Ideen gleichberechtigt
⭐ Sterne-Bewertungs-System (1-5 pro Person, Till + Lea unabhängig) 🏆 Dynamische Ranking-Liste mit Top-3-Badges (Gold/Silber/Bronze) 💬 Kommentare unter jeder Karte (aufklappbar, eigene löschbar) 👤 User-Profil-Switch (Till ↔ Lea) – Header-Pill mit Modal 💜 Eigene Ideen sind jetzt vollwertige Karten (im Ideen-Tab gemischt) ✏️ Eigene Ideen bearbeitbar + löschbar (eigener Tab) 📊 Sortierung: Ranking / Status / Preis / Name / Eigene zuerst 📈 Live-Stats: Ideen, Bewertet, Kommentare, Tage bis Reise 🎨 Bottom-Navigation mit 5 Tabs + Badge für eigene Ideen 📋 JSON-Export aller Daten für Codex 🔧 Daten-driven: destinations.json + dynamisches Rendering 📱 Mobile-optimiert mit Safe-Area-Insets Datenstruktur: - localStorage.f24_ratings, f24_comments, f24_own, f24_user - 18 built-in Destinations aus data/destinations.json - Gleiche Render-Pipeline für built-in und own
This commit is contained in:
+104
@@ -0,0 +1,104 @@
|
|||||||
|
# Fredi24 – Feature-Übersicht
|
||||||
|
|
||||||
|
**Live:** https://holiday.heidrich-digital.de · Passwort: `frediurlaub26`
|
||||||
|
|
||||||
|
## Kern-Features (v3.0)
|
||||||
|
|
||||||
|
### ⭐ Sterne-Bewertungs-System
|
||||||
|
- Jede Destination kann von Till + Lea unabhängig bewertet werden (1–5 Sterne)
|
||||||
|
- Klick auf Stern setzt/entfernt Bewertung
|
||||||
|
- Durchschnitt wird automatisch berechnet
|
||||||
|
- Persistent in localStorage (`f24_ratings`)
|
||||||
|
|
||||||
|
### 🏆 Dynamische Ranking-Liste
|
||||||
|
- Eigener Tab "Ranking" (Bottom-Nav)
|
||||||
|
- Sortiert automatisch nach Durchschnitt aller Sterne
|
||||||
|
- Top 3 bekommen Gold/Silber/Bronze Badge
|
||||||
|
- Klick auf Ranking-Eintrag → springt zur Detail-Karte
|
||||||
|
- Zeigt Till's und Lea's Bewertungen separat
|
||||||
|
|
||||||
|
### 💬 Kommentar-System
|
||||||
|
- Unter jeder Karte aufklappbar
|
||||||
|
- Aktiver User (Till oder Lea) postet als sich selbst
|
||||||
|
- Eigene Kommentare löschbar
|
||||||
|
- Timestamp ("gerade", "5 Min", "2 Std", Datum)
|
||||||
|
- Lea's Kommentare in coral, Till's in teal markiert
|
||||||
|
|
||||||
|
### 👤 Profil-Switch
|
||||||
|
- Top-rechts: User-Pill mit aktuellem Profil
|
||||||
|
- Klick → Modal: Till oder Lea auswählen
|
||||||
|
- Aktive Identität wird für Sterne + Kommentare verwendet
|
||||||
|
- Speichert in localStorage (`f24_user`)
|
||||||
|
|
||||||
|
### 💡 Eigene Ideen einreichen (gleichberechtigt!)
|
||||||
|
- FAB-Button rechts unten (✚)
|
||||||
|
- Modal mit allen Feldern (Emoji, Name, Land, Budget, Status, Begründung, Subtext, Flugzeit)
|
||||||
|
- **Eigene Ideen erscheinen im Ideen-Tab gleichberechtigt** (lila Border, "💜 Eigener Vorschlag"-Marker)
|
||||||
|
- Können bewertet & kommentiert werden wie alle anderen
|
||||||
|
- Eigener Tab "💜 Eigene" zeigt nur eigene Vorschläge
|
||||||
|
- Bearbeitbar + löschbar (nur eigene)
|
||||||
|
- Badge auf Nav-Item zeigt Anzahl
|
||||||
|
|
||||||
|
### 📊 Sortierung (im Ideen-Tab)
|
||||||
|
- Bewertung (höchste zuerst) – nutzt Sterne-Durchschnitt
|
||||||
|
- Status (TOP → SPÄTER)
|
||||||
|
- Preis aufsteigend / absteigend
|
||||||
|
- Name A-Z
|
||||||
|
- Eigene zuerst
|
||||||
|
|
||||||
|
### 📈 Live-Statistik-Dashboard
|
||||||
|
- 4 Kacheln oben im Ideen-Tab:
|
||||||
|
- Ideen gesamt (built-in + eigene)
|
||||||
|
- Bewertet (wie viele schon Sterne haben)
|
||||||
|
- Kommentare (Summe aller)
|
||||||
|
- Tage bis Reise (Countdown zum 13. Juli 2026)
|
||||||
|
|
||||||
|
### 🎨 Mobile-First UI
|
||||||
|
- Bottom-Navigation (5 Tabs: Ideen, Ranking, Eigene, Archiv, Info)
|
||||||
|
- Sticky Header mit User-Profil
|
||||||
|
- Safe-Area Padding für iOS Notch
|
||||||
|
- Optimiert für Touch (große Tap-Targets)
|
||||||
|
- 1-Spalten-Layout auf < 660px
|
||||||
|
|
||||||
|
### 🔓 Passwort-Schutz
|
||||||
|
- Client-side Gate (`frediurlaub26`)
|
||||||
|
- Session-basiert (`sessionStorage`)
|
||||||
|
- Schützt vor zufälligem Zugriff (kein hartes Security)
|
||||||
|
|
||||||
|
### 📋 Daten-Export
|
||||||
|
- JSON-Export aller Bewertungen + Kommentare + eigener Ideen
|
||||||
|
- Direkt in Zwischenablage → Codex kann auslesen
|
||||||
|
- Im Ranking-Tab über "📋 Export"-Button
|
||||||
|
|
||||||
|
## Datenstruktur
|
||||||
|
|
||||||
|
### LocalStorage Keys
|
||||||
|
- `f24_user` → aktiver User: "Till" | "Lea"
|
||||||
|
- `f24_ratings` → `{destId: {Till: 1-5, Lea: 1-5}}`
|
||||||
|
- `f24_comments` → `{destId: [{user, text, ts}]}`
|
||||||
|
- `f24_own` → Array eigener Destinationen
|
||||||
|
- `sessionStorage.f24` → "1" wenn eingeloggt
|
||||||
|
|
||||||
|
### Built-in Destinations (data/destinations.json)
|
||||||
|
18 vorgefertigte Destinationen mit allen Feldern:
|
||||||
|
- Sardinien, AIDA, Algarve, Glamping, Schweiz, Côte d'Azur
|
||||||
|
- Taurito, Fuerteventura, Menorca, Kapverden, Malta, Lanzarote, Costa del Sol
|
||||||
|
- MSC, Korsika, Madeira (später), Schweden (später), Bali (später)
|
||||||
|
|
||||||
|
## Codex-Integration
|
||||||
|
|
||||||
|
Codex kann über git.heidrich-digital.de/till/holiday-2026:
|
||||||
|
1. `data/destinations.json` erweitern → neue eingebaute Destinationen
|
||||||
|
2. Aus `export`-JSON die User-Daten auslesen → Ratings/Kommentare analysieren
|
||||||
|
3. HTML-Templates erweitern (siehe README.md für Card-Format)
|
||||||
|
4. Auto-Deploy via Coolify bei Push auf main
|
||||||
|
|
||||||
|
## Roadmap (Ideen für später)
|
||||||
|
|
||||||
|
- [ ] Bilder pro Destination (CDN/Unsplash)
|
||||||
|
- [ ] Wettervorhersage-Widget je Reisezeitraum
|
||||||
|
- [ ] Direkte Booking-Links (HRS, Booking.com)
|
||||||
|
- [ ] PDF-Export einer "Shortlist"
|
||||||
|
- [ ] Reise-Notizen pro Destination (Hotel-Links, Mietwagen-Codes)
|
||||||
|
- [ ] Felix-Geburtstag-Counter ("Felix ist X Jahre alt während Reise")
|
||||||
|
- [ ] Multi-Year-Planning (2026, 2027, 2028)
|
||||||
@@ -0,0 +1,446 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"id": "sardinien",
|
||||||
|
"emoji": "🏖️",
|
||||||
|
"name": "Sardinien",
|
||||||
|
"country": "🇮🇹 Italien",
|
||||||
|
"sub": "Nordsardinien · Hotel 4★ · Mietwagen",
|
||||||
|
"status": "TOP",
|
||||||
|
"isRecommendation": true,
|
||||||
|
"price": 3150,
|
||||||
|
"priceLabel": "für 3 Pers. 7N",
|
||||||
|
"priceBadge": "Im Budget ✓",
|
||||||
|
"priceBadgeClass": "pb-mid",
|
||||||
|
"scoreFelix": 100,
|
||||||
|
"scoreLea": 80,
|
||||||
|
"scoreCar": 100,
|
||||||
|
"flight": "2h 20",
|
||||||
|
"from": "HAM→OLB",
|
||||||
|
"climate": "30–35°C",
|
||||||
|
"available": "ab 13.Jul ✓",
|
||||||
|
"highlight": "Karibik-Strände · EU-Kindersitz-Standard · Neuland",
|
||||||
|
"pros": ["Direktflug HAM–Olbia 2:20h", "Traumstrände (La Pelosa, Principe)", "Lea hat Sardinien okayed", "Sehr kinderfreundlich"],
|
||||||
|
"cons": ["30–35°C im Juli heiß", "Kein AI = Eigenplanung", "Hochsaison teuer + voll"],
|
||||||
|
"note": "Hotels: Club Hotel Baja Sardinia (4★), Sporting Beach Hotel. Nordsardinien bevorzugen.",
|
||||||
|
"felixMinAge": 0,
|
||||||
|
"season": ["6","7","8","9"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "aida-kreuzfahrt",
|
||||||
|
"emoji": "🚢",
|
||||||
|
"name": "AIDAcosma Kreuzfahrt",
|
||||||
|
"country": "🇮🇹 Mittelmeer",
|
||||||
|
"sub": "Korsika · Sardinien · Rom · Marseille · Barcelona",
|
||||||
|
"status": "TOP",
|
||||||
|
"price": 3320,
|
||||||
|
"priceLabel": "Schiff + Flug HAM→PMI",
|
||||||
|
"priceBadge": "Im Budget ✓",
|
||||||
|
"priceBadgeClass": "pb-mid",
|
||||||
|
"scoreFelix": 100,
|
||||||
|
"scoreLea": 100,
|
||||||
|
"scoreCar": 20,
|
||||||
|
"flight": "2h",
|
||||||
|
"from": "HAM→PMI",
|
||||||
|
"climate": "25–28°C",
|
||||||
|
"available": "Prüfen!",
|
||||||
|
"highlight": "Kreuzfahrt-Wunsch erfüllt · Lea muss nichts planen · Vollpension",
|
||||||
|
"pros": ["Korsika + Sardinien + Rom kombiniert", "Felix Kids-Club 3–6J + Rutschen", "AIDA kennt ihr seit 2 Reisen", "Kinder 35% Rabatt"],
|
||||||
|
"cons": ["Korsika-Route: 4.Juli oder 15.Aug", "18.Juli = Gibraltar (weniger gut)", "Kein echtes Mietwagen-Feeling"],
|
||||||
|
"note": "⚠️ aida.de Route PMI07307 direkt prüfen: Sardinien-Route 13.–16. Juli verfügbar?",
|
||||||
|
"felixMinAge": 0,
|
||||||
|
"season": ["5","6","7","8","9","10"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "algarve",
|
||||||
|
"emoji": "🌊",
|
||||||
|
"name": "Algarve",
|
||||||
|
"country": "🇵🇹 Portugal",
|
||||||
|
"sub": "Carvoeiro · Lagos · Atlantik-Klippenküste",
|
||||||
|
"status": "TOP",
|
||||||
|
"price": 2950,
|
||||||
|
"priceLabel": "günstigste TOP-Option",
|
||||||
|
"priceBadge": "Budget-Tipp 💚",
|
||||||
|
"priceBadgeClass": "pb-cheap",
|
||||||
|
"scoreFelix": 100,
|
||||||
|
"scoreLea": 65,
|
||||||
|
"scoreCar": 100,
|
||||||
|
"flight": "3h 30",
|
||||||
|
"from": "HAM→FAO",
|
||||||
|
"climate": "25–28°C",
|
||||||
|
"available": "ab 13.Jul ✓",
|
||||||
|
"highlight": "Mildestes Klima für Felix · Spektakuläre Mietwagen-Touren",
|
||||||
|
"pros": ["25–28°C ideal für Kleinkind", "Cabo de São Vicente, Lagos, Sagres", "Carvoeiro, Praia da Luz – ruhig", "Günstigstes Budget aller TOPs"],
|
||||||
|
"cons": ["Lea etwas zögerlich (neu)", "Weniger AI-Auswahl als Kanaren"],
|
||||||
|
"note": "HP statt AI – ihr esst täglich unterwegs bei Mietwagen-Touren.",
|
||||||
|
"felixMinAge": 0,
|
||||||
|
"season": ["4","5","6","7","8","9","10"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "glamping",
|
||||||
|
"emoji": "🏕️",
|
||||||
|
"name": "Glamping Village",
|
||||||
|
"country": "🇮🇹 Italien",
|
||||||
|
"sub": "Bungalow direkt am Meer · Pool · Kinderanimation",
|
||||||
|
"status": "NEW",
|
||||||
|
"price": 2500,
|
||||||
|
"priceLabel": "günstigste Option!",
|
||||||
|
"priceBadge": "Preis-Tipp 💚",
|
||||||
|
"priceBadgeClass": "pb-cheap",
|
||||||
|
"scoreFelix": 100,
|
||||||
|
"scoreLea": 70,
|
||||||
|
"scoreCar": 80,
|
||||||
|
"flight": "2h",
|
||||||
|
"from": "HAM→VCE",
|
||||||
|
"climate": "28–33°C",
|
||||||
|
"available": "ASAP!",
|
||||||
|
"highlight": "Tipp vom Meister: Bungalow am Meer mit Pool – unterschätzt!",
|
||||||
|
"pros": ["Direkter Meerzugang + eigener Pool", "Kinderclub, Animation, Strand", "30–50% günstiger als Hotel", "Absolutes Neuland"],
|
||||||
|
"cons": ["Kein 4★-Hotelkomfort", "Qualität je nach Anlage variabel", "Juli-Plätze schnell weg"],
|
||||||
|
"note": "Top: Union Lido/Cavallino (Venetien), Punta Lunga/Vieste (Gargano). Buchung: acsi.eu · pitchup.com",
|
||||||
|
"felixMinAge": 0,
|
||||||
|
"season": ["5","6","7","8","9"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "schweiz",
|
||||||
|
"emoji": "🏔️",
|
||||||
|
"name": "Schweiz + Norditalien",
|
||||||
|
"country": "🇨🇭 Schweiz",
|
||||||
|
"sub": "Fribourg · Gruyères · Lago Maggiore",
|
||||||
|
"status": "OK",
|
||||||
|
"price": 2000,
|
||||||
|
"priceLabel": "günstigster Kurztrip",
|
||||||
|
"priceBadge": "Budget-Winner 💚",
|
||||||
|
"priceBadgeClass": "pb-cheap",
|
||||||
|
"scoreFelix": 60,
|
||||||
|
"scoreLea": 90,
|
||||||
|
"scoreCar": 80,
|
||||||
|
"flight": "860 km",
|
||||||
|
"from": "Caddy*",
|
||||||
|
"climate": "22–28°C",
|
||||||
|
"available": "Flexibel",
|
||||||
|
"highlight": "Lea würde es sofort machen · Freunde besuchen · Château de Gruyères",
|
||||||
|
"pros": ["Lea will Schweiz ausdrücklich", "Château de Gruyères – Felix findet Burgen spannend!", "Tagestour Lago Maggiore (2,5h)", "Freunde bei Fribourg = ggf. günstig"],
|
||||||
|
"cons": ["860 km Caddy (Dienstwagen)", "Schweizer Hotels teuer", "Kein klassischer Strandurlaub"],
|
||||||
|
"note": "*Caddy ist Dienstwagen HHGmbH – keine persönlichen Kosten. Alternativ: Flug HAM→GVA + Mietwagen.",
|
||||||
|
"felixMinAge": 3,
|
||||||
|
"season": ["5","6","7","8","9","10"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "cote-azur",
|
||||||
|
"emoji": "🇫🇷",
|
||||||
|
"name": "Côte d'Azur",
|
||||||
|
"country": "🇫🇷 Frankreich",
|
||||||
|
"sub": "Nizza · Antibes · Familien-Feriendorf",
|
||||||
|
"status": "OK",
|
||||||
|
"price": 3000,
|
||||||
|
"priceLabel": "Flug + Hotel/Feriendorf",
|
||||||
|
"priceBadge": "Im Budget ✓",
|
||||||
|
"priceBadgeClass": "pb-mid",
|
||||||
|
"scoreFelix": 80,
|
||||||
|
"scoreLea": 85,
|
||||||
|
"scoreCar": 90,
|
||||||
|
"flight": "2h",
|
||||||
|
"from": "HAM→NCE",
|
||||||
|
"climate": "28–33°C",
|
||||||
|
"available": "ab 13.Jul ✓",
|
||||||
|
"highlight": "Lea würde sofort Frankreich machen · Charmant",
|
||||||
|
"pros": ["Lea mag Frankreich", "Nizza direkt ab Hamburg 2h", "Traumküste + Mietwagen (Monaco, Cannes)", "Familienfreundliche Feriendörfer"],
|
||||||
|
"cons": ["Juli sehr teuer an der Côte d'Azur", "Wenig AI-Hotels"],
|
||||||
|
"note": "Feriendorf-Tipp: Center Parcs Les Lacs de l'Escapade (Var) oder Antibes direkt.",
|
||||||
|
"felixMinAge": 0,
|
||||||
|
"season": ["5","6","7","8","9"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "taurito",
|
||||||
|
"emoji": "🌴",
|
||||||
|
"name": "Taurito Princess",
|
||||||
|
"country": "🇪🇸 Gran Canaria",
|
||||||
|
"sub": "TUI KIDS CLUB · All Inclusive",
|
||||||
|
"status": "OK",
|
||||||
|
"price": 3100,
|
||||||
|
"priceLabel": "AI Pauschal inkl. Flug",
|
||||||
|
"priceBadge": "Im Budget ✓",
|
||||||
|
"priceBadgeClass": "pb-mid",
|
||||||
|
"scoreFelix": 100,
|
||||||
|
"scoreLea": 100,
|
||||||
|
"scoreCar": 60,
|
||||||
|
"flight": "5h",
|
||||||
|
"from": "HAM→LPA",
|
||||||
|
"climate": "25–28°C",
|
||||||
|
"available": "ab 13.Jul ✓",
|
||||||
|
"highlight": "Lea's ausdrücklicher Favorit · Felix Mini-Club ab 3J",
|
||||||
|
"pros": ["Lea will es", "Felix Mini-Club + Kinderpool", "AI-Vollversorgung", "Wasserpark 5 Min entfernt"],
|
||||||
|
"cons": ["4. Kanaren-Reise in 4 Jahren", "Till will was anderes", "AI-Bunker ohne echte Touren"],
|
||||||
|
"note": "Link: c.24.de/pr/F8F2FX · Kinderfestpreis (2–12J) Mai–Sep 2026.",
|
||||||
|
"felixMinAge": 3,
|
||||||
|
"season": ["1","2","3","4","5","6","7","8","9","10","11","12"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "fuerteventura",
|
||||||
|
"emoji": "🏜️",
|
||||||
|
"name": "Fuerteventura",
|
||||||
|
"country": "🇪🇸 Kanaren",
|
||||||
|
"sub": "Aldiana / Robinson · Ruhiger als GC",
|
||||||
|
"status": "OK",
|
||||||
|
"price": 3200,
|
||||||
|
"priceLabel": "AI-Clubhotel",
|
||||||
|
"priceBadge": "Im Budget ✓",
|
||||||
|
"priceBadgeClass": "pb-mid",
|
||||||
|
"scoreFelix": 90,
|
||||||
|
"scoreLea": 80,
|
||||||
|
"scoreCar": 60,
|
||||||
|
"flight": "4h 30",
|
||||||
|
"from": "HAM→FUE",
|
||||||
|
"climate": "24–28°C",
|
||||||
|
"available": "ab 13.Jul ✓",
|
||||||
|
"highlight": "Ruhigste Kanareninseln · Riesige Sandstrände",
|
||||||
|
"pros": ["Weniger touristisch als GC", "Aldiana/Robinson Club-Konzept", "Riesige flache Strände für Felix"],
|
||||||
|
"cons": ["Kanaren = nochmal dasselbe", "Windig (Kitesurf-Destination)"],
|
||||||
|
"felixMinAge": 0,
|
||||||
|
"season": ["1","2","3","4","5","6","7","8","9","10","11","12"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "menorca",
|
||||||
|
"emoji": "🏝️",
|
||||||
|
"name": "Menorca",
|
||||||
|
"country": "🇪🇸 Balearen",
|
||||||
|
"sub": "Ruhigste Baleareninsel · Cala Galdana",
|
||||||
|
"status": "OK",
|
||||||
|
"price": 2900,
|
||||||
|
"priceLabel": "HP 4★ + Flug",
|
||||||
|
"priceBadge": "Günstig ✓",
|
||||||
|
"priceBadgeClass": "pb-cheap",
|
||||||
|
"scoreFelix": 85,
|
||||||
|
"scoreLea": 75,
|
||||||
|
"scoreCar": 90,
|
||||||
|
"flight": "2h 30",
|
||||||
|
"from": "HAM→MAH",
|
||||||
|
"climate": "28–33°C",
|
||||||
|
"available": "ab 13.Jul ✓",
|
||||||
|
"highlight": "Ruhiger als Mallorca · Türkises Wasser",
|
||||||
|
"pros": ["Ruhiger als Mallorca + Ibiza", "Biosphärenreservat – sauber", "Schöne Buchten mit Mietwagen"],
|
||||||
|
"cons": ["Weniger Kinderclub-Angebot", "Sehr heiß im Juli"],
|
||||||
|
"felixMinAge": 0,
|
||||||
|
"season": ["5","6","7","8","9","10"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "kapverden",
|
||||||
|
"emoji": "🌍",
|
||||||
|
"name": "Kapverden",
|
||||||
|
"country": "🌍 Atlantik",
|
||||||
|
"sub": "Sal · Boa Vista · AI-Resort · Exotisch",
|
||||||
|
"status": "OK",
|
||||||
|
"price": 3400,
|
||||||
|
"priceLabel": "AI Direktflug",
|
||||||
|
"priceBadge": "Knapp am Budget",
|
||||||
|
"priceBadgeClass": "pb-pricey",
|
||||||
|
"scoreFelix": 80,
|
||||||
|
"scoreLea": 75,
|
||||||
|
"scoreCar": 40,
|
||||||
|
"flight": "6h",
|
||||||
|
"from": "HAM→SID",
|
||||||
|
"climate": "27–30°C",
|
||||||
|
"available": "ok",
|
||||||
|
"highlight": "Exotisch ohne langen Flug · Kilometer-Strände",
|
||||||
|
"pros": ["Direktflug 6h – kein Umsteigen", "Riesige flache Strände (Felix-Gold)", "RIU/Iberostar All Inclusive", "Echtes Neuland"],
|
||||||
|
"cons": ["Knapp am Budget", "Wenig Mietwagen-Sightseeing", "Windige Insel"],
|
||||||
|
"felixMinAge": 2,
|
||||||
|
"season": ["1","2","3","4","5","6","7","8","9","10","11","12"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "malta",
|
||||||
|
"emoji": "⛪",
|
||||||
|
"name": "Malta",
|
||||||
|
"country": "🇲🇹 Malta",
|
||||||
|
"sub": "Gozo · St. Julian's · Familienhotel 4★",
|
||||||
|
"status": "OK",
|
||||||
|
"price": 2400,
|
||||||
|
"priceLabel": "günstig für Europa",
|
||||||
|
"priceBadge": "Preis-Tipp 💚",
|
||||||
|
"priceBadgeClass": "pb-cheap",
|
||||||
|
"scoreFelix": 75,
|
||||||
|
"scoreLea": 70,
|
||||||
|
"scoreCar": 75,
|
||||||
|
"flight": "3h",
|
||||||
|
"from": "HAM→MLA",
|
||||||
|
"climate": "30–34°C",
|
||||||
|
"available": "ab 13.Jul ✓",
|
||||||
|
"highlight": "Kleinste Insel Europas · EU · Günstig · Englisch",
|
||||||
|
"pros": ["Direktflug 3h, günstig", "EU-Standards, kein Visum", "Gozo für Mietwagen-Touren"],
|
||||||
|
"cons": ["Kaum Sandstrand (Felsküste)", "Sehr heiß + touristisch im Juli"],
|
||||||
|
"felixMinAge": 0,
|
||||||
|
"season": ["4","5","6","7","8","9","10"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "lanzarote",
|
||||||
|
"emoji": "🌋",
|
||||||
|
"name": "Lanzarote",
|
||||||
|
"country": "🇪🇸 Kanaren",
|
||||||
|
"sub": "Vulkaninsel · Puerto del Carmen",
|
||||||
|
"status": "OK",
|
||||||
|
"price": 2800,
|
||||||
|
"priceLabel": "HP + Flug",
|
||||||
|
"priceBadge": "Günstig ✓",
|
||||||
|
"priceBadgeClass": "pb-cheap",
|
||||||
|
"scoreFelix": 80,
|
||||||
|
"scoreLea": 70,
|
||||||
|
"scoreCar": 80,
|
||||||
|
"flight": "4h 45",
|
||||||
|
"from": "HAM→ACE",
|
||||||
|
"climate": "25–28°C",
|
||||||
|
"available": "ab 13.Jul ✓",
|
||||||
|
"highlight": "Ruhigste Kanareninseln · Vulkan-Landschaft · César Manrique",
|
||||||
|
"pros": ["Ruhiger als GC/Teneriffa", "Timanfaya Vulkan per Mietwagen", "Passat-Klima: 25–28°C"],
|
||||||
|
"cons": ["Kanaren = schon dreimal", "Weniger Kinderclub-Auswahl"],
|
||||||
|
"felixMinAge": 0,
|
||||||
|
"season": ["1","2","3","4","5","6","7","8","9","10","11","12"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "costa-sol",
|
||||||
|
"emoji": "🌞",
|
||||||
|
"name": "Costa del Sol / Málaga",
|
||||||
|
"country": "🇪🇸 Andalusien",
|
||||||
|
"sub": "Nerja · Marbella · Direktflug HAM",
|
||||||
|
"status": "OK",
|
||||||
|
"price": 2700,
|
||||||
|
"priceLabel": "HP + Direktflug",
|
||||||
|
"priceBadge": "Günstig ✓",
|
||||||
|
"priceBadgeClass": "pb-cheap",
|
||||||
|
"scoreFelix": 80,
|
||||||
|
"scoreLea": 70,
|
||||||
|
"scoreCar": 90,
|
||||||
|
"flight": "3h 20",
|
||||||
|
"from": "HAM→AGP",
|
||||||
|
"climate": "32–38°C",
|
||||||
|
"available": "ab 13.Jul ✓",
|
||||||
|
"highlight": "Günstig · Andalusien Mietwagen-Touren",
|
||||||
|
"pros": ["Direktflug HAM→Málaga 3h20", "Nerja (schön + ruhig)", "Mietwagen: Granada, Alhambra, Ronda"],
|
||||||
|
"cons": ["32–38°C im Juli sehr heiß", "Viele Touristenstädte"],
|
||||||
|
"felixMinAge": 0,
|
||||||
|
"season": ["4","5","6","9","10"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "msc-kreuzfahrt",
|
||||||
|
"emoji": "🛳️",
|
||||||
|
"name": "MSC / TUI Cruises",
|
||||||
|
"country": "🚢 Mittelmeer",
|
||||||
|
"sub": "Alternative zu AIDA",
|
||||||
|
"status": "MAYBE",
|
||||||
|
"price": 3000,
|
||||||
|
"priceLabel": "inkl. Flug",
|
||||||
|
"priceBadge": "Im Budget",
|
||||||
|
"priceBadgeClass": "pb-mid",
|
||||||
|
"scoreFelix": 90,
|
||||||
|
"scoreLea": 80,
|
||||||
|
"scoreCar": 20,
|
||||||
|
"flight": "2h",
|
||||||
|
"from": "Flug FCO/VCE",
|
||||||
|
"climate": "25–30°C",
|
||||||
|
"available": "Prüfen",
|
||||||
|
"highlight": "Alternative Reederei · Evtl. günstigere Routen",
|
||||||
|
"pros": ["MSC Grandiosa familienfreundlich", "Evtl. günstigere Kabinen", "Mein Schiff deutschsprachig"],
|
||||||
|
"cons": ["Kein AIDA-Erfahrungsvorteil", "Kinderprogramm variiert"],
|
||||||
|
"felixMinAge": 0,
|
||||||
|
"season": ["5","6","7","8","9","10"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "korsika",
|
||||||
|
"emoji": "⛰️",
|
||||||
|
"name": "Korsika direkt",
|
||||||
|
"country": "🇫🇷 Frankreich",
|
||||||
|
"sub": "Palombaggia · Porto-Vecchio · Bonifacio",
|
||||||
|
"status": "MAYBE",
|
||||||
|
"price": 3200,
|
||||||
|
"priceLabel": "Ferienwohnung + Flug",
|
||||||
|
"priceBadge": "Im Budget",
|
||||||
|
"priceBadgeClass": "pb-mid",
|
||||||
|
"scoreFelix": 70,
|
||||||
|
"scoreLea": 70,
|
||||||
|
"scoreCar": 100,
|
||||||
|
"flight": "via Paris",
|
||||||
|
"from": "Umsteigen!",
|
||||||
|
"climate": "28–32°C",
|
||||||
|
"available": "Hochpreis",
|
||||||
|
"highlight": "Schönste Strände Europas · Lea hat Korsika okayed",
|
||||||
|
"pros": ["Palombaggia: traumhaft", "Lea okay für Korsika"],
|
||||||
|
"cons": ["Kein Direktflug ab HAM/HAJ", "Hochpreisinsel im Sommer"],
|
||||||
|
"note": "Besser als AIDA-Stopp in Ajaccio als Kreuzfahrt-Erlebnis.",
|
||||||
|
"felixMinAge": 0,
|
||||||
|
"season": ["5","6","7","8","9"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "madeira",
|
||||||
|
"emoji": "🌺",
|
||||||
|
"name": "Madeira",
|
||||||
|
"country": "🇵🇹 Portugal",
|
||||||
|
"sub": "Dritter Anlauf · Levadas · Porto Moniz",
|
||||||
|
"status": "SPÄTER",
|
||||||
|
"price": 3000,
|
||||||
|
"priceLabel": "Flug + Hotel HP",
|
||||||
|
"priceBadge": "Im Budget",
|
||||||
|
"priceBadgeClass": "pb-mid",
|
||||||
|
"scoreFelix": 40,
|
||||||
|
"scoreLea": 80,
|
||||||
|
"scoreCar": 100,
|
||||||
|
"flight": "4h 30",
|
||||||
|
"from": "HAM→FNC",
|
||||||
|
"climate": "22–25°C",
|
||||||
|
"available": "2028?",
|
||||||
|
"highlight": "Lea: \"wenn Felix älter ist\" · 2× Corona-Storno · 3. Anlauf!",
|
||||||
|
"pros": ["22–25°C – mildestes Klima", "Mietwagen-Paradies (Levadas)", "Vertraut – 2× geplant gewesen"],
|
||||||
|
"cons": ["Kaum Sandstrand für Felix", "Lea: explizit \"warten bis Felix größer\""],
|
||||||
|
"note": "📅 Ab Felix 5J+ (ca. 2028/29)",
|
||||||
|
"felixMinAge": 5,
|
||||||
|
"season": ["1","2","3","4","5","6","7","8","9","10","11","12"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "schweden",
|
||||||
|
"emoji": "🦌",
|
||||||
|
"name": "Schweden",
|
||||||
|
"country": "🇸🇪 Schweden",
|
||||||
|
"sub": "Bohuslän · Astrid Lindgrens Welt",
|
||||||
|
"status": "SPÄTER",
|
||||||
|
"price": 2800,
|
||||||
|
"priceLabel": "Ferienhäuser + Mietwagen",
|
||||||
|
"priceBadge": "Günstig ✓",
|
||||||
|
"priceBadgeClass": "pb-cheap",
|
||||||
|
"scoreFelix": 85,
|
||||||
|
"scoreLea": 50,
|
||||||
|
"scoreCar": 100,
|
||||||
|
"flight": "1h 20",
|
||||||
|
"from": "HAM→GOT",
|
||||||
|
"climate": "18–24°C",
|
||||||
|
"available": "2027",
|
||||||
|
"highlight": "Till's Herzensthema · Astrid Lindgrens Welt!",
|
||||||
|
"pros": ["Astrid Lindgrens Welt (Felix mit 4J+)", "Direktflug HAM→Göteborg 1:20h", "Natur pur: Seen, Wälder, Schären"],
|
||||||
|
"cons": ["Lea: \"nicht meine Vorstellung von Sommerurlaub\"", "Wetter wechselhaft"],
|
||||||
|
"note": "📅 Ab Felix 4J (ca. 2027) – Astrid Lindgrens Welt!",
|
||||||
|
"felixMinAge": 4,
|
||||||
|
"season": ["6","7","8"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "bali",
|
||||||
|
"emoji": "🌴",
|
||||||
|
"name": "Bali",
|
||||||
|
"country": "🇮🇩 Indonesien",
|
||||||
|
"sub": "Jenny's Verbindung · Ubud · Seminyak",
|
||||||
|
"status": "SPÄTER",
|
||||||
|
"price": 6000,
|
||||||
|
"priceLabel": "Flug + Villa",
|
||||||
|
"priceBadge": "Über Budget",
|
||||||
|
"priceBadgeClass": "pb-pricey",
|
||||||
|
"scoreFelix": 50,
|
||||||
|
"scoreLea": 95,
|
||||||
|
"scoreCar": 80,
|
||||||
|
"flight": "~14h",
|
||||||
|
"from": "Umsteigen",
|
||||||
|
"climate": "28–32°C",
|
||||||
|
"available": "2030+",
|
||||||
|
"highlight": "Lea's Freundin Jenny hat Mann aus Bali",
|
||||||
|
"pros": ["Traumziel für beide", "Günstige Luxusvillen mit Pool", "Jenny als Insider-Kontakt"],
|
||||||
|
"cons": ["Langer Flug + Zeitzone (+6h)", "Gesundheit/Impfungen", "Aktuell zu teuer"],
|
||||||
|
"note": "📅 Ab Felix 7–8J (ca. 2030)",
|
||||||
|
"felixMinAge": 7,
|
||||||
|
"season": ["4","5","6","7","8","9"]
|
||||||
|
}
|
||||||
|
]
|
||||||
+779
-1068
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user