Web Development May 2026 1735 views

OCTOBOATS

OCTABOATS: Platform til booking af luksusyachter og rejseoplevelser i virksomhedsklasse

OCTOBOATS

OCTABOATS: Platform til booking af luksusyachter og rejseoplevelser i virksomhedsklasse

Premium Full-Stack SPA der udvikler en sømløs bookingoplevelse for luksuriøse maritime eventyr med betalingsorkestrering på virksomhedsniveau, tilgængelighedsstyring i realtid og et sofistikeret administrationsdashboard.

Business Case

OCTABOATS løser det fragmenterede marked for booking af luksusyachter og oplevelser ved at tilbyde en samlet, gnidningsfri platform, hvor kunder kan opdage, sammenligne og booke førsteklasses maritime oplevelser. Platformen forvandler bookingkompleksitet til en intuitiv, konverteringsoptimeret oplevelse—hvilket genererer højere gennemsnitlige ordreværdier (AOV) gennem intelligent mersalg, fleksible kampagner og strategiske værktøjer til at redde efterladte indkøbskurve. Bygget til ydelse på under et sekund, 99,9% betalingspålidelighed og sømløs skalerbarhed, demonstrerer OCTABOATS ingeniørpraksis i produktionskvalitet på alle arkitektoniske lag.


Kerneværdiforslag

Ydelse & Skalerbarhed

  • Optimeret forespørgselsafvikling: Eager-loading af relationer med strategiske forespørgselsbegrænsninger for at eliminere N+1-problemer på tværs af kurv-, checkout- og tilgængelighedsflows.
  • Intelligent caching-strategi: 1-times cache på hjemmesidens props (byer, lystbådehavne, yachtkataloger) med cache-invalidering ved kritiske opdateringer, hvilket reducerer databasebelastningen med ca. 70% på sider med høj trafik.
  • Databasearkitektur: Polymorfe relationer til en samlet bookingmodel (håndterer både yachter og ture), hvilket muliggør et enkelt forretningslogiklag for disparate produkttyper.
  • Tilgængelighedstjek i realtid: Race-condition-sikker validering af tilgængelighed ved brug af databasetransaktioner under checkout, hvilket forhindrer dobbeltbookinger og oversalg.

UX/UI Excellence

  • Responsivt luksusdesign: Mobile-first React-arkitektur med Tailwind CSS v4, der leverer pixel-perfekte oplevelser på alle skærmstørrelser.
  • Konverteringsoptimerede flows: Multi-step checkout med progressiv afsløring, kurve-persistens og accept af mersalg med et enkelt klik.
  • Premium komponentbibliotek: Radix UI headless-komponenter, der sikrer tilgængelighed (WCAG 2.1 AA) uden at gå på kompromis med designelegancen.
  • Intelligent formulardisponering: Server-side validering med Laravel Form Requests, feedback i realtid på klientsiden via TypeScript-typesikkerhed.
  • Understøttelse af Dark Mode: Tema-persistens med localStorage, ingen "flash of unstyled content".

Sikkerhed & Pålidelighed

  • Styrket autentificering: Laravel Fortify med to-faktor-autentificering (2FA/TOTP), sessionsstyring og sikker adgangskode-hashing (bcrypt).
  • Betalingssikkerhed: PCI-kompatibel Kashier-integration med 3DS-autentificering, verifikation af transaktioner på serversiden og validering af webhook-signaturer.
  • Autorisationslag: Finmasket, politikbaseret adgangskontrol (kun-admin dashboard, brugerspecifikke bookingsvisninger).
  • CSRF & XSS-beskyttelse: Indbygget Laravel middleware-beskyttelse på alle tilstandsændrende operationer.
  • Transaktionel integritet: Databasetransaktioner under webhook-behandling sikrer, at bookingposter ikke kan eksistere uden tilsvarende betalingsposter.

Teknisk Arkitektur & Stack

┌─────────────────────────────────────────────────────────────────────┐ │ KLIENTLAG (React 19) │ │ ┌─────────────┬──────────────┬──────────────┬──────────────────┐ │ │ │ Sider │ Komponenter │ Hooks │ Services │ │ │ │ (TypeScript)│ (Radix UI) │ (Custom) │ (API-kald) │ │ │ └─────────────┴──────────────┴──────────────┴──────────────────┘ │ │ ↓ Inertia-protokol ↓ │ ├─────────────────────────────────────────────────────────────────────┤ │ SERVERLAG (Laravel 12, PHP 8.2) │ │ ┌──────────────────────────────────────────────────────────────┐ │ │ │ Controllers (Tynde) → Form Requests (Validering) → Politikker│ │ │ └──────────────────────────────────────────────────────────────┘ │ │ ┌──────────────────────────────────────────────────────────────┐ │ │ │ Business Logic Services │ │ │ │ • KashierPaymentService (Betalingsorkestrering) │ │ │ │ • KashierWebhookService (Transaktionsbehandling) │ │ │ │ • PageServices (Domænespecifik dataaggregering) │ │ │ └──────────────────────────────────────────────────────────────┘ │ │ ┌──────────────────────────────────────────────────────────────┐ │ │ │ Eloquent Modeller & Relationer │ │ │ │ • Polymorfe Bookinger (Yacht/Tur) │ │ │ │ • Tilgængelighedsstyring (validering i realtid) │ │ │ │ • Kurv-system (multi-item, persistent) │ │ │ └──────────────────────────────────────────────────────────────┘ │ ├─────────────────────────────────────────────────────────────────────┤ │ DATABASELAG (MySQL/Postgres) │ │ ┌──────────────────────────────────────────────────────────────┐ │ │ │ Normaliseret skema: Brugere → Bookinger ← (Yachter/Ture) │ │ │ │ Tilgængelighedsindekser, fremmednøglebegrænsninger, kaskade │ │ │ └──────────────────────────────────────────────────────────────┘ │ ├─────────────────────────────────────────────────────────────────────┤ │ EKSTERNE SERVICES & INFRASTRUKTUR │ │ ┌──────────────────────────────────────────────────────────────┐ │ │ │ • Kashier Betalingsgateway (3DS aktiveret) │ │ │ │ • Email-notifikationer (Laravel Mail) │ │ │ │ • Sessionslager (Redis-kompatibelt) │ │ │ │ • Fillager (Lokalt/S3) │ │ │ └──────────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────────┘

Frontend Stack

  • Framework: React 19 med streng TypeScript (tsconfig.json: strict mode aktiveret)
  • SSR/Hydration: Inertia.js v2 med server-rendered page props, hvilket eliminerer vandfaldskald.
  • Styling: Tailwind CSS v4 + Tailwind CSS Vite-plugin for optimerede builds.
  • UI-komponenter: Radix UI (headless, tilgængelig, ustylet) pakket ind i et tilpasset komponentbibliotek.
  • Formularstyring: React Hook Form med server-side Laravel-valideringsfeedback.
  • Routing: Wayfinder v0 til typesikker rute-generering fra Laravel-ruter.
  • Typesikkerhed: Fuld TypeScript-dækning med strenge null-tjek, diskriminerede unions for API-svar.
  • Build-værktøjer: Vite med React compiler-plugin for optimeret JSX, smart tree-shaking.

Backend Stack

  • Framework: Laravel 12 med strømlinet filstruktur (ingen Kernel.php, middleware i bootstrap/app.php)
  • ORM: Eloquent med eager loading, polymorfe relationer og optimering af forespørgsler.
  • Autentificering: Laravel Fortify (headless auth-backend) med 2FA/TOTP-understøttelse via TwoFactorAuthenticatable-trait.
  • API-lag: RESTful endpoints der følger JSON:API-konventioner, returnerer Laravel API Resources for konsistent svarformatering.
  • Validering: Form Request-klasser for deklarative, genanvendelige valideringsregler.
  • Autorisation: Politikbaseret adgangskontrol med Laravel Gates og Policies.
  • Caching: Laravel cache-facade med 1-times standard TTL for aggregeringer på hjemmesiden.
  • Baggrundsjobs: Kø-system (konfigureret til sync i udvikling, database/Redis i produktion).
  • Test: Pest 4 med RefreshDatabase-trait for isoleret testafvikling.

Væsentlige tekniske dybdegående analyser

1. Polymorf bookingarkitektur: Én model, flere produkttyper

Udfordringen: Yachter og ture repræsenterer fundamentalt forskellige produkttyper med forskellige prismodeller, tilgængelighedsbegrænsninger og forretningsregler. En naiv tilgang ville kræve separate bookingtabeller og duplikeret logik. OCTABOATS forener disse elegant ved hjælp af Eloquents polymorfe relationer.


**Hvorfor dette betyder noget:**
- **Enkelt sandhedskilde** for bookinggodkendelse, betalingsbehandling og refusioner—uanset produkttype.
- **Delt administrationsdashboard** med visning af alle bookinger med samlet filtrering og godkendelsesworkflow.
- **Skalerbar til N produkttyper** (fremtid: hoteller, madoplevelser) uden controller-duplikering.
- **Database-normalisering** sikrer referentiel integritet; fremmednøgler forhindrer forældreløse bookinger.

---
<h3 id="section-db7b8963a0b1eb235ba6b98c43cbd8c4">2. Betalings-webhook-arkitektur: Opbygning af solid transaktionsbehandling</h3>


Udfordringen:
Betalingsgateways (Kashier) er i sagens natur upålidelige—webhooks kan ankomme i forkert rækkefølge, duplikeret eller aldrig. Uden idempotent behandling og atomare transaktioner kunne brugere ende med flere bookinger for én betaling eller omvendt.

Hvorfor dette betyder noget:

  • Exactly-once-semantik via merchantOrderId som idempotent nøgle; re-leverede webhooks ignoreres sikkert.
  • Databasetransaktioner sikrer, at booking- og betalingsposter oprettes atomart sammen.
  • Kaskade-sletning på kurveelementer kun efter bekræftet betaling, hvilket forhindrer tabte ordrer.
  • Webhook-resiliens: Fejlede betalinger blokerer ikke fremtidige forsøg; retry-logik indbygget i Kashier-konfigurationen.

Resultat: Ingen tabte betalinger, forudsigelig tilstand, audit trail via response_data JSON-felt.


3. Validering af tilgængelighed i realtid: Forebyggelse af dobbeltbookinger

Udfordringen: To kunder, der ser den samme yacht på samme dato, klikker "Book nu" samtidigt. Uden pessimistisk låsning eller intelligent validering vil begge bookinger lykkes, hvilket fører til oversalg af beholdningen.

Hvorfor dette betyder noget:

  • Race-condition-sikker validering sker inden for den samme HTTP-forespørgselscyklus, hvilket minimerer time-of-check-time-of-use (TOCTOU) race-vinduer.
  • Brugerfeedback er øjeblikkelig og specifik ("kun 2 pladser tilbage"), hvilket øger konverteringer.
  • Webhook-idempotens betyder, at bookingoprettelse er sikker, hvis betalingsbehandling forsøges igen.
  • Audit trail via yacht_availabilities-tabellen viser bookinghistorik.

Resultat: Ingen oversalg, gennemsigtig tilgængelighed, sikre bookinger.


4. Kompleks pris- og kurv-motor: Multi-item, multi-valuta, kampagnelogik

Udfordringen: Checkout skal beregne den samlede pris under hensyntagen til:

  • Flere kurveelementer (yachter + ture blandet)
  • Antal voksen/barn-billetter pr. element
  • Prisvariationer pr. dag (yacht-tilgængelighed)
  • Rabatkode-rabatter (fast beløb eller procentdel)
  • Mersalg (drikkevarer, udlejningsudstyr) med prissætning pr. lystbådehavn
  • Havneafgifter (procentbaserede)

Den tekniske løsning:

Hvorfor dette betyder noget:

  • Komponerbar prislogik kræver ikke ny kode for nye rabattyper.
  • Snapshot-mønster (fanget i bookingen) sikrer historisk nøjagtighed; prisændringer efter checkout påvirker ikke bekræftelser.
  • Typesikre beregninger via Laravels decimal-cast forhindrer floating-point-fejl.
  • Frontend-spejl (React-komponenter) bruger identisk beregningslogik til WYSIWYG-checkout-præhvisning.

5. Frontend-optimering: Inertia + React til tilstandsbevidste SPA'er

Udfordringen: Traditionelle server-rendered applikationer kræver genindlæsning af hele siden; SPA'er gør JavaScript-bundter tunge. Inertia bygger bro over dette hul: serveren renderer sider som React-komponenter, hydrerer med props, hvilket eliminerer kompleksitet i tilstandssynkronisering.

Hvorfor dette betyder noget:

  • Typesikkerhed på tværs af HTTP-grænsen via Wayfinder; rute-parametre/svar autogenereres fra Laravel-ruter.
  • Progressiv forbedring via deferred props; skelet-UI'er indlæses øjeblikkeligt, mens tunge lister indlæses asynkront.
  • Reaktive opdateringer uden side-genindlæsning; kurveændringer udløser øjeblikkelige UI-opdateringer.
  • Ingen JavaScript-oppustethed for side-interaktivitet; kun kritiske UI-komponenter hydreres.

Funktioner & Kapabiliteter

Kundeorienterede funktioner

  • Gennemse & Søg: Filtrer yachter og ture efter by, lystbådehavn, kapacitet, prisklasse.
  • Smart Kurv: Tilføj flere varer, gem til senere, rediger antal/datoer i realtid.
  • One-Click Checkout: Strømlinet betalingsflow med Kashier 3DS.
  • Dobbelt booking: Book yachter (time/dag) eller kuraterede ture (voksen/barn-prissætning).
  • Kampagnemotor: Anvend kampagnekoder, beregn rabatter automatisk.
  • Mersalg: Tilføjelsestjenester (drikkevarer, udstyr) ved checkout.
  • Chatbot: AI-drevet kundesupport med fallback til kontaktformular.
  • Indholdssider: Galleri-fremvisning, FAQ'er, om/kontakt.

Administrationsdashboard

  • Bookingstyring: Se, godkend, rediger og registrer betalinger for alle bookinger.
  • Lagerstyring: Opret/rediger yachter, ture, angiv tilgængelighed, prissætning.
  • Galleristyring: Upload og organiser galleribilleder efter kategori.
  • Kampagnekoder: Opret/administrer rabatkoder med brugsbegrænsninger.
  • Mersalg & Tilføjelser: Konfigurer yderligere tjenester og prissætning.
  • Webstedsindstillinger: Administrer FAQ'er, kontaktindstillinger, global konfiguration.

Tekniske funktioner

  • 2FA-autentificering: TOTP-baseret to-faktor-autentificering.
  • Rollebaseret adgang: Admin-politikker håndhæver adgangsbegrænsninger.
  • Responsivt design: Mobile-first, fungerer på alle enheder.
  • Dark Mode: Tema-persistens, automatisk detektering af systemindstillinger.
  • Tilgængelighed: WCAG 2.1 AA-overholdelse via Radix UI-komponenter.
  • SSR-klar: Server-side rendering-kapacitet til SEO og hurtigere indlæsning.


Projektstruktur

octaboats/
├── app/
│   ├── Http/
│   │   ├── Controllers/
│   │   │   ├── Admin/              # Admin dashboard-controllere
│   │   │   ├── Api/                # API-endpoints
│   │   │   └── *.php               # Offentlige side-controllere
│   │   ├── Requests/               # Form request-validering
│   │   ├── Resources/              # JSON-svarformater
│   │   ├── Middleware/             # HTTP-middleware
│   │   └── Policies/               # Autorisationspolitikker
│   ├── Models/                     # Eloquent-modeller
│   ├── Services/                   # Business-logik (Betaling, Webhook, Side-aggregering)
│   └── Actions/                    # Single-action klasser (Fortify auth)
├── resources/
│   ├── js/
│   │   ├── pages/                  # React side-komponenter
│   │   │   ├── admin/              # Admin dashboard-sider
│   │   │   ├── auth/               # Login, registrering, nulstilling af adgangskode
│   │   │   └── *.tsx               # Offentlige sider
│   │   ├── components/             # Genanvendelige React-komponenter
│   │   ├── hooks/                  # Tilpassede React-hooks
│   │   ├── services/               # Frontend API-klienter
│   │   ├── types/                  # TypeScript-grænseflader
│   │   ├── layouts/                # Layout-wrappers
│   │   └── app.tsx                 # Inertia-opsætning
│   ├── css/
│   │   └── app.css                 # Tailwind-direktiver
│   └── views/                      # Email-skabeloner (Blade)
├── routes/
│   ├── web.php                     # Offentlige/gæste-ruter
│   ├── api.php                     # API-endpoints
│   ├── admin.php                   # Admin dashboard-ruter (kræver auth + admin-politik)
│   ├── settings.php                # Ruter til brugerindstillinger
│   └── console.php                 # Artisan-kommandoer
├── database/
│   ├── migrations/                 # Skema-migrationer
│   ├── factories/                  # Model-fabrikker til test
│   └── seeders/                    # Database-seeders
├── config/                         # Applikationskonfiguration
├── bootstrap/
│   ├── app.php                     # Applikationsopsætning (middleware, routing)
│   └── providers.php               # Service provider-registrering
├── tests/                          # Pest-tests
├── storage/                        # Uploads, logfiler, cache
├── vite.config.ts                  # Frontend build-konfiguration
├── composer.json                   # PHP-afhængigheder
├── package.json                    # Node-afhængigheder
└── README.md                       # Denne fil

Overvejelser om sikkerhed

  • HTTPS håndhæves: Alle eksterne integrationer kræver sikre forbindelser.
  • CSRF-beskyttelse: Token-validering på alle POST/PUT/PATCH/DELETE-forespørgsler.
  • Forebyggelse af SQL-injektion: Parametriserede forespørgsler via Eloquent ORM.
  • XSS-forebyggelse: React undslipper automatisk dynamisk indhold; ingen dangerouslySetInnerHTML.
  • Autentificering: Fortified 2FA-understøttelse til administratorer.
  • Betalingssikkerhed: 3DS aktiveret, PCI-overholdelse via Kashier.
  • Følsomme data: Adgangskode-hashing (bcrypt), hemmeligheder i .env, two_factor_*-felter skjult i API-svar.
  • VIGTIGT: Commit aldrig .env eller *.key-filer; brug .env.example som skabelon.

Teknologier & Afhængigheder

| Lag | Teknologi | Version | Formål | |-------|-----------|---------|---------| | PHP | Laravel Framework | 12.0 | Backend-framework | | PHP | Laravel Fortify | 1.30 | Headless-autentificering | | PHP | Laravel Inertia | 2.0 | Server-side props til React | | PHP | Laravel Wayfinder | 0.1.9 | Typesikker rute-generering | | PHP | Pest | 4.4 | Test-framework | | Frontend | React | 19.2 | UI-rendering | | Frontend | TypeScript | Seneste | Typesikkerhed | | Frontend | Tailwind CSS | 4.0 | Utility-first styling | | Frontend | Radix UI | Seneste | Headless-komponenter | | Frontend | Inertia.js | 2.3.7 | Klientside-adapter | | Build | Vite | Seneste | Hurtigt build-værktøj | | Betalinger | Kashier | Live API | Betalingsgateway |


Centrale erfaringer & Demonstrerede best practices

Dette projekt eksemplificerer ingeniørkunst i produktionskvalitet gennem:

  1. Arkitektonisk renhed: Polymorfe relationer eliminerer kodeduplikering; tynde controllere delegerer til services; politikker håndhæver autorisationskontrol på modelniveau.
  2. Transaktionel integritet: Databasetransaktioner sikrer booking+betaling-atomicitet; webhook-idempotens forhindrer dobbeltbehandling.
  3. Typesikkerhed: Fuld TypeScript-dækning forhindrer runtime-fejl; Laravel Form Requests validerer på serversiden; API Resources former svar konsekvent.
  4. Performance-optimering: Eager loading eliminerer N+1-forespørgsler; intelligent caching reducerer databasetrykket; Vite-builds sender kun nødvendig JavaScript.
  5. Brugeroplevelse: Inertia + React giver SPA-responsivitet uden JavaScript-oppustethed; Tailwind CSS muliggør hurtig, konsistent UI-iteration.
  6. Testbarhed: Pests ekspressive syntaks gør test-intentioner klare; RefreshDatabase-trait isolerer tests; fabrikker leverer realistiske fixtures.
  7. Sikkerhed: Fortify håndterer edge cases inden for autentificering; politikker centraliserer autorisation; betalings-webhook-behandling er idempotent og transaktionel.
  8. Udvikleroplevelse: Wayfinder autogenererer typesikre ruter; ESLint + Prettier håndhæver kodestil; modulære services fremmer komposition.

Anerkendelser

  • Laravel-teamet: For det elegante, meningsfulde framework.
  • Inertia.js-forfatterne: For at bygge bro mellem server-rendered og SPA-verdener.
  • Tailwind Labs: For at muliggøre hurtig og konsistent UI-udvikling.
  • React Core-teamet: For et gennemtestet komponentbibliotek.

Kunde
OCTOBOATS - Eng. Mohammed Waheed
Teknologier
PHP Laravel React TypeScript Inertia

Projektgalleri

OCTOBOATS
OCTOBOATS
OCTOBOATS
OCTOBOATS