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 — 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 somCurrencyServiceog 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,PricingServiceogCurrencyService(se app/Services). - Admin: Filament v5 til indholdsstyring og sikker admin-UX.
- Database: Relationel (Postgres anbefales). Skemaet inkluderer denormaliserede
product_filtersfor 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.
- Lokale udviklerscripts findes i composer.json (
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
- Produktfiltre (hurtig facetteret søgning)
- Funktion: Forudberegnede produktfiltre gemt i
product_filtersfor 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 iproduct_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.
- 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 brugerchildPolicyRulestil at beregne rabatter pr. alder; valutakonvertering delegeres tilCurrencyServicesom en enkelt sandhedskilde. Implementeringen bruger fornuftig sortering (interval->fallback->oprettet_dato) for deterministisk at vælge den korrekte prisrække.
- 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
SetLocalemiddleware 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 inkludererlanguage_id, så UI-filtre kun viser relevante slugs for den valgte lokalitet.