Vấn đề khách hàng gặp phải
Boutique resort tọa lạc ven biển tại tỉnh Nakhon Si Thammarat, cách bến tàu xem cá heo hồng (pink dolphin) cùng tỉnh chỉ vài km. Giá phòng trung bình 2,400-4,800 baht/đêm, hoạt động 11 năm. Chủ là người Hồng Kông kết hôn với người Nakhon Si Thammarat, có ý định xây dựng thành “alternative” của các tỉnh du lịch nổi tiếng — yên tĩnh hơn, giá rẻ hơn, nhưng vẫn có wow factor cấp thế giới. Vấn đề kể lúc discovery call là 78% revenue đến từ OTA (Agoda 42%, Booking.com 28%, Expedia 8%) cắt commission trung bình 18% — nghĩa là commission tổng mỗi năm khoảng 2.4 triệu baht. Rất “xót lòng” vì nếu được lại đầy đủ sẽ đem đi renovate phòng và thêm spa phase 2 ngay lập tức.
Tệ hơn nữa là pink dolphin tour — signature experience của resort (70% khách đến tỉnh vì muốn xem cá heo hồng) — không có booking flow online. Khách phải LINE liên hệ front desk từng người để đặt trip, gửi slip chuyển khoản, nhận xác nhận bằng tin nhắn. Khiến pink dolphin booking conversion rất thấp dù traffic quan tâm cao. Bao gồm cả airport transfer (sân bay gần nhất là Surat Thani, lái xe 1.5 giờ) cũng có cùng friction, khiến nhiều khách chọn dùng Grab hoặc xe công cộng — resort mất ancillary revenue đáng lẽ phải có.
Khách từng thuê freelancer làm web WordPress + WooCommerce, dùng 3 năm. Vấn đề là LCP 4.8s trên mobile, checkout flow vỡ thường xuyên khi đổi ngôn ngữ (TH/EN/CN) vì multilingual plugin tích hợp với WooCommerce không trọn vẹn. Checkout dropoff rate đo được 71%. Mục tiêu đặt ra là direct booking +400% trong 6 tháng + tăng ancillary revenue từ pink dolphin + airport transfer + spa package thành kênh doanh thu phụ chạm tới được.
Tại sao giải pháp cũ không hiệu quả
WooCommerce thiết kế cho bán hàng retail không phải booking có business rules phức tạp như room availability thay đổi theo ngày, package bundle khách chọn room + tour + transfer cùng lúc, dynamic pricing high/low season. Mọi feature này làm được trong WooCommerce nhưng phải stack 8-12 plugins, license tổng năm 600-800 USD và Core Web Vitals hỏng vì plugin load JS chồng chéo.
Còn SaaS booking engine mà thị trường resort Thái ưa chuộng (Cloudbeds, Little Hotelier, eviivo) hỗ trợ room booking tốt nhưng mọi cái không hỗ trợ activity/tour booking link với booking phòng trong cùng giao dịch — khiến khách phải check-out 2 lần (room + tour riêng) — UX phá conversion rõ ràng. Ngoài ra license rate hàng tháng của SaaS này 4,500-9,000 baht/tháng — với resort cỡ trung 5-year TCO là 270,000-540,000 baht.
Chạy Google Ads cũng đốt tiền vô ích vì keyword “resort นครศรีธรรมราช” volume thấp. Còn keyword volume cao “pink dolphin tour thailand” CPC cao và landing page cũ không tốt conversion rate <0.5%. Còn Facebook Ads khách thử bắn Hong Kong audience dù CTR cao nhưng booking không xảy ra vì checkout flow không work trên mobile.
Cách tiếp cận của Southern Whale
Sau discovery 2 lần với chủ và GM (vợ chồng), chúng tôi vẽ 4 pillars.
1) Astro migration + Performance baseline Chọn Astro thay WordPress để LCP <1.5s + zero JS by default + zero plugin attack surface. R2 lưu ảnh resort + 320+ ảnh pink dolphin. Xem chi tiết lý do technical tại web development service.
2) Custom booking engine trên Supabase Xây booking flow kết hợp room + pink dolphin tour + airport transfer trong cùng giao dịch dùng Supabase (Postgres + Auth + Realtime) rẻ hơn SaaS 70% (5-year TCO khoảng 90,000 baht vs 400,000+ baht của SaaS) và có real-time fleet sync giữa các tàu tour để chống overbooking.
3) Pink dolphin tour widget Thiết kế widget gắn được trên mọi trang + email signature của team, hiển thị available slots + booking trong 1 click. Dùng Schema markup TouristAttraction + Trip để Google Rich Results.
4) Local content + Mandarin SEO Vì 35% khách là người Trung Quốc/Hong Kong/Singapore tìm content tiếng Trung trên Baidu + Xiaohongshu, tạo content hub tiếng Trung phổ thông 8 bài khởi đầu về tỉnh + pink dolphin (nội dung native Mandarin writer, không phải Google Translate).
Quy trình triển khai (Week-by-Week)
Week 1-2: Discovery + Database Schema Phỏng vấn team resort + boat captain + spa manager để map operational workflow. Design Postgres schema 18 tables bao gồm room, tour, transfer, package bundle, payment, refund, audit log. Làm keyword research 180+ keywords chia 4 cluster (direct booking TH, direct booking EN, Mandarin search, pink dolphin tour intent).
Week 3-5: Backend + Booking Engine Xây booking API trên Supabase: seat-lock 5 phút, real-time fleet sync tàu tour via Postgres triggers + Supabase Realtime, payment processors Stripe + PromptPay QR (custom generator) + bank transfer reconciliation, email confirmation 3 ngôn ngữ (TH/EN/ZH) qua Resend.
Week 6-7: Frontend + Migration Migrate WordPress → Astro 28 trang, build conversion-first landing page (hero booking checker + pink dolphin video bg + sticky bottom bar mobile), implement i18n routing TH/EN/ZH + Cloudflare R2 ảnh tổng 1.2GB → 290MB sau WebP convert.
Week 8-9: Pink Dolphin Tour Widget + Add-ons Tạo widget embed được mọi trang + email signature, thiết kế package bundle UI để khách chọn room + tour + transfer + spa package trong 1 bước, build admin console cho front desk quản lý booking + hủy + refund.
Week 10-11: SEO + Content + Schema Viết content hub TH/EN/ZH 22 bài (8 ZH thêm) về pink dolphin guide, Nakhon Si Thammarat itinerary, Wat Phra Mahathat day trip, southern Thai food guide. Implement Schema markup đầy đủ Hotel + TouristAttraction + Trip + FAQPage, optimize Google Business Profile + 30 local citations.
Week 12: QA + Soft Launch Test booking flow end-to-end + payment gateway testing + load test (Locust simulate 500 concurrent users), accessibility audit WCAG AA, soft launch 5 ngày gradual 10% → 30% → 70% → 100%.
Sau launch tiếp retainer 6 tháng làm content 3 bài/tháng + monitoring + GBP post weekly + backlink outreach.
Obstacles + Pivots
Vấn đề 1: Pink dolphin schedule phụ thuộc thủy triều + thời tiết — Tuần 8 lúc implement booking flow gặp ràng buộc business logic không có trong original spec — pink dolphin tour chỉ làm được trong giai đoạn nước lên và thời tiết tốt. Boat captain phải confirm 1 ngày trước mỗi trip. Hệ thống phải hỗ trợ tentative booking confirm/cancel sau. Khắc phục bằng thêm “tentative booking” status kèm auto-notify khách 24h trước trip + auto-refund nếu cancel do thời tiết.
Vấn đề 2: PromptPay slip reconciliation manual workload cao — Tháng đầu sau launch nhân viên accounting phải check slip PromptPay khách gửi với booking ID từng cái, mất 2-3 giờ/ngày. Khắc phục bằng integrate Slip Verify API của ngân hàng Bangkok + auto-match với booking amount + booking ID. Giảm workload 85%.
Vấn đề 3: Tháng thứ 3 Mandarin traffic thấp hơn dự kiến — Dù content ZH viết bằng native writer nhưng Baidu indexing tại Thái rất chậm (Baidu crawler có IP block list cho TH hosting). Khắc phục bằng submit sitemap trực tiếp qua Baidu Webmaster + xin kết nối Xiaohongshu (Little Red Book) account của resort trao đổi traffic. 6 tuần sau implement Mandarin traffic tăng 3.2 lần.
Post-launch + Ongoing
Trong 6 tháng sau launch organic traffic tăng từ 120 lên 2,340 sessions/tháng (+1,850%), direct booking +420%, OTA dependency giảm từ 78% xuống còn 35% revenue, ancillary revenue (pink dolphin tour + airport transfer + spa package) tăng 1.8 triệu baht trong tháng 6 — là kênh doanh thu mới mà trước đây không bao giờ thu được.
Bài học rút ra Resort + activity bundle làm trong một giao dịch là “moat” mà SaaS booking engine bình thường không làm được — với resort có signature experience, đầu tư custom booking engine có ROI nhanh hơn ta nghĩ. Resort hoàn vốn CAPEX của hệ thống mới trong tháng thứ 8 từ commission OTA tiết kiệm được.
Hiện khách vẫn là retainer client tháng thứ 9 và bắt đầu phase 2 — mở rộng hệ thống booking để hỗ trợ wedding venue (resort có bãi biển riêng tổ chức beach wedding được) + corporate retreat package kèm kết nối CRM (HubSpot) cho B2B lead management. Xem hệ thống đặt tour của tỉnh Krabi dùng pattern tương tự hoặc dịch vụ software development cho custom build khác.