Tanah Sari Resort

Boutique Hotel · Ubud, Bali, Indonesia

TANAH SARI RESORT

3
Villa tiers with pricing
Direct
Booking form live
Bali
Family-owned since 1994

A family-owned Ubud resort since 1994 — twelve private villas in the rice terraces, chef breakfast, private infinity pools per villa. No direct booking capability, no visual storytelling, and nothing communicating why Tanah Sari was worth choosing over a chain hotel at a lower price.

Luxury hospitality is one of the few categories where the experience of browsing the website must itself feel luxurious. If the site loads like a government form, the villa looks cheap by association. The challenge was building something that made guests feel the humidity, the birdsong, the mist at 6am — before they'd made a reservation.

Jungle green (#1a2e1a) as the background colour was the first decision and it determined everything else. Not forest green, not dark green — the exact colour of deep Balinese shadow. Ivory (#f0ead6) text because white would be too bright, too digital. Gold (#c9a84c) accents because that is the colour of afternoon light through ricefields.

Cormorant Garamond headings with generous letter-spacing (0.06em+) and deliberate italics — these are the typographic choices of someone who has designed art books. Not web design defaults. The difference is visible and it's felt even by people who couldn't name the font.

Twelve CSS keyframe firefly particles in the hero: each a 4px gold dot, drifting upward on a unique path, appearing and disappearing at different intervals. No JavaScript. Pure CSS keyframes. They take thirty seconds to notice consciously but create the right mood from the first frame.

HTML CSS GSAP 3.12 CSS keyframe particles Formspree Vercel

Firefly System

12 pseudo-elements on the hero container, each with unique animation-delay and animation-duration — no JS whatsoever. The variation in timing prevents the pattern from feeling mechanical.

GSAP Timing

1.2s ease-in-out instead of standard 0.6s — the slowness is the luxury. Every reveal says: we are not in a hurry here.

Villa Cards

CSS grid with 3 columns, nightly rate displayed without the word "per night" — the number alone commands more respect.