Egypt Tours
Egypt Tours — Wereldwijd Ervaringsplatform Het leveren van tour- en reiservaringen met een hoge conversie en SEO-focus, met enterprise-grade techniek voor snelheid, betrouwbaarheid en lokalisatie.
Egypt Tours — Wereldwijd Ervaringsplatform
Het leveren van tour- en reiservaringen met een hoge conversie en SEO-focus, met enterprise-grade techniek voor snelheid, betrouwbaarheid en lokalisatie.
Deze repository is een productie-georiënteerde Laravel-applicatie die een toeristisch platform voor meerdere talen en valuta's aandrijft. Het lost het reële probleem op van het beheren van grote voorraden heterogene reisproducten (dagtochten, pakketten, cruises) door het bieden van:
- Een snelle, filterbare productcatalogus geoptimaliseerd voor queries met lage latentie en gefacetteerd zoeken.
- Een flexibele prijs- en boekingsengine die ondersteuning biedt voor prijsstelling op basis van datumbereiken, hut/kamer-varianten en prijsbeleid voor kinderen.
- Volledige lokalisatie (taal- + slug-vertaling) en valutaomrekening voor een wereldwijd publiek.
Kernwaardepropositie & Marketinghoogtepunten
-
Prestaties & Schaalbaarheid: Het platform is gebouwd op Laravel 12 en geoptimaliseerd voor schaalbaarheid met strategische denormalisatie (de
product_filters-tabel), Redis-vriendelijke caching in services zoalsCurrencyServiceen Vite-gebaseerde frontend-bundeling. Zware aggregatie wordt vooraf berekend tijdens het schrijven, wat extreem snelle leespaden voor filteren en weergeven mogelijk maakt. -
UX / UI Uitmuntendheid: Tailwind CSS v4 + Vite leveren een responsieve, component-gedreven UI. Progressive enhancement en JSON-endpoints (bijv.
/api/tours-list) zijn inbegrepen om snelle client-side ervaringen en autocomplete-widgets te ondersteunen. -
Beveiliging & Betrouwbaarheid: Standaarden volgen Laravel-best-practices—strikte omgevingsgestuurde configuratie, CSRF-beschermde formulieren, rigoureuze validatie via Form Requests en een Filament-admin voor veilige CRUD. Het project bevat Pest-tests en code-opmaak via Pint voor ontwikkelaarshygiëne.
Technische Architectuur & Stack
-
Backend / API
- Framework: Laravel 12 (PHP ^8.2).
- Patroon: MVC + Service-laag. Belangrijke services zijn onder andere
FilterService,PricingServiceenCurrencyService(zie app/Services). - Admin: Filament v5 voor contentbeheer en veilige admin UX.
- Database: Relationeel (Postgres aanbevolen). Het schema bevat gedenormaliseerde
product_filtersom gefacetteerde queries te versnellen.
-
Frontend
- Tooling: Vite, Tailwind CSS v4.
- Componenten: Herbruikbare Blade-componenten en JSON-first endpoints voor asynchrone UI (zoeken/autocomplete).
- Third-party: Swiper voor carrousels.
-
DevOps & Infrastructuur
- Lokale ontwikkelaarsscripts zijn voorzien in composer.json (
setup,dev,test). - CI: Het project gebruikt Pest voor tests en Pint voor opmaak; integreer in CI-pipelines om kwaliteitscontroles af te dwingen.
- Cache: Gebruikt Laravel Cache (Redis aanbevolen) voor valutalijsten en berekende filters.
- Containerisatie: Werkt binnen Docker via Laravel Sail of uw gewenste PHP-runtime.
- Lokale ontwikkelaarsscripts zijn voorzien in composer.json (
Architectuurdiagram
graph LR
A[Gebruikersbrowser] -->|HTTP/HTTPS| B[Laravel Frontend (Blade + Vite)]
B --> C[Routes/Controllers]
C --> D[Service-laag]
D -->|schrijft| E[product_filters tabel]
D -->|leest/schrijft| F[Producten / Prijzen / Vertrekken]
F --> G[Postgres]
D --> H[CurrencyService Cache (Redis)]
I[Filament Admin] --> F
Belangrijkste Functies & Diepgaande Technische Analyses
- Productfilters (snel gefacetteerd zoeken)
- Functie: Vooraf berekende productfilters opgeslagen in
product_filtersom efficiënt gefacetteerd filteren over landen, bestemmingen, taxonomieën, prijsbereiken en duur mogelijk te maken. - De uitdaging: Het uitvoeren van ad-hoc joins of zware aggregaties over grote productcatalogi en vertalingen veroorzaakt trage paginaladingen en complexe queries.
- Technische oplossing:
FilterService::rebuildProductFilters()(zie app/Services/FilterService.php) stelt genormaliseerde rijen samen bij het opslaan/bijwerken van een product en voegt deze inproduct_filtersin. Het leespad gebruikt intersectie-logica (getProductIdsByFilters) om filtercriteria efficiënt te combineren—dit verandert veel-op-veel zoekopdrachten in eenvoudige geïndexeerde queries en vermindert de database-druk tijdens runtime.
- Prijsstelling & Boeking (datumbereiken, hutten, kinderbeleid)
- Functie: Nauwkeurige offerteberekening over prijstvarianten (per persoon, per hut), vertrekken en overschrijvingen van datumbereiken.
- De uitdaging: Prijsregels variëren per reisdatum, hut- of kamertype en kinder-kortingsbeleid, en het systeem moet consistente, controleerbare offertes retourneren.
- Technische oplossing:
PricingService::calculateQuote()(zie app/Services/PricingService.php) lost de juiste basisunit op door te controleren op vertrekspecifieke prijzen, hutprijzen, gedateerde prijsrijen en uiteindelijk veilige fallbacks. Kinder-prijsstelling gebruiktchildPolicyRulesom kortingen per leeftijd te berekenen; valutaomrekening wordt gedelegeerd aanCurrencyServicevoor één enkele bron van waarheid. De implementatie gebruikt verstandige ordening (bereik->fallback->created_at) om deterministisch de juiste prijsrij te selecteren.
- Meertalige routing & SEO
- Functie: Gelokaliseerde routes met vertaalde slugs, canonieke URL's en taalspecifieke filters.
- De uitdaging: SEO-vriendelijke gelokaliseerde content serveren terwijl routeringsconflicten met gereserveerde slugs worden vermeden en achterwaartse compatibiliteit behouden blijft.
- Technische oplossing: Routes worden gegroepeerd en beveiligd met
SetLocale-middleware en gelokaliseerde prefix-groepen in routes/web.php. Land-eerst en geneste productroutes gebruiken regex-uitsluitingen om botsingen met gereserveerde slugs te voorkomen. Vertalingen worden opgeslagen in per-entiteit vertalingstabellen en vertalingsbewuste filterrijen bevattenlanguage_idzodat UI-filters alleen relevante slugs tonen voor de geselecteerde locale.