MethodK/portfolio/samui-authentic
CASE STUDY · IT & PRODUCT

Samui Authentic, out of WordPress, into a static site + workers.

Excursion operator in Koh Samui (Ang Thong, Koh Tan, à-la-carte Safari, private charters). The legacy stack was a WordPress/Elementor site overloaded with plugins (Tourfic, WPML, WooCommerce) on O2Switch — slow, fragile, impossible to evolve. Full rebuild as a hand-coded static HTML/CSS/JS site on Cloudflare Pages, backed by three Cloudflare Workers (public API, Stripe payment, partner QR program) and Supabase for data. No more PHP, no more plugins, no more admin to babysit.

Before the rebuild, 95 % of bookings came through WhatsApp. Now a meaningful share is booked online and the team focuses on corporate groups.

Direction · Samui Authentic
Brief

Move from WhatsApp to online booking — without inheriting WordPress debt.

The operator took most bookings on WhatsApp, tying up the team 7 days a week. The legacy WordPress site stacked Elementor, Tourfic, WPML and WooCommerce — heavy, slow, and every plugin update broke something. Goal: a fast, multilingual FR/EN site that can take a Stripe payment and track partner-driven leads, without re-introducing a stack to administer.

Constraints

Migration without SEO loss · FR / EN audiences · strong seasonality · operable from Bangkok.

Majority French-speaking audience, with English and international audiences. Strong seasonal peak. No SEO break acceptable: Google reviews and existing ranking had to stay intact. 40+ 301 redirects were written to map every legacy WordPress URL to its new static page. The site also had to remain operable remotely without VPN dependency.

Approach

Hand-coded static site + 3 Cloudflare Workers + Supabase · client-side i18n and multi-currency.

Frontend: hand-written HTML/CSS/JS, deployed to Cloudflare Pages via wrangler. No framework, no heavy build. Structured catalog mirrored from a Google Sheet as source of truth. Three Cloudflare Workers handle the dynamic layer: public API (Google reviews, booking PDF generation, cache purge), payment (Stripe webhook + Google Calendar sync via daily cron), partner program (QR journey + lead-source dashboard, daily cron). Supabase exposes business data via a dedicated API subdomain. Bilingual FR/EN through custom data-i18n attributes, multi-currency THB/EUR/USD/GBP computed client-side (Frankfurter). Bonus module: an à-la-carte Safari that optimises the chosen-stops itinerary with a TSP solver. Continuous run: review monitoring, catalog updates, worker observability.

Outcomes

What shipped, and what compounded.

0 PHP
WordPress retired · no more plugins or admin to maintain
3 Workers
public API · Stripe payment · partner QR
4.9
Google rating preserved (reviews preserved, no SEO regression)
MK