/* Fluffy Friends — Home page */ const { Button, ServiceCard, Badge, Avatar } = window.FluffyFriendsDesignSystem_a09c32; /* ——— Price data (from the brand price list) ——— */ const PRICES = { dog: { label: 'Dogs', icon: 'dog', groups: [ { h: 'Small dog · up to 8kg', rows: [['Basic groom (no haircut)', '200'], ['Full groom (with haircut)', '250']] }, { h: 'Medium dog · 8–15kg', rows: [['Basic groom (no haircut)', '250'], ['Full groom (with haircut)', '300']] }, { h: 'Big dog · 15kg +', rows: [['Basic groom (no haircut)', '300'], ['Full groom (with haircut)', '350']] }, ], }, cat: { label: 'Cats', icon: 'cat', groups: [ { h: 'Kitten · up to 8 months', rows: [['Basic groom (no haircut)', '180'], ['Full groom (with haircut)', '200']] }, { h: 'Adult cat', rows: [['Basic groom (no haircut)', '200'], ['Full groom (with haircut)', '250']] }, ], }, bird: { label: 'Birds', icon: 'bird', groups: [ { h: 'Feather refresh', rows: [['Small bird', '120'], ['Large bird', '170']] }, ], }, rabbit: { label: 'Rabbits', icon: 'rabbit', single: true, groups: [ { h: 'Gentle care', rows: [['Full grooming', '150']] }, ], note: { h: 'Please note — we don\u2019t shower rabbits', body: [ 'Rabbits struggle to regulate body temperature when wet, which raises the risk of hypothermia, and water in the ears can cause infection. We use safe, spot-treating cleaning methods instead.', 'If a rabbit is excessively dirty or has a medical issue, it\u2019s best to consult a veterinarian for the right care.', ], }, }, }; const ADDONS = [['Teeth brushing or gland cleaning', '50'], ['Anti-allergy / medical shampoo', '30'], ['Tick & fleas protection treatment', '100']]; function PriceRow({ label, val }) { return (
{label} {val} AED
); } function PriceCard({ data }) { return (

{data.label}

{data.groups.map(g => (
{g.h}
{g.rows.map(([l, v]) => )}
))} {data.note && (

{data.note.h}

{data.note.body.map((p, i) =>

{p}

)}
)}
); } function Prices({ onBook }) { const [tab, setTab] = React.useState('dog'); const data = PRICES[tab]; const showAddons = tab === 'dog' || tab === 'cat'; return (
Clear, honest pricing

Grooming prices

Every groom is tailored to your pet’s breed, coat and size. Prices are in AED — pick your friend below.

{Object.entries(PRICES).map(([key, p]) => ( ))}
{!data.single && (
{showAddons && (

Add a little extra

{ADDONS.map(([l, v]) => )}
)}

Not sure what your pet needs?

Message us with a photo and your pet’s breed — we’ll recommend the perfect groom and confirm the price before we arrive.

  • No surprise charges, ever
  • Free parking & setup at your door
  • Breed-specific styling on request
)}
{data.single && (
)}
); } /* ——— Hero ——— */ function Hero({ onBook, onNav }) { return (
New Mobile salon-van now across Dubai

The salon that comes to your door.

A fully-equipped pink salon on wheels, bringing calm, personalised grooming to pets all over Dubai — dogs, cats, bunnies and birds, every one treated like family.

★★★★★ 4.9 · loved by 2,000+ Dubai pet parents
At your doorWe come to you
); } /* ——— Trust bar ——— */ function TrustBar() { const items = [ ['heart-handshake', 'Treated like family', 'Calm, one-to-one care'], ['truck', 'Fully-equipped van', 'A real salon on wheels'], ['sparkles', 'Personalised grooming', 'Curated to every coat'], ['shield-check', 'Safe & gentle', 'Trained, caring groomers'], ]; return (
{items.map(([ic, t, s]) => (
{t}{s}
))}
); } /* ——— How it works ——— */ function HowItWorks() { const steps = [ ['calendar-heart', 'Book in seconds', 'Tell us your pet, pick a service and a time that suits you — on WhatsApp or right here.'], ['truck', 'We come to you', 'Our pink salon-van pulls up to your door, fully equipped, spotless and ready to pamper.'], ['sparkles', 'Fresh & fluffy', 'A calm, one-to-one groom — your pet comes home clean, happy and looking gorgeous.'], ]; return (
Easy as can be

How it works

From booking to blow-dry, we keep it simple, calm and completely stress-free.

{steps.map(([ic, h, p], i) => (
{i + 1}

{h}

{p}

))}
); } /* ——— Services (with animated before → after media) ——— */ const SERVICES = [ { title: 'Dog grooming', pet: 'dog', badge: 'Most loved', badgeTone: 'pink', description: 'Bath, blow-dry, breed-specific haircut, nails & ears — for every size.', price: '200', priceNote: 'from AED', image: 'svc-dog.png' }, { title: 'Cat grooming', pet: 'cat', badgeTone: 'soft', badge: 'Cats', description: 'A gentle de-shed, nail trim and calm, quiet wash — kittens to adults.', price: '180', priceNote: 'from AED', image: 'svc-cat.png' }, { title: 'Bird care', pet: 'bird', badgeTone: 'ink', badge: 'Birds', description: 'A gentle feather refresh for small and large birds, handled with care.', price: '120', priceNote: 'from AED', image: 'svc-bird.png' }, { title: 'Rabbit care', pet: 'rabbit', badgeTone: 'outline', badge: 'Small pets', description: 'A safe, water-free brush-out and spot-clean — kind to delicate bunnies.', price: '150', priceNote: 'from AED', image: 'svc-rabbit.png' }, ]; function SvcCard({ s, onBook }) { return (
{s.title}
{s.badge && {s.badge}}
{s.title}

{s.description}

{s.priceNote}{s.price}
); } function Services({ onBook }) { return (
Tailored to every coat

Personalised care for every friend

Never a one-size-fits-all wash. Every treatment is curated to your pet’s breed, coat type and personality.

{SERVICES.map((s, i) => (
))}
); } /* ——— Why choose us ——— */ function WhyUs() { const items = [ ['home', 'Stress-free, at home', 'No carriers, no car rides, no waiting rooms — your pet stays calm in familiar surroundings.'], ['user-check', 'One-to-one attention', 'Just your pet and their groomer. No cages, no rushing, no other animals around.'], ['droplets', 'Premium, gentle products', 'Salon-grade, pet-safe shampoos — with anti-allergy and medical options on request.'], ['clock', 'On your schedule', 'We come when it suits you, right to your villa or building, anywhere in Dubai.'], ]; return (
Why pet parents choose us

Grooming that loves them back

{items.map(([ic, h, p], i) => (

{h}

{p}

))}
); } /* ——— Gallery ——— */ function BeforeAfter({ before, after, alt, pos }) { const ps = pos ? { objectPosition: pos } : undefined; return (
{alt {alt Before After
); } function Gallery() { const imgs = [ { ba: true, before: 'ba-poodle-before.jpg', after: 'ba-poodle-after.jpg', alt: 'Apricot poodle', cls: 'tall' }, { src: 'cat-badge.jpg' }, { src: 'groom-aussie.jpg' }, { ba: true, before: 'ba-cat-before.jpg', after: 'ba-cat-after.jpg', alt: 'Ragdoll cat', pos: 'center 35%' }, { ba: true, before: 'ba-maltese-before.jpg', after: 'ba-maltese-after.jpg', alt: 'Maltese', cls: 'tall' }, { ba: true, before: 'ba-rabbit-before.jpg', after: 'ba-rabbit-after.jpg', alt: 'House rabbit', pos: 'center 70%' }, { src: 'parrot.jpg' }, { src: 'cat-cream.jpg' }, ]; const [open, setOpen] = React.useState(null); React.useEffect(() => { const onKey = (e) => { if (e.key === 'Escape') setOpen(null); }; window.addEventListener('keydown', onKey); return () => window.removeEventListener('keydown', onKey); }, []); const item = open == null ? null : imgs[open]; return (
Freshly fluffed

Some of our favourite friends

Real pets, real groomers, inside our pink van. Follow along on Instagram @{FLF.ig}.

{imgs.map((im, i) => (
setOpen(i)} onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); setOpen(i); } }}> {im.ba ? : A groomed Fluffy Friends pet}
))}
{item && (
setOpen(null)}>
e.stopPropagation()}> {item.ba ? : A groomed Fluffy Friends pet}
)}
); } /* ——— Reviews (real Google reviews — each tied to a groomer) ——— */ /* TODO: drop in the verbatim text from your Google reviews — the placeholder copy below keeps the layout complete until then. */ function GoogleG({ size = 18 }) { return ( ); } function Reviews() { const data = [ { q: 'Phillip was so calm and gentle with our nervous rescue — she usually hates being handled but stayed completely relaxed the whole groom. The van came right to our door and was spotless. We won\u2019t groom any other way now.', who: 'Aisha R.', groomer: 'Groomed by Phillip', img: 'groom-poodle.jpg', link: 'https://maps.app.goo.gl/zZRe56dCa66TbRoA7' }, { q: 'Noel groomed our bunny so carefully and you can tell he genuinely loves animals. Ten years of experience really shows — patient, kind and reassuring from start to finish. Highly recommend for anyone with a delicate little one.', who: 'Daniel K.', groomer: 'Groomed by Noel', img: 'bunny-fluffy.jpg', link: 'https://maps.app.goo.gl/Qogxy6oHDqx7pxVv6' }, { q: 'Mark is incredibly detail-focused — our poodle has never looked better. He arrived right on time, the van was immaculate and the whole visit was smooth and stress-free. Friendly, professional and worth every dirham.', who: 'Fatima S.', groomer: 'Groomed by Mark', img: 'groom-aussie.jpg', link: 'https://maps.app.goo.gl/2ApStntWamwRJKM19' }, ]; return (
Loved by pet parents

Kind words from happy homes

Real reviews from our Google page

{data.map((r, i) => (
★★★★★

{r.groomer}
Read on Google
))}
); } /* ——— CTA band ——— */ function CtaBand({ onBook }) { return (

Ready to spoil your best friend?

Book a calm, personalised groom and we’ll bring the pink van to your door — anywhere in Dubai.

); } function HomePage({ onBook, onNav }) { useReveal(); return (
); } Object.assign(window, { HomePage, Prices });