Web Development April 2026 1198 views

Egypten-Reise

Egypt Tours — Global Experiences Platform Leistungsstarke, SEO-optimierte Reiseerlebnisse mit Enterprise-Engineering für Geschwindigkeit, Zuverlässigkeit und Lokalisierung.

Egypten-Reise

Egypt Tours — Globale Erlebnisse-Plattform

Leistungsstarke, SEO-optimierte Reiseerlebnisse mit Enterprise-Engineering für Geschwindigkeit, Zuverlässigkeit und Lokalisierung.

Dieses Repository ist eine produktionsorientierte Laravel-Anwendung, die eine mehrsprachige Plattform für Tourismus mit mehreren Währungen antreibt. Sie löst das reale Problem der Verwaltung grosser Bestände heterogener Reiseprodukte (Tagestouren, Pakete, Kreuzfahrten) durch:

  • Einen schnellen, filterbaren Produktkatalog, der für Abfragen mit geringer Latenz und facettierte Suchen optimiert ist.
  • Eine flexible Preis- und Buchungsmaschine, die preisbasierte Zeiträume, Kabinen-/Zimmervarianten und Richtlinien für Kinderpreise unterstützt.

Kern-Wertversprechen & Marketing-Highlights

  • Performance & Skalierbarkeit: Die Plattform basiert auf Laravel 12 und ist für Skalierbarkeit optimiert – mit strategischer Denormalisierung (der product_filters-Tabelle), Redis-freundlichem Caching in Diensten wie CurrencyService und Vite-gestütztem Frontend-Bundling. Schwere Aggregationen werden zum Zeitpunkt des Schreibens vorausberechnet, was extrem schnelle Lesepfade für Filterung und Auflistung ermöglicht.

  • UX / UI-Exzellenz: Tailwind CSS v4 + Vite liefern eine reaktionsschnelle, komponentenbasierte UI. Progressive Enhancement und JSON-Endpunkte (z.B. /api/tours-list) sind enthalten, um schnelle clientseitige Erlebnisse und Autocomplete-Widgets zu unterstützen.

  • Sicherheit & Zuverlässigkeit: Die Standards folgen den Laravel-Best-Practices—strenge umgebungsgesteuerte Konfiguration, CSRF-geschützte Formulare, gründliche Validierung durch Form Requests und ein Filament-Admin-Bereich für sicheres CRUD. Das Projekt enthält Pest-Tests und Code-Formatierung via Pint für die Entwicklerhygiene.

Technische Architektur & Stack

  • Backend / API

    • Framework: Laravel 12 (PHP ^8.2).
    • Muster: MVC + Service-Layer. Zu den wichtigsten Diensten gehören FilterService, PricingService und CurrencyService (siehe app/Services).
    • Admin: Filament v5 für Inhaltsverwaltung und sichere Admin-UX.
    • Datenbank: Relational (Postgres empfohlen). Das Schema beinhaltet denormalisierte product_filters zur Beschleunigung facettierter Abfragen.
  • Frontend

    • Tools: Vite, Tailwind CSS v4.
    • Komponenten: Wiederverwendbare Blade-Komponenten und JSON-Endpunkte für asynchrone UI (Suche/Autocomplete).
    • Drittanbieter: Swiper für Karussells.
  • DevOps & Infrastruktur

    • Lokale Entwicklerskripte werden in composer.json bereitgestellt (setup, dev, test).
    • CI: Das Projekt verwendet Pest für Tests und Pint für Formatierung; Integration in CI-Pipelines zur Durchsetzung von Qualitätsgates.
    • Cache: Verwendet Laravel Cache (Redis empfohlen) für Währungslisten und berechnete Filter.
    • Containerisierung: Funktioniert in Docker via Laravel Sail oder Ihrer bevorzugten PHP-Runtime.

Architektur-Diagramm

graph LR
	A[Benutzer-Browser] -->|HTTP/HTTPS| B[Laravel-Frontend (Blade + Vite)]
	B --> C[Routen/Controller]
	C --> D[Service-Layer]
	D -->|schreibt| E[product_filters-Tabelle]
	D -->|liest/schreibt| F[Produkte / Preise / Abfahrten]
	F --> G[Postgres]
	D --> H[CurrencyService Cache (Redis)]
	I[Filament-Admin] --> F

Hauptfunktionen & technische Vertiefungen

  1. Produktfilter (schnelle facettierte Suche)
  • Funktion: Vorausberechnete Produktfilter, die in product_filters gespeichert sind, um eine effiziente facettierte Filterung über Länder, Ziele, Taxonomien, Preisbereiche und Dauer hinweg zu ermöglichen.
  • Die Herausforderung: Ad-hoc-Joins oder schwere Aggregationen über grosse Produktkataloge und Übersetzungen hinweg führen zu langsamen Seitenaufrufen und komplexen Abfragen.
  • Technische Lösung: FilterService::rebuildProductFilters() (siehe app/Services/FilterService.php) setzt normalisierte Zeilen beim Speichern/Aktualisieren eines Produkts zusammen und fügt sie in product_filters ein. Der Lesepfad verwendet Schnittmengen-Logik (getProductIdsByFilters), um Filterkriterien effizient zu kombinieren—dies verwandelt Many-to-Many-Lookups in einfache indexierte Abfragen und reduziert den Datenbankdruck zur Laufzeit.
  1. Preisgestaltung & Buchung (Zeiträume, Kabinen, Kinderrichtlinien)
  • Funktion: Genaue Angebotskalkulation über Preisvarianten (pro Person, pro Kabine), Abfahrten und Überschreibungen von Datumsbereichen.
  • Die Herausforderung: Preisregeln variieren je nach Reisedatum, Kabinen- oder Zimmertyp und Kinderermässigungsrichtlinien; das System muss konsistente, prüfbare Angebote zurückgeben.
  • Technische Lösung: PricingService::calculateQuote() (siehe app/Services/PricingService.php) bestimmt die korrekte Basiseinheit durch Prüfung abfahrtsspezifischer Preise, Kabinenpreise, datierter Preiszeilen und schliesslich sicherer Fallbacks. Kinderpreise verwenden childPolicyRules zur Berechnung von Rabatten pro Alter; die Währungsumrechnung wird an CurrencyService delegiert, um eine einzige Quelle der Wahrheit zu haben. Die Implementierung verwendet eine sinnvolle Reihenfolge (Bereich->Fallback->Erstellt-am), um die korrekte Preiszeile deterministisch auszuwählen.
  1. Mehrsprachiges Routing & SEO
  • Funktion: Lokalisierte Routen mit übersetzten Slugs, kanonischen URLs und sprachbewussten Filtern.
  • Die Herausforderung: Bereitstellung von SEO-freundlichen, lokalisierten Inhalten unter Vermeidung von Routing-Konflikten mit reservierten Slugs und Wahrung der Abwärtskompatibilität.
  • Technische Lösung: Routen werden gruppiert und mit SetLocale-Middleware und lokalisierten Präfixgruppen in routes/web.php geschützt. Länder-fokussierte und verschachtelte Produktrouten verwenden Regex-Ausschlüsse, um Kollisionen mit reservierten Slugs zu vermeiden. Übersetzungen werden in tabellenspezifischen Übersetzungstabellen gespeichert und übersetzungsbewusste Filterzeilen enthalten language_id, damit UI-Filter nur relevante Slugs für die ausgewählte Sprache anzeigen.