ผมสร้างแอปเดตติ้งคนเดียว: วันละหนึ่งคน บทสนทนาหายไปหลัง 24 ชั่วโมง
(only24-portfolio.web.app)สวัสดีครับ ผมขอแนะนำ ONLY24 แอปเดตติ้งที่ผมสร้างคนเดียวเป็นเวลา 6 เดือน ตั้งแต่เดือนมกราคมปีนี้
เป็นแอปแบบไหน
- แมตช์ได้วันละแค่หนึ่งคนเท่านั้น ไม่มีการปัดสไวป์
- ตั้งแต่วินาทีที่แมตช์กัน จะคุยกันได้เพียง 24 ชั่วโมงเท่านั้น เมื่อหมดเวลา บทสนทนาจะถูกลบออกจากเซิร์ฟเวอร์ทั้งหมดด้วย
- โปรไฟล์ใช้ avatar แทนรูปถ่ายจริง หากถูกคอกันก็สามารถต่อเป็นเพื่อน และวิดีโอคอลกันได้ภายในแอป
ทำไมถึงสร้างแบบนี้
เวลาเปิดแอปนัดบอด/เดตติ้งที่มีอยู่เดิม จะมีคนเป็นร้อย ๆ คนไหลเข้ามา แต่ผมรู้สึกว่ายิ่งปัดผ่านไปเรื่อย ๆ ก็ยิ่งไม่มีใครจริงจัง เพราะคนถัดไปอยู่แค่หลังการ์ดใบเดียวเสมอ ผมคิดว่าเมื่อมีตัวเลือกไม่จำกัด ก็ไม่มีใครถูกให้ความสำคัญ จึงทำในทางตรงกันข้าม: วันนี้มีแค่หนึ่งคน และ 24 ชั่วโมง
ปัญหาที่น่าสนใจระหว่างพัฒนา
- แชตเข้ารหัส E2E: แลกเปลี่ยนกุญแจด้วย X25519 ECDH และเข้ารหัสด้วย AES-256-GCM ใน Firestore จะเหลือเพียง ciphertext เท่านั้น แม้แต่ผมซึ่งเป็นผู้ดูแลระบบก็อ่านบทสนทนาไม่ได้ แต่ดีไซน์นี้ชนกับฟีเจอร์ AI ตรง ๆ เพราะ AI ถอดรหัสไม่ได้ สุดท้ายจึงคง E2E ไว้สำหรับบทสนทนาระหว่างคนกับคน และยกเว้นให้เฉพาะแชตกับบอต AI เป็นข้อความแบบ plain text
- cold start ของแอปเดตติ้ง: ถ้าไม่มีผู้ใช้ก็แมตช์ไม่ได้ และถ้าแมตช์ไม่ได้ผู้ใช้ก็ออกจากแอปไป โครงสร้างมันเป็นแบบนี้ ผมจึงใส่ fallback ให้ AI bot แมตช์แทน หากในระบบแมตช์จากรูปตามความชอบ (Gemini embedding 768 มิติ + cosine similarity) แล้วไม่มีคู่ภายใน 10 นาที แชตกับบอตจะให้ GPT ดูบริบทของรูปแล้วตอบกลับ
- การแมตช์ตามตำแหน่ง: ใช้ geohash เป็นฐาน และตั้งให้ต้องเข้าเงื่อนไขทั้งรัศมีของตัวเองและรัศมีของอีกฝ่ายถึงจะแมตช์กันได้ ตอนแรกผม implement แบบ "ใช้รัศมีของฝั่งที่กว้างกว่า" แล้วเกิดบั๊กที่ผู้ใช้ซึ่งตั้งไว้ 5km ได้แมตช์กับคนที่อยู่ไกล 50km จึงแก้เป็นเงื่อนไข AND ของรัศมี
- สแต็ก: Flutter + Firebase(Firestore, Cloud Functions/TypeScript) + ใช้ Supabase เสริม, วิดีโอคอลผ่าน WebRTC, การยืนยันตัวตน PASS (อายุ 19 ปีขึ้นไป, ป้องกันการสมัครซ้ำ)
สถานะปัจจุบันแบบตรงไปตรงมา
ผมนำขึ้นสโตร์ตอนปลายเดือนเมษายน และแทบยังไม่มีผู้ใช้ แอปเดตติ้งนั้นผู้ใช้คือผลิตภัณฑ์ ผมกำลังเรียนรู้ด้วยตัวเองว่า cold start เป็นส่วนที่ยากที่สุด fallback ด้วยบอตช่วยกันประสบการณ์แรกแบบ "ห้องว่างเปล่า" ได้แล้ว แต่โจทย์ตอนนี้คือควรเริ่มหาผู้ใช้จริงจากที่ไหน ผมอยากฟังประสบการณ์จากคนที่เคยแก้ปัญหาคล้าย ๆ กันครับ
ผู้พัฒนา
หลังจากสร้างเสร็จ ผมอยู่ในสภาพที่อยากได้ feedback จากผู้ใช้งานมาก ๆ หากให้ความเห็นต่าง ๆ มา ผมจะนำไปปรับปรุงทันทีเพื่อให้ใช้งานสะดวกขึ้น ฝากติดต่อเข้ามากันเยอะ ๆ ครับ
- App Store: https://apps.apple.com/kr/app/id6759185657
- Google Play: https://play.google.com/store/apps/details?id=com.kamataewoo.only24
- สรุปสถาปัตยกรรมทางเทคนิค: https://only24-portfolio.web.app
2 ความคิดเห็น
คอนเซ็ปต์เหมือนนัดบอดตอนเที่ยง แต่ของแบบนี้สุดท้ายแล้วดูเหมือนว่าจำนวนผู้ใช้มีความสำคัญมากกว่าคุณภาพของแอปอยู่ดี เหมือนกับ KakaoTalk ที่ถึงจะห่วยก็ยังเลี่ยงไม่ได้ต้องใช้นั่นแหละ
สวัสดีครับ! ขอบคุณมากสำหรับคำตอบนะครับ
ใช่ครับ คุณภาพดีขึ้นมาระดับหนึ่งแล้ว แต่การรวบรวมผู้ใช้นี่ยังไม่ง่ายเลยครับ..