/* Centaurus Charter — screens */ const { useState: useStateS, useEffect: useEffectS } = React; /* ================= HOME ================= */ function HomeScreen({ goto, onBook }) { const { FLEET, EXPERIENCES, WATERSPORTS, REVIEWS } = window.CENTAURUS_DATA; const [tab, setTab] = useStateS('best'); const fleetTabs = { 'best': FLEET.filter(f => f.tag === 'Best Seller'), 'premium': FLEET.filter(f => f.tag === 'Premium'), 'all': FLEET.slice(0, 6), }; return (
{/* HERO */}
Yacht rental Dubai · Est. 2013

Cast off into
golden hour.

Ten yachts, two marinas, four languages. Book a cinematic Dubai cruise in minutes — or chat to a captain on WhatsApp. Booking made easy.

WhatsApp
10 yachts 36 – 118 ft Dubai Marina · Harbour
{/* BOOKING STRIP */}
{/* FLEET TEASER with tabs */}
01 · The Fleet

Ten boats, every occasion —
from a 36-ft Silver Craft to a 118-ft mega.

All yachts registered with the Dubai Marina Yacht Club. Certified crew, three-hour minimum charter, T&Cs apply.
setTab('best')} style={tab==='best'?{background:'var(--navy)',color:'white',borderColor:'var(--navy)'}:{}}>Best Sellers
setTab('premium')} style={tab==='premium'?{background:'var(--navy)',color:'white',borderColor:'var(--navy)'}:{}}>Premium
setTab('all')} style={tab==='all'?{background:'var(--navy)',color:'white',borderColor:'var(--navy)'}:{}}>All
{fleetTabs[tab].map(y => goto('yacht', s)} onBook={onBook}/>)}
{/* ROUTE IDEAS (the new layer) */}
02 · Route ideas — new

Six curated cruises
around Dubai's coastline.

Pick a route — we match it to the right yacht. From a two-hour JBR sundowner to a four-hour Atlantis loop.
{/* EXPERIENCES */}
03 · Experiences

Memorable occasions,
handled end-to-end.

Weddings, anniversary cruises, corporate offsites, night parties, sunset proposals, fishing trips — full event planning by our team.
goto('experience', EXPERIENCES[0].slug)}>
{EXPERIENCES[0].tag}
{EXPERIENCES[0].name}
goto('experience', EXPERIENCES[1].slug)}>
{EXPERIENCES[1].tag}
{EXPERIENCES[1].name}
goto('experience', EXPERIENCES[2].slug)}>
{EXPERIENCES[2].tag}
{EXPERIENCES[2].name}
goto('experience', EXPERIENCES[3].slug)}>
{EXPERIENCES[3].tag}
{EXPERIENCES[3].name}
goto('experience', EXPERIENCES[4].slug)}>
{EXPERIENCES[4].tag}
{EXPERIENCES[4].name}
{/* WATERSPORTS strip */}
04 · Water sports add-ons

Six ways to make a splash.

Add to any charter
{WATERSPORTS.map(w => (
{w.n}
{w.name}
FROM AED {w.from}
))}
{/* WHY US — attributed trust */}
05 · Why Centaurus

A real company,
not a reseller.

Licensed under Centaurus Passenger Yachts & Boats Rental LLC since 2013. Vessels registered by the Dubai Marina Yacht Club, certified crew on every charter.
Guest stories

Verified reviews — attributed, never merged.

We attribute every figure to its source. Google reviews live on Google. Tripadvisor on Tripadvisor. We don't average them into a single hero star to look better than we are.

{REVIEWS.map((r, i) => (
"{r.quote}"
{'★'.repeat(r.stars)}
{r.author}
{r.src}
))}
{/* CTA band */}
Ready when you are

Book online in three minutes. Or send a captain a message.

WhatsApp
); } /* ================= FLEET ================= */ function FleetScreen({ goto, onBook }) { const { FLEET } = window.CENTAURUS_DATA; const [filt, setFilt] = useStateS({ size: 'all', berth: 'all', tag: 'all' }); const matches = FLEET.filter(y => { if (filt.size === 'small' && y.length > 50) return false; if (filt.size === 'mid' && (y.length <= 50 || y.length > 80)) return false; if (filt.size === 'mega' && y.length <= 80) return false; if (filt.berth !== 'all' && !y.berth.toLowerCase().includes(filt.berth)) return false; if (filt.tag !== 'all' && y.tag !== filt.tag) return false; return true; }); return (
The fleet

Ten yachts.
One captain per cruise.

Hourly rates published — three-hour minimum, T&Cs apply. Boarding at Dubai Marina or Dubai Harbour Marina. We confirm the right vessel for your party size, occasion and route.

Size {['all','small','mid','mega'].map(s => (
setFilt({...filt, size: s})}> {s === 'all' ? 'All' : s === 'small' ? 'Up to 50 ft' : s === 'mid' ? '50–80 ft' : '80 ft+'}
))} Boarding {[['all','All'],['marina','Marina'],['harbour','Harbour']].map(([v, l]) => (
setFilt({...filt, berth: v})}>{l}
))} Tier {[['all','All'],['Best Seller','Best Seller'],['Premium','Premium']].map(([v, l]) => (
setFilt({...filt, tag: v})}>{l}
))}
{matches.length} of {FLEET.length}
{matches.map(y => goto('yacht', s)} onBook={onBook}/>)}
); } /* ================= YACHT DETAIL (cinematic per-yacht microsite) ================= */ function YachtScreen({ slug, goto, onBook, setLightbox }) { const { FLEET, DESTINATIONS } = window.CENTAURUS_DATA; const y = FLEET.find(f => f.slug === slug) || FLEET[0]; const gallery = y.gallery && y.gallery.length ? y.gallery : [y.hero]; const isPoseidon = y.slug === 'poseidon'; const related = FLEET.filter(f => f.slug !== y.slug).slice(0, 3); const routes = DESTINATIONS.filter(d => d.yachts.includes(y.slug)); return (
{/* Hero */}
{y.tag || y.make} · {y.berth}

{y.name}
{y.length} feet.

Length
{y.length}
Guests
{y.guests}
From
AED {y.rate.toLocaleString()}/ hr
{/* Lede + book card */}
About

{y.blurb}

{y.suited && (
Good for
{y.suited.map(s =>
{s}
)}
)}

Welcome drinks (bubbly, soft drinks, coffee, water) included on every charter. Transfer, canapés and DJ available as add-ons. Three-hour minimum charter · T&Cs apply.

Charter from
AED {y.rate.toLocaleString()}/ hour
3-hour minimum · T&Cs apply
{y.flag === 'price-oddity' && (
⚠ price exceeds 118-ft Poseidon — client to confirm
)}
WhatsApp captain
{y.berth}
Payment: Visa · Mastercard · Tabby · Crypto
{/* Spec sheet — confirmed fields only */} {isPoseidon && (
Spec sheet

Verified to the line item.

The full Hatteras 118 spec — captured directly from the official Poseidon page.
Build
Hatteras
Length
118ft
Guests
100
Decks
2lower + upper
Cabins
4
Crew
1+4
Galley
Electric grill · oven · microwave · fridge
Music
Bluetooth + AUX
Berth
A-B05 · Dubai Harbour

▲ Poseidon's spec is the only one independently verified line-by-line. For other vessels, the team confirms cabins/crew/galley on enquiry.

)} {/* Gallery */}
On board

The yacht, from every angle.

Click any frame to open full-screen.
{gallery.slice(0, 6).map((g, i) => (
setLightbox(g)}/> ))} {gallery.length < 6 && Array.from({ length: 6 - gallery.length }).map((_, i) => (
Hi-res photo · awaited
))}
{/* Routes for this yacht */} {routes.length > 0 && (
Routes for {y.name}

Pair this yacht with a route.

{routes.slice(0, 3).map(d => (
goto('destination', d.slug)}>
Route {d.num}
{d.name}
⏱ {d.duration}↔ {d.distance}
))}
)} {/* Related yachts */}
Related

You might also like.

{related.map(r => goto('yacht', s)} onBook={onBook}/>)}
); } /* ================= DESTINATIONS GRID (re-used) ================= */ function DestinationsGrid({ goto, limit }) { const { DESTINATIONS } = window.CENTAURUS_DATA; const list = limit ? DESTINATIONS.slice(0, limit) : DESTINATIONS; return (
{list.map(d => (
goto('destination', d.slug)}>
Route {d.num}
{d.name}
⏱ {d.duration}↔ {d.distance}
))}
); } Object.assign(window, { HomeScreen, FleetScreen, YachtScreen, DestinationsGrid });