Malaika AfridiWorkAboutAvailable for work
← All work

Website + lookbook · 2026

Villa TimTavio — Website

The estate’s public face — an editorial teaser, a full-screen scroll-choreographed lookbook, and an invitation-only availability flow. Twenty-eight chapters and 50+ panels easing past the viewer in a day-to-night arc. Live in production.

Villa TimTavio — the entrance
The walkthrough opening — “Where the Pacific begins to whisper.”

Overview

The site had one job: make the villa feel like a secret worth being let into. So it is built in three movements — a restrained teaser, an immersive lookbook, and a deliberately selective way to ask for a stay.

The whole thing is scroll-choreographed with Motion and smoothed with Lenis, so it reads less like a webpage and more like a short film you steer with the wheel.

Role

Design & build

Timeline

2026 · live

Stack

Next.js 16 · TurbopackReact 19 · TypeScriptTailwind CSS v4Motion · LenisCloudinary · Sharp
1The teaser

Enough to intrigue, not to explain

A single brutalist hero and a quiet stat line. “Enter the Infinity” is the only real call — and it’s a threshold: the whole site shifts tone the moment you cross it. The entrance is animated, so a short clip shows it best.

View the live site
The “Enter the Infinity” threshold animation
Teaser → “Enter the Infinity” threshold animation.
2The lookbook

Twenty-eight chapters, one long breath

Past the threshold the site becomes a film — the villa, the cuisine, the experiences — 50+ panels easing by in a day-to-night arc. The choreography is the whole point, so lead with the walkthrough video and let the stills carry the detail.

Open the live lookbook
The scroll-choreographed lookbook walkthrough
Full scroll-choreographed walkthrough — day-to-night arc.
Lookbook — the villa
Chapter · The villa — sweeping curves, six suites.
Lookbook — the cuisine
Chapter · The cuisine — Michelin-tier, always Oaxacan.
Lookbook — The Infinity
Chapter · The Infinity — the members-only threshold.
3Availability

Two doors to a stay

Two ways in, by audience. Brokers get a private, link-only availability calendar — live nightly rates, per-month minimums, and 48-hour holds. Everyone else gets an invitation-only request form. Both write straight through to the estate manager platform.

Open the live broker calendar
Broker availability calendar
Broker availability — link-only calendar with live rates, holds, and per-month night minimums.
Availability — apply for reservations
Apply for reservations — the members-only request flow.

The challenge

What made it hard

The lookbook is a pinned, page-covering deck scrubbed by scroll progress — 28 chapters and more than 50 panels in a day-to-night arc. Choreography at that length breaks the moment it is hand-numbered.

The deck and the marketing site have genuinely incompatible styling. The lookbook needs its own bare-element CSS and design tokens; the site needs Tailwind globals, a header and a footer. One set of global styles would have poisoned the other.

A media-led deck is the easiest kind of page to make slow, and the desktop pinned-scrub layout has no meaning on a phone.

Approach

How it was built

Two isolated root layouts. The `(site)` and `(lookbook)` route groups each ship their own `<html>`/`<body>`, so the deck carries its own CSS and tokens without ever colliding with the site’s Tailwind globals or chrome.

Chapters live as data, so panels reorder without renumbering anchors. Imagery is Cloudinary-delivered as AVIF/WebP, right-sized and retina-aware, and the desktop pinned-scrub layout unfolds into a natural vertical stack on mobile. The whole deck honours `prefers-reduced-motion`.

Outcome

What shipped

Live at villatimtavio.com, with the lookbook and the broker availability view running as separate experiences inside one Next.js app.

Next project

Dental Price Matcher

Want something like this?

Tell me what you're building and I'll tell you honestly how I'd approach it. Replies within hours.

Prefer email? Write to me directly at — it reaches the same inbox.

© 2026 Malaika AfridiXGitHubLinkedInUpworkEmail