SMRP Resort logo: a kayaker in front of a rising sun over a blue and green river wave

SMRP Resort · San Miguel River Park

From Phone-Call Bookings to Online Booking and Payment

Guests at a riverside glamping and adventure resort in Catanduanes, Philippines, had to call or message to book, and nothing could be paid online. I led the design of a new website and booking platform: live availability, PayMongo checkout with GCash, Maya, QR Ph and cards, and inventory rules that can't double-book.

RoleProduct Designer
ClientLeo Torrente, Owner (Freelance)
TimelineSep to Oct 2026 · 44 commits
Built WithNext.js · Payload CMS · PayMongo · Claude Code
smrp-website-sable.vercel.app
SMRP Resort homepage: Your River Escape Awaits, with a date and guest search over a photo of kayakers on the river

Final Homepage

My Role

Design Lead on an AI-Assisted Build

I owned the product and design decisions, art direction, content, photo selection and editing, quality review and client communication. The platform was built with AI-assisted development in Claude Code, with me directing the implementation. The project started on 3 September 2026; the main build and iteration ran from late September to 9 October.

The Challenge

A Real Resort Behind a Placeholder Site

The old WordPress site wasn't helping the resort sell. Its booking form came from a template plugin, so guests still called or messaged to book, and the resort couldn't take payment online.

Placeholder Copy

The homepage, restaurant and menu headers, and even the footer were still in lorem-style filler text.

Generic Imagery

Every dish on the menu used the same restaurant logo, and the footer’s Instagram grid showed stock photos of other resorts.

Booking by Phone

Guests had to call or message to reserve a room or an adventure.

No Online Payment

Nothing could be paid in advance, so every reservation depended on a follow-up conversation.

Brochures as Pages

Room pages were the printed brochure dropped in as an image, so rates and details couldn’t be read, searched or updated.

Developer-Dependent

Staff needed to change rooms, menu, prices and photos themselves, without calling a developer.

Homepage

Before

Old SMRP homepage: Welcome to SMRP, with a lorem ipsum subtitle

After

New SMRP homepage: Your River Escape Awaits

Same river, same kayakers. The old headline was followed by Latin filler; the new one says where you are and what you can do there.

My Approach

The brief I worked from:

Show the real resort, let guests book and pay without a phone call, and give staff full control of the content.

I started from what a guest needs to decide: what the rooms look like, what they cost on their dates, and whether they're free. Then I worked out what staff need to keep that information correct. That set the order of the build.

01

Content Model

Every area editable in Payload CMS

02

Visual System

Palette, type, components, real photos

03

Booking & Payment

Inventory, holds, PayMongo

04

Client Iteration

New logo, retired rooms, legibility

Visual Direction

I restyled the site away from the editorial template it started from: a navy and sky-blue palette that echoes the river, Playfair Display headings with Plus Jakarta Sans body text, and solid pill buttons. A river-themed loading animation and a parallax hero give the homepage a sense of place.

Because rooms, adventures and food each work differently, “Book now” opens a short choice (Accommodations, Adventures or Order Food) so nobody lands in the wrong flow.

smrp-website-sable.vercel.app
The Book now dropdown open, offering Accommodations, Adventures and Order Food

The Book Now Menu

Booking & Payment

From a Phone Call to a Paid Booking

This was the heart of the project. Before, every reservation started with a call or a message and nothing was paid in advance. Now a guest can find a free room, see the exact price, and pay with a card, GCash, Maya or QR Ph in one sitting.

A double-booked room hurts a small resort more than having no online booking at all, so every step below was designed around one rule: a booking that looks confirmed has to be.

Step 01

Search by Date

The search on the homepage takes dates and guests first. Results mark every room Available, Booked out or “Max N guests”, so a guest learns about a mismatch before filling in anything.

smrp-website-sable.vercel.app
Homepage search bar with check-in, check-out and guest fields over the river hero

Step 02

Compare the Room, Price Included

Every room page shows the full weekday, weekend and holiday rates, the extra-guest fee, check-in times and what’s included. Online bookings are charged at the weekday rate and any difference is settled at the front desk, which keeps checkout to one clear price without hiding the full rate table.

smrp-website-sable.vercel.app/accommodations/family-dome
Family Dome page: weekday, weekend and holiday rates, inclusions, and the Check Availability form

Step 03

See What’s Free

The room calendar crosses out past and booked-out nights. Behind it is real inventory: each room has a “units available” count (the Junior Cabin has two, the others one), a night is booked out only when every unit is taken, and check-out day stays free for the next guest.

smrp-website-sable.vercel.app/accommodations/family-dome
Family Dome availability calendar for October 2026, with past and booked-out nights crossed out

Step 04

Book With a Live Total

The booking form sits beside the room details and updates the total as dates change (here, 1 night × ₱1,800), so the guest knows exactly what they’ll pay before they leave the page.

smrp-website-sable.vercel.app/accommodations/family-dome
Family Dome page with the booking form filled in, showing 1 night × ₱1,800 above the Book Now button

Step 05

Stopped Before Checkout, Not At It

Problems surface in the form, in plain language, instead of after a guest has paid. The guest count is capped at the room’s maximum, and clashing dates are named one by one with the button disabled.

smrp-website-sable.vercel.app/accommodations/family-dome
Family Dome booking form with the guest field showing: value must be less than or equal to 7

Guest Count Capped at 7

smrp-website-sable.vercel.app/accommodations/family-dome
Family Dome booking form showing: Fully booked on Oct 22 to Oct 27, please choose different dates, with the button reading Unavailable for these dates

Booked-Out Nights Named

Step 06

Pay the Way Guests Already Pay

Payment hands off to PayMongo checkout with the booking and total carried over. Alongside cards it accepts the local options GCash, Maya and QR Ph, so guests don't need a credit card to book.

checkout.paymongo.com
PayMongo checkout for Family Dome (8 nights), ₱14,400, with customer information fields

Booking and Total Carried Over

checkout.paymongo.com
PayMongo payment methods: QR Ph, card, GCash and Maya

Card, GCash, Maya or QR Ph

Step 07

Hold, Then Confirm or Release

The part guests never see, and the part that took the most thought.

01

Save & Re-check

Availability checked again right after saving

02

Hold 60 Minutes

Room held while the guest pays

03

Ask PayMongo

Each expired hold is checked

04

Confirm or Release

Paid: confirmed. Unpaid: link closed, room freed

Overbooking Protection

Availability is checked again right after a booking is saved, so two guests paying at the same moment can’t both get the last room. Bookings staff add by hand follow the same rule.

Why Not Just a Timer?

PayMongo checkout links don’t expire on their own. Releasing a hold on a timer alone could cancel a booking that had just been paid, so the system asks PayMongo about each expired hold before deciding.

Paid Holds Are Confirmed

If the guest paid, even at the last minute, the booking is confirmed and the room stays theirs.

Unpaid Holds Are Released

If not, the payment link is closed so it can’t be paid later, and the room goes back on sale.

Adventures Book the Same Way

Kayak, river tubing, stand-up paddle board and ATV run on the same booking and payment flow, with package options and a live total: SUP for 1 hour (₱300) or 2 hours (₱600) per board, tubing at ₱250 per tube.

Practical details (times, minimum age, start and end points, gear, guides) sit next to the form, so guests can decide without asking first.

smrp-website-sable.vercel.app/adventures/river-tubing
River tubing details beside the Book This Adventure form: package, date, quantity and a 1 × ₱250 total

Book This Adventure

Room Page

Before

Old Deluxe Yurt page with a template booking calendar and truncated details

After

New Family Dome page with weekday, weekend and holiday rates, inclusions and a Check Availability form

The 5 rooms (Family, Deluxe and Superior Domes; Junior and Couple’s Cabins) were rebuilt from the official brochures, with photo galleries, full rate tables and amenities as real text, and booking built into every page.

Key Design Decisions

Five Calls, and What Each One Cost

Everything Editable, Not Some of It

Modelling every content type up front took longer than hard-coding pages. I took that trade on purpose: prices, menus and offerings change, and every hard-coded value becomes a call to a developer.

Only Real Reviews

The reviews section shows only reviews staff approve. I chose not to publish AI-generated testimonials, because fake reviews would mislead the guests the resort wants to welcome. The cost is a thin section at launch, so it invites real reviews instead.

Protect the Client’s Logo

The new logo’s blue lettering disappears on navy. Rather than recolour it, I set it on a white card on dark backgrounds, through one shared logo component. The favicon uses the sun-and-kayaker emblem, which stays readable when small.

Show Adventure Photos Whole

Cropping mixed-shape photos to fill a frame cut off the people kayaking. The carousel shows each photo whole on a blurred fill: less edge-to-edge, but honest. It supports swipe, arrows, keyboard and thumbnails.

A Menu Built for Its Photos

Photo cards for dishes with pictures from the restaurant’s product shoot, dotted-leader price lists for the rest, and a sticky category bar so a guest on a phone never loses their place.

Logo on Navy

The SMRP Resort logo on a white card against the navy footer

Restaurant Menu

Before

Old menu: every dish card shows the same Leo’s Grill logo image

After

New menu: silog breakfast plates photographed individually, with descriptions, prices and Add buttons under a sticky category bar

Before, every dish shared one placeholder logo. After, each dish has its own photo, a one-line description, and an Add button for ordering to a room, a table or for pickup.

Footer

Before

Old footer with lorem ipsum text, stock Instagram photos of other resorts and a 2023 copyright

After

New footer with a river-wave edge, grouped links, click-to-call, text, email and directions

Filler text and other resorts’ photos replaced with grouped links and every way to reach the resort: click-to-call, text (SMS), email and Google Maps directions.

Beyond Rooms

Adventures, Food and Everything Else

Rooms are only part of a stay. The same booking and payment foundation runs the rest of the resort.

smrp-website-sable.vercel.app/adventures/river-tubing
River tubing adventure page: a group photo shown whole on a blurred fill, with thumbnails below

Adventure Photo Carousel

Zip Line, Coming Soon

Listed on the adventures page as “Coming Soon”, so guests know it’s on the way without being able to book it early.

Food Ordering

Guests add dishes from the menu and order to their dome or cabin, to their table, or for pickup. Room service carries a 10% charge, shown up front on every room page.

Table Reservations

A short “Reserve a Table” form (party size, date, time and contact details) that staff confirm by email or phone.

Events & Tickets

Events the resort hosts, with tickets managed from the CMS.

Tour Packages

Bundled packages listed alongside accommodations.

Real About & Amenities

An owner spotlight on the About page and a real Amenities page, using resort photos I enhanced myself in place of stock imagery.

smrp-website-sable.vercel.app/restaurant
Restaurant page: Welcome to our Restaurant, with Order Food Online and Reservation buttons

Restaurant Landing Page

Staff Control

A CMS the Resort Runs Itself

Rooms, adventures, menu items, amenities, reviews, contact details, the homepage hero and even the property rules are all edited in Payload CMS. No developer needed for a price change.

smrp-website-sable.vercel.app/admin
Payload CMS dashboard listing collections: Accommodations, Bookings, Adventures, Menu Items, Food Orders, Reviews and more

CMS Collections

smrp-website-sable.vercel.app/admin/globals/site-settings
Site Settings in the CMS: property rules such as check-in and pool hours, each an editable field

Property Rules, Edited by Staff

smrp-website-sable.vercel.app/admin/collections/accommodations
Accommodations collection in the CMS: five current rooms plus three retired yurts kept for booking history

Retired Yurts, Kept on Record

Responding to Client Feedback

Changes Without Breaking History

Retired the Yurts

When the resort stopped offering yurts, I unpublished them rather than deleting them, so existing booking records stay intact.

New Logo, Everywhere

Swapped in the client’s new SMRP Resort logo through the shared logo component, made a favicon from its emblem, and updated the contact details.

Legible Heroes

Reworked hero images and overlays for legibility. On the Accommodations hero, white text stays above 8:1 contrast.

Outcome & Next Steps

Live, With the Last Steps in View

SHIPPED

  • Live at smrp-website-sable.vercel.app
  • Real content and real resort photos
  • Room and adventure booking with PayMongo checkout
  • Inventory rules and overbooking protection
  • Food ordering and table reservations
  • Every content area editable by staff

STILL TO DO

  • PayMongo live keys, pending the client’s verification (test mode today)
  • Connecting the custom domain
  • Booking confirmation emails

No booking or revenue results are claimed here: payments are still in test mode.

What I Learned

The Edge Cases Were the Product

The booking system was more product work than the page designs. A shared last room, a checkout link that never expires, a retired room type with past bookings attached: those decided whether the platform could be trusted. Directing AI-assisted development made that even clearer. The quality of the result followed the precision of my decisions and the care of my review, not the speed of the implementation.

Rules before code

Every booking edge case needed a plain-language rule first. The rule was the design.

Direction is the craft

With AI doing the implementation, clear specs and careful review are what make the work good.

Honesty is a design choice

Real photos over stock, real reviews over generated ones, and an open list of what isn’t finished.

Design for whoever maintains it

The staff who update prices every season are users too. The CMS got the same care as the site.