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
A live system in daily operation — the cover embeds the running site.
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.
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.
Tools in the system
- React / Vite
- Express
- Stripe
- BTCPay Server
- CoinGecko rates
- Postgres
- Airbnb iCal sync
- PM2 / Linux
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.
What carries forward
- 01Crypto payments become ordinary when the invoice, exchange rate, and confirmation webhook behave exactly like the card flow.
- 02Self-hosting BTCPay Server removes custody and fee concerns, but you own rate sourcing and webhook reliability.
- 03Calendar sync is a trust feature: a double booking costs more than any integration effort.
Related case studies
All work- Web & Commerce · 2026Furniture cut-list designer — 3D preview and SketchUp exportA browser tool that turns wardrobe dimensions into an exact cut list, a live 3D model and a ready-to-run SketchUp script — replacing two Python scripts the workshop ran by hand on one machine.
- Web & Commerce · 2026SPUMABEAT — foam-party & event-production websiteA production marketing and booking site for the original foam-party company in the Riviera Maya: service catalog, blog, gallery, and a quote funnel served from a small self-hosted box.