Egypt Tours
Egypt Tours — Global upplevelseplattform Levererar konverteringsoptimerade, SEO-förstahands-reseupplevelser med teknik av företagsklass för hastighet, tillförlitlighet och lokalisering.
Egypt Tours — Global upplevelseplattform
Levererar konverteringsoptimerade, SEO-förstahands-reseupplevelser med teknik av företagsklass för hastighet, tillförlitlighet och lokalisering.
Detta repository är en produktionsorienterad Laravel-applikation som driver en flerspråkig turismplattform med stöd för flera valutor. Den löser det verkliga problemet med att hantera stora lager av heterogena reseprodukter (dagsturer, paketresor, kryssningar) genom att erbjuda:
- En snabb, filtrerbar produktkatalog optimerad för frågor med låg latens och facetterad sökning.
- En flexibel pris- och bokningsmotor som stöder prisättning baserad på datumintervall, hytt-/rumsvarianter och policyer för barnpriser.
- Fullständig lokalisering (språk + översättning av slug) och valutakonvertering för en global publik.
Kärnvärde & Marknadsföringshöjdpunkter
-
Prestanda & Skalbarhet: Plattformen är byggd på Laravel 12 och optimerad för skalbarhet med strategisk denormalisering (tabellen
product_filters), Redis-vänlig cachning i tjänster somCurrencyService, och Vite-driven frontend-buntning. Tung aggregering förberäknas vid skrivtid, vilket möjliggör extremt snabba läsvägar för filtrering och listning. -
UX / UI-excellens: Tailwind CSS v4 + Vite levererar ett responsivt, komponentdrivet gränssnitt. Progressiv förbättring och JSON-endpoints (t.ex.
/api/tours-list) inkluderas för att stödja snabba klientupplevelser och autocomplete-widgets. -
Säkerhet & Tillförlitlighet: Standardinställningar följer Laravels bästa praxis—strikt miljödriven konfiguration, CSRF-skyddade formulär, rigorös validering genom Form Requests och ett Filament-admin för säker CRUD. Projektet inkluderar Pest-tester och kodformatering via Pint för hög utvecklarstandard.
Teknisk arkitektur & Stack
-
Backend / API
- Ramverk: Laravel 12 (PHP ^8.2).
- Mönster: MVC + Service-lager. Nyckeltjänster inkluderar
FilterService,PricingServiceochCurrencyService(se app/Services). - Admin: Filament v5 för innehållshantering och säker admin-UX.
- Databas: Relationell (Postgres rekommenderas). Schemat inkluderar denormaliserade
product_filtersför att accelerera facetterade frågor.
-
Frontend
- Verktyg: Vite, Tailwind CSS v4.
- Komponenter: Återanvändbara Blade-komponenter och JSON-först-endpoints för asynkront UI (sök/autocomplete).
- Tredjepart: Swiper för karuseller.
-
DevOps & Infrastruktur
- Lokala utvecklingsskript finns i composer.json (
setup,dev,test). - CI: Projektet använder Pest för tester och Pint för formatering; integrera i CI-pipelines för att upprätthålla kvalitetskrav.
- Cache: Använder Laravel Cache (Redis rekommenderas) för valutalistor och beräknade filter.
- Containerisering: Fungerar i Docker via Laravel Sail eller din föredragna PHP-runtime.
- Lokala utvecklingsskript finns i composer.json (
Arkitekturdiagram
graph LR
A[Användarens webbläsare] -->|HTTP/HTTPS| B[Laravel Frontend (Blade + Vite)]
B --> C[Routes/Controllers]
C --> D[Service-lager]
D -->|skriver| E[tabellen product_filters]
D -->|läser/skriver| F[Produkter / Prissättning / Avgångar]
F --> G[Postgres]
D --> H[CurrencyService Cache (Redis)]
I[Filament Admin] --> F
Nyckelfunktioner & Fördjupningar
- Produktfilter (snabb facetterad sökning)
- Funktion: Förberäknade produktfilter lagrade i
product_filtersför att tillåta effektiv facetterad filtrering över länder, destinationer, taxonomier, prisklasser och varaktighet. - Utmaningen: Att köra ad-hoc-kopplingar eller tunga aggregeringar över stora produktkataloger och översättningar orsakar långsamma sidladdningar och komplexa frågor.
- Teknisk lösning:
FilterService::rebuildProductFilters()(se app/Services/FilterService.php) komponerar normaliserade rader vid produktsparning/-uppdatering och infogar dem iproduct_filters. Läsbanan använder skärningslogik (getProductIdsByFilters) för att kombinera filterkriterier effektivt—detta förvandlar många-till-många-uppslag till enkla indexerade frågor och minskar trycket på databasen vid körning.
- Prissättning & Bokning (datumintervall, hytter, barnpolicyer)
- Funktion: Noggrann prisberäkning över prisvarianter (per person, per hytt), avgångar och åsidosättanden av datumintervall.
- Utmaningen: Prisregler varierar beroende på resedatum, hytt- eller rumstyper samt rabattpolicyer för barn, och systemet måste returnera konsekventa, reviderbara priser.
- Teknisk lösning:
PricingService::calculateQuote()(se app/Services/PricingService.php) löser den korrekta basenheten genom att kontrollera avgångsspecifika priser, hyttpriser, daterade prisrader och slutligen säkra alternativ. Barnprissättning använderchildPolicyRulesför att beräkna rabatter baserat på ålder; valutakonvertering delegeras tillCurrencyServiceför en enda sanningskälla. Implementeringen använder en logisk ordning (intervall->fallback->created_at) för att deterministiskt välja rätt prisrad.
- Flerspråkig routing & SEO
- Funktion: Lokaliserade rutter med översatta slugs, kanoniska URL:er och språkkänsliga filter.
- Utmaningen: Att servera SEO-vänligt lokaliserat innehåll samtidigt som man undviker routing-konflikter med reserverade slugs och bevarar bakåtkompatibilitet.
- Teknisk lösning: Rutter grupperas och skyddas med
SetLocale-middleware och lokaliserade prefixgrupper i routes/web.php. Lands-först- och kapslade produktrutter använder regex-undantag för att undvika kollisioner med reserverade slugs. Översättningar lagras i översättningstabeller per entitet, och språkkänsliga filterrader inkluderarlanguage_idså att UI-filter endast visar relevanta slugs för det valda språket.