Web Development April 2026 1197 views

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

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 som CurrencyService, 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, PricingService och CurrencyService (se app/Services).
    • Admin: Filament v5 för innehållshantering och säker admin-UX.
    • Databas: Relationell (Postgres rekommenderas). Schemat inkluderar denormaliserade product_filters fö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.

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

  1. Produktfilter (snabb facetterad sökning)
  • Funktion: Förberäknade produktfilter lagrade i product_filters fö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 i product_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.
  1. 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änder childPolicyRules för att beräkna rabatter baserat på ålder; valutakonvertering delegeras till CurrencyService för en enda sanningskälla. Implementeringen använder en logisk ordning (intervall->fallback->created_at) för att deterministiskt välja rätt prisrad.
  1. 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 inkluderar language_id så att UI-filter endast visar relevanta slugs för det valda språket.