Skip to main content
Caleb AlvaradoWeb developer & technical partner home

HospitalityLaunched April 2026

Yaruba Surf Lodge

A six-room surf lodge in Ecuador got a fast, photo-led site: rooms book on Airbnb and inquiries arrive with no server to run.

Designed and built solo for the owner, using the lodge's own photos.

  • Astro 6
  • TypeScript
  • Tailwind CSS 4
  • Astro Assets + Sharp
  • Static HTML output
  • Web3Forms
  • Airbnb listings
  • Google Maps embed
  • Vercel
yarubasurflodge.com
Home page: a full-height sunset over the pool with a coral Beachfront Surf Hostel in Ecuador badge, the hand-lettered logo in a translucent sticky header, and View Rooms & Book and Explore Amenities buttons.
Client
Yaruba Surf Lodge
Industry
Hospitality
My role
Design and build
Timeline
Launched April 2026
Stack
9 technologies
Status
Live

The problem

Yaruba Surf Lodge is a six-room beachfront hostel in Puerto Engabao, a small fishing village on the coast of Ecuador. Its rooms are booked through Airbnb, and a listing shows one room at a time. It has no space for the pool, the stone pizza oven, the nearby surf break, or how to get there from the airport. The owner needed one place that shows the whole lodge and still sends each booking to the right listing.

A lodge this size also has no reason to pay every month for a booking engine, a content system and a server, or to spend time keeping them running. Guests plan a trip from abroad, mostly on phones, and a heavy page that stalls loses that visitor before the first photo loads. Whatever I built had to load fast, run itself, and cost almost nothing to keep online.

What I built

I designed and built a six-page site around the lodge's own photos: home, rooms, gallery, amenities, location and contact. The home page opens on a sunset over the pool, and the inner pages share its deep teal, coral and sand. The rooms page lists all six rooms with a capacity badge, a feature checklist and a Book Now button that opens that room's Airbnb listing in a new tab, so Airbnb keeps handling the calendar, payments and reviews.

Direct questions arrive through a contact form that posts straight to a form service, so there is no server to host, patch or pay for, and it works with JavaScript switched off. The contact page also carries an embedded map and a short FAQ, and the location page explains how to reach the lodge by air, bus and car. The site is built into plain files and served from Vercel's network, so it opens quickly on a phone abroad.

What it does

Features that pay for themselves

Each one in terms of what it does for the business, not what it is made of.

  1. A home page that sells the stay in one scroll

    A full-height sunset over the pool, a Beachfront Surf Hostel in Ecuador badge and two clear next steps: view the rooms and book, or explore the amenities. Below it, a six-card tour of what the stay includes and a preview of the rooms. A first-time visitor gets the whole picture without leaving the page.

    yarubasurflodge.com
    Home page: a full-height sunset over the pool with a coral Beachfront Surf Hostel in Ecuador badge, the hand-lettered logo in a translucent sticky header, and View Rooms & Book and Explore Amenities buttons.
    The hero is the lodge's own phone photo of the pool at sunset.
  2. Every room books on Airbnb

    Six room listings, each with a capacity badge, a feature checklist and a Book Now button that opens that room's own Airbnb listing. Guests pick the room here and pay on a platform they already trust, and the lodge never has to run a booking engine, a calendar or payments of its own.

    yarubasurflodge.com
    Rooms page: a dark teal title band, room-type shortcuts, and the room listings below, each with a capacity badge, a feature checklist and a coral Book Now button.
    Each Book Now button opens that room's own Airbnb listing.
  3. Inquiries with nothing to host

    An inquiry form asks for a name, email, phone or WhatsApp, a topic and a message, and sends it to the owner's inbox through a form service. There is no server behind it to pay for or maintain, and it works with JavaScript off. An embedded map and a short FAQ answer the common questions before anyone has to ask.

    yarubasurflodge.com
    Contact page: an inquiry form with first name, last name, email, phone or WhatsApp, topic and message fields beside the lodge's details and an embedded Google Map.
    The form posts to a form service, so no server runs behind it.
  4. A travel guide for the area

    The location page answers what a traveler asks before booking: how far the airport is, how to arrive by air, bus or car, what is nearby and what to do once there, including The Point surf break. The amenities page does the same for the stay itself, from the pool and the stone pizza oven to beach access and free WiFi.

    yarubasurflodge.com
    Location page: an introduction to Puerto Engabao with quick-fact chips, followed by nearby attractions and a grid of Things to Do cards.
    The page also covers how to arrive by air, bus or car.

Engineering

Under the hood

For the partner who reads code.

  1. Almost no JavaScript reaches the browser

    Every page is pre-rendered to plain HTML at build time, and the live home page is about 27 KB of HTML. The only script the browser receives is one small inline module, written in TypeScript with no framework, that runs the mobile menu and keeps its expanded state and screen-reader labels in sync. No framework runtime is sent at all, which is what keeps the site light on a phone abroad.

  2. Responsive images built at deploy time

    Every photo goes through Astro's image pipeline with Sharp and comes out as WebP with a PNG fallback at a fixed set of widths, 640 to 1920 pixels for heroes and 400 to 800 for cards, each with a matching sizes hint. The logo and hero load immediately; everything else lazy-loads, and the Google Maps embed on the contact page only loads once it is scrolled into view. The hero started as a 7.3 MB, 3024 by 4032 phone photo; the browser receives a roughly 366 KB WebP.

  3. Content as data, nothing to run

    Rooms, room types, amenities, attractions, activities and gallery entries are arrays at the top of each page that loop into markup, so most content changes are one-line edits. One shared layout takes a title and description from each page and writes the meta and Open Graph tags. The inquiry form is a plain HTML POST to Web3Forms, booking hands off to six per-room Airbnb listings with noopener links, and the build deploys as static files to Vercel's CDN with an apex-to-www redirect and HSTS. There is no database, CMS or server to patch.

Gallery

Screens

  • yarubasurflodge.com
    Amenities page: a dark teal title band over a faded property photo, then rows that alternate a photo on one side and a short description on the other for each amenity.
    Seven amenities, each in its own row with a photo.
  • yarubasurflodge.com
    Gallery page, top of the viewport: a dark teal title band over a faded property photo and the first rows of a square photo grid.
    Twelve of the lodge's own photos in a square grid with a hover caption.

On a phone

  • Phone view of the home page: the logo and menu button in the sticky header above the full-height sunset hero, its coral badge and the View Rooms & Book button.
  • Phone view of the rooms page: the title band and room-type shortcuts, with the room listings stacked in one column below.
  • Phone view of the amenities page: the title band, with each amenity's photo stacked above its description in one column.

Building something similar?

Tell me what your business needs. I will tell you what I would build, what it would take, and whether I am the right person for it.