All work
case studyWeb & Commerce

El Refugio — vacation-rental booking with card & crypto payments

A production booking site for a Playa del Carmen rental owner: guests pay by debit/credit card or cryptocurrency, and availability stays in sync with Airbnb.

Role
Full-stack engineer
Timeline
Live in production
Stack
React / Vite · Express · Stripe · BTCPay Server · CoinGecko rates · Postgres · Airbnb iCal sync · PM2 / Linux
Launch live demo
live siteWeb & Commerce

A live system in daily operation — the cover embeds the running site.

Problem

What was broken

A vacation-rental owner in Playa del Carmen depended on platform bookings and manual payment collection. Guests who wanted to pay by card or crypto had no direct option, and availability drifted between the site and Airbnb.

Approach

How it was fixed

Built a React/Vite booking front end backed by an Express API on Postgres. Stripe handles debit/credit cards; a self-hosted BTCPay Server issues Bitcoin and crypto invoices with CoinGecko exchange rates for fiat conversion — both unified behind one payment selector, with webhook-confirmed bookings. iCal sync keeps site availability aligned with Airbnb, and the stack runs on a Linux host under PM2.

Constraints

  • Accept debit/credit cards and cryptocurrency side by side without forcing guests into a single rail.
  • Self-hosted crypto checkout so the owner keeps custody and avoids extra processing fees.
  • Availability must stay consistent with Airbnb's calendar.
Stack

Tools in the system

  • React / Vite
  • Express
  • Stripe
  • BTCPay Server
  • CoinGecko rates
  • Postgres
  • Airbnb iCal sync
  • PM2 / Linux
Outcome

What changed

The owner takes direct bookings at elrefugiopdc.com with card or crypto payment at checkout, payments confirmed by webhook instead of manual messaging, and a calendar that no longer double-books against Airbnb.

cards + cryptoPayment rails
self-hostedCrypto checkout
Airbnb iCalCalendar sync
Lessons

What carries forward

  1. 01Crypto payments become ordinary when the invoice, exchange rate, and confirmation webhook behave exactly like the card flow.
  2. 02Self-hosting BTCPay Server removes custody and fee concerns, but you own rate sourcing and webhook reliability.
  3. 03Calendar sync is a trust feature: a double booking costs more than any integration effort.
All work