Case Study
แสนรัก (SanRak) - แพลตฟอร์มหาคู่และคอมมูนิตี้คนไทย & LGBTQ+
Next.js 16Supabase AuthDrizzle ORMPrivacy Gate
โปรเจกต์ทดลองที่ตั้งใจสร้างขึ้นมาแก้ปัญหาเรื่องโปรไฟล์ปลอมและความไม่ปลอดภัยบนแอปหาคู่ทั่วไป โดยออกแบบให้เป็นทั้งพื้นที่คอมมูนิตี้สำหรับพูดคุย และบริการช่วยจัดหาคู่โดยทีมงานหลังบ้าน (Matchmaker)
แนวคิดการออกแบบและโครงสร้างระบบ
ผมเลือกใช้เครื่องมือสมัยใหม่ที่เน้นความปลอดภัยและความเร็วในการใช้งานเป็นหลัก:
- Privacy Gate (สิทธิ์การเข้าถึงข้อมูล): ปกป้องความเป็นส่วนตัวของผู้ใช้งานด้วยการซ่อนรูปภาพ โปรไฟล์ และช่องทางการติดต่อทั้งหมดจากผู้ใช้ทั่วไปที่ไม่ได้ล็อกอิน รวมถึงป้องกันไม่ให้บอตของ Search Engine ดึงข้อมูลไป โดยจะเข้าถึงข้อมูลได้ก็ต่อเมื่อผ่านการตรวจสอบสิทธิ์ (Supabase Auth) แล้วเท่านั้น
- Next.js 16 App Router & Server Actions: แบ่งโครงสร้างหน้าเว็บตามระดับสิทธิ์ใช้งานชัดเจนผ่าน Route Groups เช่น
(app),(auth)และ(public)พร้อมใช้ Server Actions จัดการเขียนและอัปเดตข้อมูลหลังบ้าน ช่วยให้โค้ดคลีน ประสิทธิภาพสูง และลดการพึ่งพา Client-Side API ที่ซับซ้อน - Drizzle ORM & Database Layer: ออกแบบฐานข้อมูล PostgreSQL ด้วย Drizzle ORM เพื่อเชื่อมโยงข้อมูลในระบบบอร์ดคอมมูนิตี้ และระบบจับคู่ที่มีความซับซ้อนได้อย่างราบรื่นและปลอดภัย
- หาคู่รายจังหวัด (Geographic Routing): ใช้ Dynamic Route
/geo/[province]คัดกรองและแสดงผลสมาชิกตามจังหวัด เพื่อช่วยให้ผู้ใช้ค้นหาเพื่อนหรือคนที่ใช่ในพื้นที่ใกล้เคียงได้ง่ายขึ้น
ความท้าทายและการแก้ปัญหา (Challenges & Solutions)
- โจทย์ที่ท้าทาย: การทำ SEO ควบคู่ไปกับระบบ Privacy Gate เป็นโจทย์ที่ขัดแย้งกัน เพราะเราต้องการซ่อนข้อมูลผู้ใช้เพื่อความเป็นส่วนตัวสูงสุด แต่ในขณะเดียวกันก็ต้องให้ Google ค้นพบหน้าเว็บเพื่อดึงผู้ใช้งานใหม่ ๆ เข้ามาสมัครสมาชิก
- การแก้ปัญหา: เลือกแก้ปัญหาด้วยการแยกส่วนหน้าเว็บสาธารณะ (Public Pages) สำหรับทำ SEO ออกจากส่วนของระบบสมาชิก โดยสร้างหน้า
/geoสำหรับแสดงข้อมูลสถิติแยกตามพื้นที่ และหน้า/blogสำหรับระบบบทความความรักที่เขียนด้วยไฟล์ MDX ซึ่งช่วยให้ Google ค้นเจอเว็บได้ง่ายขึ้น ในขณะที่หน้ารายชื่อสมาชิกและบอร์ดคอมมูนิตี้ทั้งหมดจะถูกล็อกไว้หลังระบบล็อกอิน (Middleware Protected) 100%
ผลลัพธ์เชิงเทคนิคและความปลอดภัย
- รูปภาพและข้อมูลปลอดภัย: รูปภาพของสมาชิกจะถูกเก็บไว้บน Supabase Storage โดยควบคุมสิทธิ์การเข้าถึงผ่าน Row Level Security (RLS) และเบลอรูปภาพอัตโนมัติหากผู้ใช้งานยังไม่ได้เข้าสู่ระบบ ป้องกันการส่องรูปภาพโดยไม่ได้รับอนุญาต
- ระบบแนะนำคู่แบบ Hybrid: ผสมผสานระบบบอร์ดคอมมูนิตี้ (Community Feed) เข้ากับระบบจัดการหลังบ้านสำหรับ Matchmaker (Admin Dashboard) เพื่อให้ทีมงานสามารถคัดกรองประวัติ ตรวจสอบความถูกต้องของสลิปโอนเงินผ่าน LINE OA และจับคู่แนะนำสมาชิกแบบตัวต่อตัวได้อย่างแม่นยำ
- ดีไซน์ที่ดูอบอุ่นและจริงใจ: เลือกใช้โทนสีครีม แดงกุหลาบ และน้ำตาลอบอุ่น (Rose & Warm Amber) สไตล์ Minimal เพื่อให้ผู้ใช้งานรู้สึกผ่อนคลาย ปลอดภัย และเป็นมิตรตั้งแต่วินาทีแรกที่เปิดหน้าเว็บ
เทคโนโลยีที่เลือกใช้ (Tech Stack Breakdown)
- Frontend: Next.js 16 (App Router), Tailwind CSS, TypeScript
- Backend & Database: Node.js, PostgreSQL (Supabase), Drizzle ORM
- Authentication & Storage: Supabase Auth & Storage (พร้อมตั้งค่า RLS Custom Rules)
- Code Quality & Tools: Knip (สำหรับคัดแยกไฟล์และโค้ดที่ไม่ได้ใช้งาน), ESLint, SVG Icons (หลีกเลี่ยงการฝัง Emoji ลงในโค้ดโดยตรง)
9M
9mza | นายเอ็มซ่ามากส์
Strategic Infrastructure Architect & Technical SEO Specialist
ผู้ก่อตั้ง AEMDEVWEB และ UNLINK THAILAND ผู้รวบรวมบันทึกชีวิตและเรื่องราวที่ตกผลึก เพื่อแบ่งปันบทเรียนและการเติบโตผ่านมุมมองของสถาปัตยกรรมดิจิทัลและประสบการณ์จริง