1. ສະຖານະການລູກຄ້າ
ບໍລິສັດທົວຣ໌ຂະໜາດກາງໃນແຂວງກະບີ່ ຮັບລູກຄ້າ 50-80 ຄົນຕໍ່ມື້ ໃຫ້ບໍລິການທົວຣ໌ snorkeling, sunset cruise ແລະ island hopping (4 islands, Hong islands, Phi Phi) ທີມປະກອບດ້ວຍ owner 1 ຄົນ, admin 3 ຄົນ, ໄກດ໌ ແລະກັບຕັນເຮືອພາຣ໌ທເນີຣ໌ອີກປະມານ 15 ຄົນ
ບັນຫາທີ່ພົບຕອນເຂົ້າມາ discovery:
- LINE booking ລົ້ນ: ຮັບ inquiry ແລະ booking ຜ່ານ LINE OA 100+ ຂໍ້ຄວາມຕໍ່ມື້ admin 3 ຄົນຜຽນກັນຕອບຈົນຕອບບໍ່ທັນຊ່ວງ 9.00-11.00 ນ.
- Excel scheduling: ຕາຕະລາງເຮືອເຮັດໃນ Google Sheets ແບ່ງປັນລະຫວ່າງທີມ ບໍ່ມີ locking mechanism — ພົບ double-book ປະມານ 2-3 ຄັ້ງຕໍ່ອາທິດໃນຊ່ວງ high season
- No real-time inventory: ທົວຣ໌ snorkeling ກັບ island hopping ໃຊ້ເຮືອລຳດຽວກັນບາງມື້ ແຕ່ Excel ບໍ່ຜູກຄວາມສຳພັນ admin ຕ້ອງຈຳເອງ
- Bank transfer + ສະລິບ: ລູກຄ້າໂອນເຂົ້າ SCB ແລ້ວສົ່ງສະລິບທາງໄລນ໌ admin ຕ້ອງເປີດແອັບທະນາຄານຕວດເທື່ອລະລາຍການ 5-10 ນາທີຕໍ່ສະລິບ
- Cancellation chaos: ຍົກເລີກ/ເລື່ອນມື້ຈົດໃນປຶ້ມບັນທຶກ ບໍ່ໄດ້ sync ເຂົ້າ Excel ຫຼາຍຄັ້ງຖືກ complain
- Tax/ລາຍງານຫຍຸ້ງ: ລວບລວມຍອດສົ່ງບັນຊີປາຍເດືອນໃຊ້ເວລາ 2 ມື້ເຕັມ
ລູກຄ້າເຄີຍລອງ solution ສຳເລັດຮູບ 2 ໂຕ:
- TourCMS: UX ເປັນ admin-heavy ແບບຝຣັ່ງ ທີມໄທໃຊ້ບໍ່ຄ່ອງ ແລະບໍ່ຮອງຮັບ PromptPay
- Bokun: ລາຄາ ~800 USD/ເດືອນ + commission ຕໍ່ booking ເກີນງົບ ແລະຍັງຕ້ອງເຮັດ workaround ສຳລັບ multi-tour inventory
ເປົ້າໝາຍຊັດເຈນ: ຫຼຸດ admin time ຈາກ 6 ຊົ່ວໂມງ/ມື້ → 1.5 ຊົ່ວໂມງ ແລະ lockdown over-booking ໃຫ້ເຫຼືອ 0
2. ເຫດໃດ solution ທົ່ວໄປບໍ່ work
- PromptPay ເປັນ dealbreaker: Off-the-shelf SaaS ຢ່າງ TourCMS, Rezdy ຮອງຮັບແຄ່ບັດເຄຣດິດ ແລະ Stripe ລູກຄ້າໄທ 80% ໂອນຜ່ານ PromptPay/ບັນຊີທະນາຄານ ລະບົບຕ້ອງ generate QR ແບບ dynamic per booking ແລະ verify ສະລິບອັດຕະໂນມັດ
- Multi-tour inventory ຊ້ອນຊ້ອນ: ທົວຣ໌ຫຼາຍໂຕ share resource (ເຮືອລຳດຽວ, ໄກດ໌ຄົນດຽວກັນ, ບ່ອນນັ່ງເທິງເຮືອໃຫຍ່) — generic system ທີ່ເບິ່ງ tour ເປັນ standalone product ຈຳລອງບໍ່ໄດ້ ຕ້ອງການ schema ທີ່ແຍກ “resource” ກັບ “tour product” ອອກຈາກກັນ
- UI ພາສາໄທທີ່ admin ເຂົ້າໃຈ: ທີມ admin ອາຍຸ 35-50 ໃຊ້ LINE ເປັນຫຼັກ ບໍ່ເຄີຍໃຊ້ CRM/SaaS dashboard ພາສາອັງກິດ — ຕ້ອງການ UI ທີ່ “ຄືກັນກັບ LINE” ຄື thread-based, ພາສາໄທທຸກຈຸດ ບໍ່ມີ jargon
3. ແນວທາງຂອງພວກເຮົາ
Tech stack ທີ່ເລືອກ:
- Next.js 14 (App Router) — admin dashboard + customer booking page ລວມໃນ codebase ດຽວ
- tRPC + Prisma + PostgreSQL — type-safe end-to-end, schema migration ງ່າຍ
- Cloudflare Workers — edge functions ສຳລັບ webhook LINE + slip verification queue
- PromptPay QR library (
promptpay-qr) — generate dynamic QR ຕໍ່ booking - Google Cloud Vision API — OCR ສະລິບທະນາຄານໄທ
- LINE Messaging API + Webhook — chatbot ແລະ confirmation push
ROI ທີ່ນຳສະເໜີເຈົ້າຂອງ:
| ຕົວເລືອກ | ປີທຳອິດ | ປີທີ 2 | ປີທີ 3 |
|---|---|---|---|
| SaaS (Bokun ~$800/mo) | ~$9,600 | ~$9,600 | ~$9,600 |
| Custom (one-time ~$9,500 + hosting $200/mo) | ~$11,900 | ~$2,400 | ~$2,400 |
Break-even ທີ່ເດືອນທີ 8 — ຫຼັງຈາກນັ້ນ custom ຖືກກວ່າ ~75% ຕໍ່ປີ ແລະເປັນຊັບສິນຂອງບໍລິສັດ
4 Pillars ຂອງ solution:
- Real-time inventory engine — WebSocket broadcast ເມື່ອມີ booking ໃໝ່ ທຸກ browser session ເຫັນ seat count ອັບເດດທັນທີ + DB-level locking ປ້ອງກັນ race condition
- PromptPay automation — generate QR per booking, slip verification ດ້ວຍ OCR (Google Vision ອ່ານເລກບັນຊີ + amount + timestamp)
- LINE webhook chatbot — ຕອບ FAQ ທີ່ pattern ຊັດເຈນ (ລາຄາ, ເວລາອອກເຮືອ, ຈຸດນັດພົບ) ປ່ອຍ booking complex ໄປຫາ admin
- Mobile-first admin dashboard — admin ໃຊ້ມືຖື 70% ຂອງເວລາ UI design start ຈາກ mobile breakpoint
Discovery process: ກ່ອນເລີ່ມຂຽນໂຄ້ດ ທີມພວກເຮົາຂໍເຂົ້າ shadow-day 1 ມື້ເຕັມ (8.00-18.00) ນັ່ງຂ້າງ admin ແຕ່ລະຄົນ ຈົດ pain point ທຸກຈຸດ ຜົນຄືພົບວ່າ admin ໃຊ້ເວລາ 40% ໄປກັບການ “ຫາ booking ເກົ່າ” — ເຮັດໃຫ້ເພີ່ມ search-first design ໃນ dashboard
4. ອາທິດຕໍ່ອາທິດ
Week 1-2: Discovery & Architecture
- Shadow-day 1 ມື້ກັບ admin team
- Stakeholder interview ກັບ owner + admin lead
- Database schema design — 15 tables (bookings, tours, resources, schedule_slots, customers, payments, slip_verifications, line_messages, ແລະອື່ນໆ)
- User journey mapping 4 personas: walk-in customer, repeat customer, agency, owner
Week 3-5: Backend Core
- Next.js + tRPC scaffold + Prisma migrations
- Authentication (admin + agency tier)
- Booking domain logic + inventory lock
- Payment integration: SCB Easy Net API + PromptPay QR generator
- Unit test ສຳຄັນ: race condition booking, inventory overflow
Week 6-8: Frontend & Realtime
- Admin dashboard UI (Thai-first, mobile breakpoint ກ່ອນ)
- Customer-facing booking flow (3-step: ເລືອກທົວຣ໌ → ໃສ່ຂໍ້ມູນ → ຈ່າຍເງິນ)
- Real-time inventory via WebSocket (Cloudflare Durable Objects)
- Calendar view + drag-to-reschedule
Week 9-10: LINE & OCR
- LINE webhook setup + intent classification (rule-based + GPT fallback)
- FAQ chatbot ສຳລັບ 12 ຄຳຖາມຍອດນິຍົມ
- Booking confirmation push message ພ້ອມ QR code
- OCR slip verification pipeline + manual review queue
Week 11: Migration & UAT
- Excel import tool (ຮັບ legacy booking 6 ເດືອນຫຼ້າສຸດ ~2,400 ລາຍການ)
- UAT ກັບ admin 3 ຄົນ — ພົບ critical bug 8 ໂຕ (3 high, 5 medium) ແກ້ໝົດໃນ 4 ມື້
- Penetration test ເບື້ອງຕົ້ນ (SQL injection, auth bypass)
Week 12: Launch
- Soft launch: 50% traffic ຜ່ານ feature flag 3 ມື້
- Training admin team 4 sessions (1 ຊົ່ວໂມງຕໍ່ session) ພາສາໄທທັງໝົດ
- Full launch + monitoring dashboard 24 ຊົ່ວໂມງທຳອິດ
- Knowledge transfer doc + runbook
5. ບັນຫາທີ່ພົບ
-
OCR accuracy ແຄ່ 87%: ສະລິບ SCB/Krungthai format ມາດຕະຖານອ່ານໄດ້ດີ ແຕ່ສະລິບ mobile banking screenshot (ໂດຍສະເພາະ Kbank app ເວີຣ໌ຊັນເກົ່າ) confidence ຕໍ່າ — ແກ້ດ້ວຍການເພີ່ມ manual review queue ສຳລັບສະລິບທີ່ confidence <90% admin ຕວດເອງ 1-click confirm ໃຊ້ເວລາສະເລ່ຍ 15 ວິນາທີ/ສະລິບ (ຫຼຸດຈາກ 5-10 ນາທີເດີມ)
-
Scope creep ມາຕອນກາງ project: Week 7 owner ຂໍເພີ່ມ agency tier pricing (commission ແບ່ງໃຫ້ travel agency ທີ່ສົ່ງລູກຄ້າມາ) — ບໍ່ໄດ້ຢູ່ໃນ scope ເດີມ ທີມພວກເຮົາປະເມີນໃຊ້ເວລາ +1 ອາທິດ ເຮັດ contract amendment ຊັດເຈນ (+25,000 ບາດ, timeline ເລື່ອນ 5 ມື້) owner accept ກ່ອນເລີ່ມຂຽນ — ສຳຄັນທີ່ບໍ່ເຮັດຟຣີເພາະຈະເປີດປະຕູໃຫ້ scope creep ຕໍ່ໄປ
-
Admin team adoption ຊ້າ: 2 ອາທິດທຳອິດ admin 1 ຄົນຍັງໂທຫາ hotline 3-4 ຄັ້ງ/ມື້ — ແກ້ດ້ວຍ video tutorial ພາສາໄທ 8 ຄຣິບ (ຄຣິບລະ 2-3 ນາທີ) + hand-holding 1 ເດືອນເຕັມ (response SLA 4 ຊົ່ວໂມງ) ອາທິດທີ 4 ຫຼຸດເຫຼືອ 0-1 ຄັ້ງ/ອາທິດ
6. ຜົນຫຼັງ launch + ongoing
ຜົນໃນເດືອນທີ 1:
- Admin time: 6 ຊົ່ວໂມງ/ມື້ → 2 ຊົ່ວໂມງ/ມື້ (-67%)
- Double-booking: 2-3 ຄັ້ງ/ອາທິດ → 0
- LINE response time: 4 ຊົ່ວໂມງ → 8 ນາທີ (chatbot handle 60% ຂອງ queries ປ່ອຍ admin ໂຟກັສ booking)
- Slip verification: 5-10 ນາທີ/ສະລິບ → 15 ວິນາທີ/ສະລິບ (OCR auto-confirm 87%)
- ລາຍງານສິ້ນເດືອນ: 2 ມື້ → 30 ນາທີ (export ຈາກ dashboard)
Lessons learned:
- Tour operator ໄທຕ້ອງການ tool ທີ່ “ຮູ້ສຶກຄືກັນກັບ LINE” — ຕອນທຳອິດພວກເຮົາອອກແບບ UI ສະອາດແບບ Notion admin ບອກວ່າ “ເບິ່ງລຽບໄປ ບໍ່ຮູ້ວ່າອັນໃດສຳຄັນ” ພວກເຮົາປັບເປັນ card-heavy + emoji ທີ່ຄຸ້ນເຄີຍ adoption ດີຂຶ້ນທັນທີ
- Shadow-day ຄຸ້ມຄ່າທີ່ສຸດ — 1 ມື້ທີ່ລົງໄປນັ່ງກັບ admin ໃຫ້ insight ຫຼາຍກວ່າ 5 ຮອບ meeting requirement gathering
- Manual review queue ບໍ່ແມ່ນ failure — ຜູ້ໃຊ້ກັບມັກເພາະຮູ້ສຶກ “ຄວບຄຸມໄດ້” — ສອນວ່າ automation 100% ບໍ່ແມ່ນເປົ້າໝາຍສະເໝີໄປ
Ongoing engagement: ພວກເຮົາດູແລຕໍ່ແບບ retainer 8 ຊົ່ວໂມງ/ເດືອນ ຄອບຄຸມ bug fix, small features (ໄຕມາດທີ່ຜ່ານມາເພີ່ມ voucher system + multilingual booking page EN/CN), security patch ແລະ monitoring ເດືອນທີ 6 ຫຼັງ launch ເລີ່ມ discussion ເຟສ 2 — ເພີ່ມ supplier portal ສຳລັບກັບຕັນເຮືອ check-in ລູກຄ້າຜ່ານມືຖື