Web Development April 2026 1190 views

Egypt Tours

Egypt Tours — Global platform for oplevelser Leverer højkonverterende, SEO-første tour- og rejseoplevelser med enterprise-grade ingeniørarbejde for hastighed, pålidelighed og lokalisering.

Egypt Tours

Egypt Tours — Global platform for oplevelser

Leverer højkonverterende, SEO-første tour- og rejseoplevelser med enterprise-grade ingeniørarbejde for hastighed, pålidelighed og lokalisering.

Dette repository er en produktionsorienteret Laravel-applikation, der driver en flersproget og multivaluta-turismeplatform. Den løser den virkelige udfordring ved at drive store lagre af heterogene rejseprodukter (dagsture, pakker, krydstogter) ved at levere:

  • Et hurtigt, filterbart produktkatalog optimeret til forespørgsler med lav latenstid og facetterede søgninger.
  • En fleksibel pris- og bookingsmotor, der understøtter prissætning baseret på datointervaller, varianter af kahyt/værelse og børneprispolitikker.
  • Fuld lokalisering (sprog- og slug-oversættelse) samt valutakonvertering til et globalt publikum.

Kerneværdi og markedsføringshøjdepunkter

  • Performance & Skalerbarhed: Platformen er bygget på Laravel 12 og optimeret til skalering med strategisk denormalisering (product_filters-tabellen), Redis-venlig caching i services som CurrencyService og Vite-drevet frontend-bundling. Tunge aggregeringer forudberegnes ved skrive-tidspunkt, hvilket muliggør ekstremt hurtige læsestier for filtrering og visning.

  • UX / UI Excellence: Tailwind CSS v4 + Vite leverer en responsiv, komponentdrevet brugerflade. Progressiv forbedring og JSON-endepunkter (f.eks. /api/tours-list) er inkluderet for at understøtte hurtige klient-side oplevelser og autocompleter-widgets.

  • Sikkerhed & Pålidelighed: Standarderne følger Laravel best-practices—stram miljødrevet konfiguration, CSRF-beskyttede formularer, streng validering gennem Form Requests og en Filament-admin til sikker CRUD. Projektet inkluderer Pest-tests og kodeformatering via Pint for at sikre udviklerhygiejne.

Teknisk arkitektur & Stack

  • Backend / API

    • Framework: Laravel 12 (PHP ^8.2).
    • Mønster: MVC + Service-lag. Centrale services inkluderer FilterService, PricingService og CurrencyService (se app/Services).
    • Admin: Filament v5 til indholdsstyring og sikker admin-UX.
    • Database: Relationel (Postgres anbefales). Skemaet inkluderer denormaliserede product_filters for at accelerere facetterede forespørgsler.
  • Frontend

    • Værktøjer: Vite, Tailwind CSS v4.
    • Komponenter: Genanvendelige Blade-komponenter og JSON-første endepunkter til asynkron UI (søgning/autocompleter).
    • Tredjepart: Swiper til karruseller.
  • DevOps & Infrastruktur

    • Lokale udviklerscripts findes i composer.json (setup, dev, test).
    • CI: Projektet bruger Pest til tests og Pint til formatering; integreres i CI-pipelines for at håndhæve kvalitetskrav.
    • Cache: Bruger Laravel Cache (Redis anbefales) til valutalister og beregnede filtre.
    • Containerisering: Kører i Docker via Laravel Sail eller dit foretrukne PHP-runtime.

Arkitekturdiagram

graph LR
	A[Brugerbrowser] -->|HTTP/HTTPS| B[Laravel Frontend (Blade + Vite)]
	B --> C[Routes/Controllers]
	C --> D[Service-lag]
	D -->|skriver| E[product_filters tabel]
	D -->|læser/skriver| F[Produkter / Prissætning / Afgange]
	F --> G[Postgres]
	D --> H[CurrencyService Cache (Redis)]
	I[Filament Admin] --> F

Nøglefunktioner & Dybdegående tekniske analyser

  1. Produktfiltre (hurtig facetteret søgning)
  • Funktion: Forudberegnede produktfiltre gemt i product_filters for at tillade effektiv facetteret filtrering på tværs af lande, destinationer, taksonomier, prisklasser og varighed.
  • Udfordringen: At køre ad-hoc joins eller tunge aggregeringer på tværs af store produktkataloger og oversættelser medfører langsomme sideindlæsninger og komplekse forespørgsler.
  • Teknisk løsning: FilterService::rebuildProductFilters() (se app/Services/FilterService.php) sammensætter normaliserede rækker ved produktlagring/opdatering og indsætter dem i product_filters. Læsestien bruger skæringsmængdelogik (getProductIdsByFilters) for at kombinere filterkriterier effektivt—dette forvandler mange-til-mange-opslag til simple indekserede forespørgsler og reducerer DB-belastningen ved runtime.
  1. Prissætning & Booking (datointervaller, kahytter, børnepolitikker)
  • Funktion: Nøjagtig tilbudsberegning på tværs af prisvarianter (pr. person, pr. kahyt), afgange og overskrivninger af datointervaller.
  • Udfordringen: Prisregler varierer efter rejsedato, kahyt- eller værelsestyper og børnerabatpolitikker, og systemet skal returnere konsistente, auditerbare tilbud.
  • Teknisk løsning: PricingService::calculateQuote() (se app/Services/PricingService.php) finder den korrekte basisenhed ved at tjekke afgangsspecifikke priser, kahytpriser, daterede prisrækker og endelig sikre fallbacks. Børnepriser bruger childPolicyRules til at beregne rabatter pr. alder; valutakonvertering delegeres til CurrencyService som en enkelt sandhedskilde. Implementeringen bruger fornuftig sortering (interval->fallback->oprettet_dato) for deterministisk at vælge den korrekte prisrække.
  1. Flersproget routing & SEO
  • Funktion: Lokaliserede ruter med oversatte slugs, kanoniske URL'er og sprogbevidste filtre.
  • Udfordringen: At servere SEO-venligt lokaliseret indhold, mens man undgår routing-konflikter med reserverede slugs og bevarer bagudkompatibilitet.
  • Teknisk løsning: Ruter grupperes og beskyttes med SetLocale middleware og lokaliserede præfiksgrupper i routes/web.php. Lande-først og nestede produktruter bruger regex-ekskluderinger for at undgå kollisioner med reserverede slugs. Oversættelser gemmes i oversættelsestabeller pr. entitet, og oversættelsesbevidste filterrækker inkluderer language_id, så UI-filtre kun viser relevante slugs for den valgte lokalitet.