Web Development April 2026 1195 views

Egypt-turer

Egypt-turer — Global plattform for reiseopplevelser Leverer konverteringsoptimaliserte, SEO-første reise- og opplevelsesopplevelser med ingeniørkunst i bedriftsklasse for hastighet, pålitelighet og lokalisering.

Egypt-turer

Egypt-turer — Global plattform for reiseopplevelser

Leverer konverteringsoptimaliserte, SEO-første reise- og opplevelsesopplevelser med ingeniørkunst i bedriftsklasse for hastighet, pålitelighet og lokalisering.

Dette depotet er en produksjonsorientert Laravel-applikasjon som driver en reiseplattform med støtte for flere språk og valutaer. Den løser den virkelige utfordringen med å drifte store varelager av heterogene reiseprodukter (dagsturer, pakker, cruise) ved å tilby:

  • En rask, filtrerbar produktkatalog optimalisert for spørringer med lav forsinkelse og fasetterte søk.
  • En fleksibel pris- og bestillingsmotor som støtter prising basert på datoperioder, varianttyper for lugarer/rom, og prisregler for barn.
  • Fullstendig lokalisering (oversettelse av språk og URL-slugs) og valutakonvertering for et globalt publikum.

Kjerne-verdiforslag og markedsføringshøydepunkter

  • Ytelse og skalerbarhet: Plattformen er bygget på Laravel 12 og optimalisert for skalering med strategisk denormalisering (tabellen product_filters), Redis-vennlig caching i tjenester som CurrencyService, og Vite-drevet frontend-pakking. Tunge aggregeringer forhåndsberegnes ved skriving, noe som muliggjør ekstremt raske lesestier for filtrering og visning.

  • UX / UI-fortreffelighet: Tailwind CSS v4 + Vite leverer et responsivt, komponentdrevet brukergrensesnitt. Progressiv forbedring og JSON-endepunkter (f.eks. /api/tours-list) er inkludert for å støtte raske klient-side-opplevelser og autofullføring-widgets.

  • Sikkerhet og pålitelighet: Standardinnstillinger følger bestepraksis i Laravel—streng miljøstyrt konfigurasjon, CSRF-beskyttede skjemaer, streng validering gjennom Form Requests, og en Filament-administrator for sikker CRUD. Prosjektet inkluderer Pest-tester og kodeformatering via Pint for god utviklerhygiene.

Teknisk arkitektur og stack

  • Backend / API

    • Rammeverk: Laravel 12 (PHP ^8.2).
    • Mønster: MVC + tjenestelag. Sentrale tjenester inkluderer FilterService, PricingService og CurrencyService (se app/Services).
    • Administrator: Filament v5 for innholdsstyring og sikker administrator-UX.
    • Database: Relasjonell (Postgres anbefales). Skjemaet inkluderer denormaliserte product_filters for å akselerere fasetterte spørringer.
  • Frontend

    • Verktøy: Vite, Tailwind CSS v4.
    • Komponenter: Gjenbrukbare Blade-komponenter og JSON-første endepunkter for asynkron UI (søk/autofullføring).
    • Tredjepart: Swiper for karuseller.
  • DevOps og infrastruktur

    • Lokale utviklerskript er gitt i composer.json (setup, dev, test).
    • CI: Prosjektet bruker Pest for tester og Pint for formatering; integreres i CI-rørledninger for å håndheve kvalitetskrav.
    • Cache: Bruker Laravel Cache (Redis anbefales) for valutalister og beregnede filtre.
    • Containerisering: Fungerer i Docker via Laravel Sail eller din foretrukne PHP-runtime.

Arkitekturdiagram

graph LR
	A[Brukerleser] -->|HTTP/HTTPS| B[Laravel Frontend (Blade + Vite)]
	B --> C[Ruter/Kontrollere]
	C --> D[Tjenestelag]
	D -->|skriver| E[product_filters tabell]
	D -->|leser/skriver| F[Produkter / Priser / Avganger]
	F --> G[Postgres]
	D --> H[CurrencyService Cache (Redis)]
	I[Filament Administrator] --> F

Sentrale funksjoner og dypdykk i det tekniske

  1. Produktfiltre (raskt fasettert søk)
  • Funksjon: Forhåndsberegnede produktfiltre lagret i product_filters for å tillate effektiv fasettert filtrering på tvers av land, destinasjoner, taksonomier, prisklasser og varighet.
  • Utfordringen: Å kjøre ad-hoc-koblinger eller tunge aggregeringer på tvers av store produktkataloger og oversettelser fører til langsomme sidelastinger og komplekse spørringer.
  • Teknisk løsning: FilterService::rebuildProductFilters() (se app/Services/FilterService.php) sammensetter normaliserte rader ved lagring/oppdatering av produkter og setter dem inn i product_filters. Lesestien bruker skjæringspunkt-logikk (getProductIdsByFilters) for å kombinere filterkriterier effektivt—dette gjør mange-til-mange-oppslag til enkle indekserte spørringer og reduserer runtime-press på databasen.
  1. Prising og bestilling (datoperioder, lugarer, barnepolitikk)
  • Funksjon: Nøyaktig priskalkulering på tvers av prisvarianter (per person, per lugar), avganger og overstyringer av datoperioder.
  • Utfordringen: Prisregler varierer etter reisedato, lugar- eller romtyper og rabattregler for barn, og systemet må returnere konsistente, reviderbare tilbud.
  • Teknisk løsning: PricingService::calculateQuote() (se app/Services/PricingService.php) løser den korrekte basiseenheten ved å sjekke avgangsspesifikke priser, lugarpriser, daterte prisrader og til slutt trygge reserveløsninger. Barneprising bruker childPolicyRules for å beregne rabatter per alder; valutakonvertering delegeres til CurrencyService for en enkelt sannhetskilde. Implementeringen bruker fornuftig rekkefølge (periode->reserveløsning->opprettet_tid) for å deterministisk velge korrekt prisrad.
  1. Ruting for flere språk og SEO
  • Funksjon: Lokaliserte ruter med oversatte URL-slugs, kanoniske URL-er og språkbevisste filtre.
  • Utfordringen: Å betjene SEO-vennlig lokalisert innhold samtidig som man unngår rutingskonflikter med reserverte slugs og bevarer bakoverkompatibilitet.
  • Teknisk løsning: Ruter grupperes og beskyttes med SetLocale-middleware og lokaliserte prefiksgrupper i routes/web.php. Landsførste og nestede produktruter bruker regex-ekskluderinger for å unngå kollisjoner med reserverte slugs. Oversettelser lagres i tabeller for hver entitet, og filterrader som er klar over oversettelse inkluderer language_id, slik at UI-filtre kun viser relevante slugs for det valgte språket.