LINE MINI App Planning Overview
Sportclub CNX Court Booking Platform
Document Version: 1.0
Date: January 2026
Status: Planning Document
Executive Summary
App Overview
Target Audience
Core Features
Screen Flow Diagram
Technical Architecture
User Journey
Stakeholder Relationships
LINE Integration
QR Code System
Revenue Model
Implementation Timeline
Success Metrics
Sportclub CNX is a sports facility booking platform specializing in tennis and badminton courts in Chiang Mai. This document outlines the planning for a LINE MINI App that will provide seamless booking, wallet management, and loyalty programs through LINE's ecosystem.
Key Objectives:
Increase booking convenience via LINE
Reduce no-shows through LINE notifications
Build customer loyalty with points system
Enable cashless payments via LINE Pay integration
Sportclub CNX (LINE MINI App)
LINE MINI App (Mobile web wrapper)
LINE LIFF (Line Front-end Framework)
Progressive Web App (PWA)
Court booking and scheduling
Digital wallet (District Credits)
Payment via PromptPay/QR Code
Booking confirmation via LINE
Loyalty points system
Admin management dashboard
Segment
Description
Age Range
Tech Proficiency
Tennis Players
Regular court users
25-55
Intermediate
Badminton Players
Casual and league players
20-50
Intermediate
Sports Enthusiasts
Multi-sport users
20-60
Basic-Intermediate
Location: Chiang Mai and surrounding areas
Income: Middle to upper-middle class
LINE Usage: Heavy LINE users (Thailand's dominant messaging platform)
Payment Preference: Increasingly cashless, mobile-first
Feature
Description
Priority
Browse Courts
View available courts at each branch
Must Have
Real-time Booking
Check availability and book slots
Must Have
Digital Wallet
Load credits, view balance
Must Have
Payment via QR
Scan PromptPay QR to pay
Must Have
Booking History
View past and upcoming bookings
Must Have
Cancel/Reschedule
Modify bookings
Should Have
Loyalty Points
Earn points per booking
Should Have
LINE Notifications
Receive booking reminders
Should Have
Calendar Integration
Add bookings to phone calendar
Nice to Have
Admin Features (Owner/Staff)
Feature
Description
Priority
Dashboard
Overview of bookings and revenue
Must Have
Court Management
Add/Edit courts and pricing
Must Have
Booking Management
Approve/Cancel bookings
Must Have
User Management
View user activity
Must Have
Payment Verification
Confirm manual payments
Must Have
Reports
Revenue and usage reports
Should Have
Promotion Management
Create discounts/offers
Should Have
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SPORTRLUB CNX - SCREEN FLOW β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββ
β START β
β (Landing) β
ββββββββ¬ββββββββ
β
βΌ
ββββββββββββββββββββββ
β Home / Branches β
β /liff/book β
ββββββββ¬ββββββββββββββ
β
ββββββββββββββββββββββββΌβββββββββββββββββββββββ
β β β
βΌ βΌ βΌ
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β Select Date β β My Bookings β β Top Up β
β /liff/book β β /liff/book? β β /liff/topup β
β (Step 1) β β tab=bookings β β β
ββββββββββ¬βββββββββ βββββββββββββββββββ ββββββββββ¬βββββββββ
β β
β βββββββββββββββββββββββββββββββββββββββ
β β
βΌ βΌ
βββββββββββββββββββββββ
β Select Time Slot β
β (Step 2) β
ββββββββββββ¬βββββββββββ
β
βΌ
βββββββββββββββββββββββ
β Confirm Booking β
β (Step 3) β
ββββββββββββ¬βββββββββββ
β
βΌ
βββββββββββββββββββββββ
β Payment Screen β
β (Credits/QR) β
ββββββββββββ¬βββββββββββ
β
βΌ
βββββββββββββββββββββββ βββββββββββββββββββββββ
β Booking Success β β Payment History β
β /liff/book/ β β /wallet β
β success β β β
βββββββββββββββββββββββ βββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββ
β Booking Details β
β (View Receipt) β
βββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ADMIN DASHBOARD FLOW β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββ
β Admin Login β
β /admin/login β
ββββββββββββ¬βββββββββββ
β
βΌ
βββββββββββββββββββββββ
β Admin Dashboard β
β /admin β
ββββββββββββ¬βββββββββββ
β
βββββββββββββΌββββββββββββ¬ββββββββββββ¬ββββββββββββ
β β β β β
βΌ βΌ βΌ βΌ βΌ
ββββββββββ ββββββββββ ββββββββββ ββββββββββ ββββββββββ
βBookingsβ β Courts β β Users β β Wallet β β Reportsβ
ββββββββββ ββββββββββ ββββββββββ ββββββββββ ββββββββββ
Screen Transitions (Detailed)
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DETAILED SCREEN TRANSITIONS β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ
β HOME ββββββΆβ BRANCHES ββββββΆβ COURTS ββββββΆβ TIME ββββββΆβ CONFIRM β
β β β SELECT β β SELECT β β SELECT β β β
ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ
β β β β β
β β β β β
βΌ βΌ βΌ βΌ βΌ
ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ
β MY BOOK β β DETAILS β β PRICE β β SLOTS β β USER β
β (Tab) β β VIEW β β VIEW β β GRID β β INFO β
ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ
β β
β β
βΌ βΌ
ββββββββββββ ββββββββββββ
β BOOKING β β PAYMENT β
β DETAIL βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ SCREEN β
ββββββββββββ ββββββββββββ
β β
β βΌ
β ββββββββββββ
β β SUCCESS β
β β PAGE β
β ββββββββββββ
β β
β βΌ
β ββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ICS β
β CALENDAR β
ββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SYSTEM ARCHITECTURE DIAGRAM β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββ
β LINE Platform β
β β
β βββββββββββββ β
β β LINE OA β β β Official Account
β βββββββββββββ β
β βββββββββββββ β
β β LINE Pay β β β Payment Integration
β βββββββββββββ β
β βββββββββββββ β
β β LINE LIFF β β β App Framework
β βββββββββββββ β
ββββββββββ¬βββββββββ
β
ββββββββββββββββββββΌβββββββββββββββββββ
β β β
βΌ βΌ βΌ
ββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββββ
β Frontend β β Backend β β Database β
β β β β β β
β Next.js 16 β β Next.js API β β PostgreSQL β
β React 19 β β Routes β β (Prisma ORM) β
β Tailwind CSS β β β β β
β Lucide Icons β β β β β
ββββββββββββββββββ ββββββββββ¬ββββββββββ ββββββββββββββββββ
β
ββββββββββββββββββββΌβββββββββββββββββββ
β β β
βΌ βΌ βΌ
ββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββββ
β External β β File β β Email/ β
β Services β β Storage β β Notificationsβ
β β β β β β
β β’ PromptPay β β β’ Vercel β β β’ LINE Bot β
β β’ QR Server β β Storage β β (ElysiaJS) β
β β’ Calendar β β β’ CDN β β β
ββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DATA FLOW DIAGRAM β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β USER β β LINE β β BACKEND β
β β β LIFF SDK β β SERVER β
ββββββββ¬βββββββ ββββββββ¬βββββββ ββββββββ¬βββββββ
β β β
β 1. Open App β β
ββββββββββββββββββββββΆβ β
β β 2. Get User Info β
β ββββββββββββββββββββββββ
β β β
β 3. Login β β
βββββββββββββββββββββββ β
β β β
β 4. Select Court β β
ββββββββββββββββββββββΆββββββββββββββββββββββΆβ
β β β
β β β 5. Check
β β β Availability
β β ββββββββββββββββΆ
β β β Database
β β β
β 6. Confirm Booking β β
ββββββββββββββββββββββΆββββββββββββββββββββββΆβ
β β β
β β β 7. Create
β β β Booking Record
β β ββββββββββββββββΆ
β β β
β 8. Payment β β
β (Credits/QR) β β
ββββββββββββββββββββββΆββββββββββββββββββββββΆβ
β β β
β β β 9. Update
β β β Wallet Balance
β β ββββββββββββββββΆ
β β β
β 10. Success β β
βββββββββββββββββββββββ β
User Journey: First-Time User
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β FIRST-TIME USER JOURNEY MAP β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STAGE 1: DISCOVERY β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β LINE OA β β LINE MINI β β FRIEND β β SEARCH β β
β β PROMOTION βββββΆβ APP LINK βββββΆβ REFERRAL βββββΆβ (Google) β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β
β TOUCHPOINT: LINE OA Message / Chat Menu / LIFF Button β
β EMOTION: Curious / Interested β
β GOAL: Learn about the service β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STAGE 2: ONBOARDING β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β LINE LIFF LOGIN FLOW β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β
β β β β
β β [Open App] βββΆ [LINE Login Auto] βββΆ [Profile Setup] βββΆ [OK] β β
β β β β
β β Step 1: User opens LINE MINI App β β
β β Step 2: LINE SDK auto-authenticates user β β
β β Step 3: App displays welcome message with user name β β
β β Step 4: User is ready to book β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β TOUCHPOINT: LINE LIFF Login Screen β
β EMOTION: Excited / Optimistic β
β GOAL: Quick and easy access β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STAGE 3: FIRST BOOKING β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β SELECT βββββΆβ SELECT βββββΆβ SELECT βββββΆβ CONFIRM β β
β β BRANCH β β DATE β β TIME β β BOOKING β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β β β β β
β β β β β β
β βΌ βΌ βΌ βΌ β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β Show all β β Calendar β β Available β β Review β β
β β locations β β picker β β time slots β β details β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β
β TOUCHPOINT: Booking Flow Screens β
β EMOTION: Confident / Satisfied β
β GOAL: Complete first booking successfully β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STAGE 4: PAYMENT β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β PAYMENT OPTIONS β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β
β β β β
β β ββββββββββββββββ ββββββββββββββββ β β
β β β DISTRICT β β PROMPTPAY β β β
β β β CREDITS β β QR β β β
β β β β β β β β
β β β β’ Pre-paid β β β’ Scan to β β β
β β β β’ Instant β β pay β β β
β β β β’ Rewards β β β’ 30-min β β β
β β β included β β expiry β β β
β β ββββββββββββββββ ββββββββββββββββ β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β TOUCHPOINT: Payment Screen β
β EMOTION: Trust / Security β
β GOAL: Complete payment securely β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STAGE 5: CONFIRMATION & LOYALTY β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β BOOKING βββββΆβ ADD TO βββββΆβ LOYALTY βββββΆβ RATE β β
β β CONFIRMED β β CALENDAR β β POINTS β β EXPERIENCE β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β β β β β
β βΌ βΌ βΌ βΌ β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β β’ Booking β β β’ .ics β β β’ Earn 1 β β β’ Feedback β β
β β ID β β file β β point/ β β form β β
β β β’ Receipt β β β’ Auto β β hour β β β’ Review β β
β β β’ QR Code β β add β β β’ Redeem β β request β β
β β β’ LINE β β to β β for β β β’ Share β β
β β Notify β β phone β β discount β β β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β
β TOUCHPOINT: Success Screen + LINE Notification β
β EMOTION: Delighted / Rewarded β
β GOAL: Feel valued and encourage return visit β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Stakeholder Relationships
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STAKEHOLDER RELATIONSHIP DIAGRAM β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββ
β SPORTRLUB CNX β
β SERVICE OWNER β
β β
β β’ Provides β
β facilities β
β β’ Sets pricing β
β β’ Manages β
β operations β
ββββββββββ¬βββββββββ
β
ββββββββββββββββββββΌβββββββββββββββββββ
β β β
βΌ βΌ βΌ
ββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββββ
β CUSTOMERS β β EMPLOYEES β β PARTNERS β
β β β β β β
β β’ Book courts β β β’ Manage β β β’ LINE β
β β’ Pay via app β β bookings β β (Platform) β
β β’ Earn points β β β’ Handle β β β’ Payment β
β β’ Get notify β β payments β β Gateways β
ββββββββββββββββββ β β’ Support β β β’ Maintenance β
β users β β β’ Supplies β
ββββββββββββββββββ ββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SERVICE RELATIONSHIP MAP β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SERVICE FLOW MAP β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββ ββββββββββββ ββββββββββββ β
β β Customer ββββββββΆβ App ββββββββΆβ Backend β β
β β β β (LINE β β Server β β
β β β’ Makes β β LIFF) β β β β
β β bookingβ β β β β’ Processβ β
β β β’ Pays β β β’ UI/UX β β bookingβ β
β β β’ Reviewsβ β β’ Forms β β β’ Store β β
β ββββββββββββ ββββββ¬ββββββ β data β β
β β ββββββ¬ββββββ β
β β β β
β β β β
β ββββββββββββ β βΌ β
β β Customer ββββββββββββββ€ ββββββββββββ β
β β β β β Database β β
β β β’ Receiveβ β β (Postgre β β
β β bookingβ β β SQL) β β
β β info β β β β β
β β β’ Get QR β β β β’ Users β β
β β β’ Points β β β β’ Courts β β
β ββββββββββββ β β β’ Bookings β
β β β β’ Wallet β β
β β ββββββββββββ β
β β β β
β β β β
β βΌ βΌ β
β ββββββββββββ ββββββββββββ β
β β LINE OA β β External β β
β β (BOT) β β Services β β
β β β β β β
β β β’ Notify β β β’ Prompt β β
β β β’ Reply β β Pay β β
β β β’ Menu β β β’ QR Gen β β
β ββββββββββββ ββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β RESPONSIBILITY MATRIX β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββ¬βββββββββββββββββ¬βββββββββββββββββ¬βββββββββββββββββ
β Function β Service Ownerβ Customers β Employees β
β β (Sportclub) β β β
ββββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββ€
β Court β β
β
β
β - β - β
β Maintenance β β β β
ββββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββ€
β App β β
β
β - β β
β
β
β Development β β β β
ββββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββ€
β User β β
β
β - β β
β
β
β
β Support β β β β
ββββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββ€
β Booking β β
β
β - β β
β
β
β
β Management β β β β
ββββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββ€
β Payment β β
β
β
β β
β
β β
β
β Processing β β β β
ββββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββ€
β Marketing & β β
β
β
β - β β
β
β Promotions β β β β
ββββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββ€
β Customer β β
β
β β
β
β β
β
β
β
β Feedback β β β β
ββββββββββββββββββ΄βββββββββββββββββ΄βββββββββββββββββ΄βββββββββββββββββ
Legend: β
β
β
= Primary Responsibility | β
β
= Secondary | β
= Support
LINE Official Account Setup
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β LINE OFFICIAL ACCOUNT INTEGRATION β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββββββββββ
β LINE DEVELOPER CONSOLE β
β β
β ββββββββββββββββββββββββββββββββββββ β
β β Channel Settings β β
β β βββββββββββββββββββββββββββββ β β
β β Channel ID: 2007xxxxxxxx β β
β β Channel Secret: xxxxxxxxxx β β
β β LIFF ID: 2007xxxxxxxx-xxxxxxxx β β
β ββββββββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββββββββββββββββββββββββ β
β β LIFF Apps β β
β β βββββββββββββββββββββββββββββ β β
β β β’ Booking App (External) β β
β β - Endpoint: /liff/book β β
β β - Size: Full β β
β β - Options: scanQR, chain β β
β β β β
β β β’ Top-up App (External) β β
β β - Endpoint: /liff/topup β β
β β - Size: Full β β
β β β β
β β β’ Wallet App (External) β β
β β - Endpoint: /liff/wallet β β
β β - Size: Full β β
β ββββββββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββββββββββββββββββββββββ β
β β Messaging API β β
β β βββββββββββββββββββββββββββββ β β
β β β’ Push Message: Enabled β β
β β β’ Reply Message: Enabled β β
β β β’ Webhook: Enabled β β
β β β’ Bot PUsh: Enabled β β
β ββββββββββββββββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββ
Feature
Description
Use Case
Rich Menu
Quick access to actions
Navigation to booking, wallet
Push Notifications
Send messages to users
Booking reminders, promotions
Webhook
Receive user messages
Chat commands, quick actions
LINE Login
Authentication
Seamless app access
LIFF
Mini app framework
Full booking experience
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β LINE MESSAGING FLOW β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
USER LINE PLATFORM SERVER
β β β
β βββββββββββββββ β β
β β User sends β β β
β β message to ββββββββββββββΆβ β
β β OA β Webhook β β
β βββββββββββββββ β β
β β β
β β POST /webhook/line β
β βββββββββββββββββββββββββββββββΆβ
β β β
β β β Process
β β β Message
β β βββββββββββ
β β β
β β Reply Message β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Bot reply β β β
β β (Rich menu/ β β β
β β text/flex) β β β
β βββββββββββββββ β β
β β β
β β β
β βββββββββββββββ β β
β β User clicks β β β
β β Rich Menu ββββββββββββββΆβ β
β βββββββββββββββ β β
β β β
β β LIFF App URL Redirect β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Open LIFF β β β
β β App β β β
β βββββββββββββββ β β
β β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β RICH MENU CONFIGURATION β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββ
β π
ΰΈΰΈΰΈΰΈͺΰΈΰΈ²ΰΈ‘ β π° ΰΉΰΈΰΈ΄ΰΈ‘ΰΉΰΈΰΈ΄ΰΈ β
β (Book) β (Top Up) β
βββββββββββββββββββββββββββββββ€
β π ΰΈΰΈ²ΰΈ£ΰΈΰΈΰΈΰΈΰΈΰΈΰΈΰΈ±ΰΈ β π ΰΈΰΈ°ΰΉΰΈΰΈΰΈͺΰΈ°ΰΈͺΰΈ‘ β
β (My Bookings) β (Points) β
βββββββββββββββββββββββββββββββ€
β π ΰΈ«ΰΈΰΉΰΈ²ΰΈ«ΰΈ₯ΰΈ±ΰΈ β
β (Home) β
βββββββββββββββββββββββββββββββ
Tappable Areas:
β’ "ΰΈΰΈΰΈΰΈͺΰΈΰΈ²ΰΈ‘" β Opens /liff/book
β’ "ΰΉΰΈΰΈ΄ΰΈ‘ΰΉΰΈΰΈ΄ΰΈ" β Opens /liff/topup
β’ "ΰΈΰΈ²ΰΈ£ΰΈΰΈΰΈΰΈΰΈΰΈΰΈΰΈ±ΰΈ" β Opens /liff/book?tab=mybookings
β’ "ΰΈΰΈ°ΰΉΰΈΰΈΰΈͺΰΈ°ΰΈͺΰΈ‘" β Opens /liff/points
β’ "ΰΈ«ΰΈΰΉΰΈ²ΰΈ«ΰΈ₯ΰΈ±ΰΈ" β Opens /liff/book
PromptPay QR Code Generation
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PROMPTPAY QR SYSTEM β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β QR CODE PAYMENT WORKFLOW β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β CUSTOMER β β APP β β PROMPTPAY β
β β β β β SYSTEM β
ββββββββ¬βββββββ ββββββββ¬βββββββ ββββββββ¬βββββββ
β β β
β 1. Select Amount β β
ββββββββββββββββββββββββΆβ β
β β β
β β 2. Generate QR β
β β Payload β
β βββββββββββββββββββββββΆβ
β β β
β β 3. QR Image URL β
β 4. Show QR Code ββββββββββββββββββββββββ
βββββββββββββββββββββββββ β
β β β
β 5. Scan with β β
β Banking App β β
ββββββββββββββββββββββββββΌββββββββββββββββββββββΆβ
β β β
β β 6. Payment Complete β
β 7. Payment Confirmed ββββββββββββββββββββββββ
βββββββββββββββββββββββββ β
β β β
β 8. Upload Slip β β
ββββββββββββββββββββββββΆβ β
β β β
β β 9. Verify Payment β
β βββββββββββββββββββββββΆβ
β β β
β 10. Success β β
βββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β QR CODE FORMAT (EMVCO PROMPTPAY) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β QR Code Payload Format (EMVCo Standard): β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 00020101021229330016A00000067701011211660826539264 β β
β β 52040000530376454050.005802TH5913Sportclub CNX β β
β β 6010Chiang Mai6304ABCD β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Payload Breakdown: β
β βββββββββββββββββ β
β β’ 00: Payload Format Indicator (EMV QRC) β
β β’ 01: Point of Initiation Method (Static) β
β β’ 29: Merchant Account Information - PromptPay β
β β’ 52: Merchant Category Code (7999 - Sports) β
β β’ 53: Transaction Currency (THB - 764) β
β β’ 54: Transaction Amount β
β β’ 58: Country Code (TH) β
β β’ 59: Merchant Name β
β β’ 60: Merchant City β
β β’ 63: CRC (Cyclic Redundancy Check) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β QR CODE FOR POINT GRANT (SCAN QR) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β π SCAN TO EARN POINTS π β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β βββββββββββββββββββββββββββββββββββ β β
β β β β β β
β β β [QR CODE] β β β
β β β Displayed Here β β β
β β β β β β
β β β Scan with LINE Camera β β β
β β β β β β
β β βββββββββββββββββββββββββββββββββββ β β
β β β β
β β π± LINE Scan QR β β
β β Scan to earn 10 points! β β
β β Limited time offer β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Point Grant QR Flow: β
β βββββββββββββββββ β
β 1. Customer scans QR code at front desk/court β
β 2. LINE Camera opens LIFF app β
β 3. System validates QR (court ID, timestamp) β
β 4. Points automatically credited to user wallet β
β 5. User receives LINE notification with confirmation β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β QR CODE TYPES AND PURPOSES β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββ¬βββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββ
β QR Type β Purpose β Usage β
ββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββ€
β Payment QR β Receive payments β Customer scans to pay β
β (PromptPay) β for top-up β for wallet credits β
ββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββ€
β Check-in QR β Court check-in β Scan at court to verify β
β β β booking, start timer β
ββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββ€
β Point Grant QR β Award loyalty points β Staff scans to give points β
β β β to customers at counter β
ββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββ€
β Promotion QR β Special offers β Campaign-specific QR codes β
β β β for limited-time offers β
ββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββ€
β Feedback QR β Collect feedback β After game, scan to rate β
β β β service, earn bonus points β
ββββββββββββββββββ΄βββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β QR CODE GENERATION FLOW β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Start
β
βΌ
βββββββββββββββ
β Generate ββββββ Input: amount, paymentRef, phone
β QR Payload β
ββββββββ¬βββββββ
β
βΌ
βββββββββββββββ
β Create EMVCoβ
β Format β
ββββββββ¬βββββββ
β
βΌ
βββββββββββββββ
β Generate βββββββΆ QR Image (PNG/SVG)
β Image URL β via QR Server API
ββββββββ¬βββββββ
β
βΌ
βββββββββββββββ
β Display in β
β App / Print β
βββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β REVENUE MODEL β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β REVENUE STREAMS β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββ¬βββββββββββββββββ¬βββββββββββββββββ¬βββββββββββββββββββββββββ
β Revenue β Source β Amount β Frequency β
β Stream β β β β
ββββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββββββββββ€
β Court β Customer β Price per β Per booking β
β Booking β bookings β hour (e.g., β β
β Revenue β β ΰΈΏ300-500) β β
ββββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββββββββββ€
β Wallet β Customer β 2-5% of β Per top-up β
β Load Fees β top-ups β top-up amount β β
ββββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββββββββββ€
β Premium β Members β ΰΈΏ99-199/month β Monthly β
β Membership β β β β
ββββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββββββββββ€
β Advertising β Local sports β Variable β Monthly/Event β
β β brands β β β
ββββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββββββββββ€
β Event β Tournament β Entry fees β Per event β
β Hosting β organizers β (e.g., ΰΈΏ300) β β
ββββββββββββββββββ΄βββββββββββββββββ΄βββββββββββββββββ΄βββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PRICING STRUCTURE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β COURT PRICING (Example) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Court Type β Weekday (9:00-17:00) β Weekday (17:00-22:00) β β
β β / Weekend β / Holiday β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Tennis Court β ΰΈΏ300/hour β ΰΈΏ450/hour β β
β (Standard) β β β β
β β
β Tennis Court β ΰΈΏ400/hour β ΰΈΏ550/hour β β
β (Premium) β β β β
β β
β Badminton Court β ΰΈΏ200/hour β ΰΈΏ300/hour β β
β (Standard) β β β β
β β
β Badminton Court β ΰΈΏ250/hour β ΰΈΏ400/hour β β
β (Premium) β β β β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β ADDITIONAL FEES β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Equipment Rental β Shuttlecock: ΰΈΏ50/ea β Racket: ΰΈΏ100/day β β
β Coaching β Group: ΰΈΏ400/hr β Private: ΰΈΏ800/hr β β
β Late Fee β ΰΈΏ100 per 15 min lateβ β β
β Cancellation β <24hr notice: 50% β <2hr notice: 100% β β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β LOYALTY PROGRAM STRUCTURE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β POINT EARNING β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Activity β Points Earned β Notes β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Court Booking β 1 point/hour β Base earning β
β Weekend Booking β 1.5 points/hour β Bonus β
β Holiday Booking β 2 points/hour β Bonus β
β First Booking of Day β +10 points β Daily bonus β
β Check-in via QR β +5 points β At venue β
β Leave Review (5β
) β +20 points β Per review β
β Refer New User β +100 points β On their first β
β β β booking β
β Complete Profile β +50 points β One-time β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β POINT REDEMPTION β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Redemption β Points Required β Value β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ΰΈΏ50 Discount β 500 points β ΰΈΏ50 β
β ΰΈΏ100 Discount β 900 points β ΰΈΏ100 β
β Free 1-Hour Court β 2,500 points β ΰΈΏ300-500 β
β Free Equipment Rental β 500 points β ΰΈΏ50-100 β
β Priority Booking (Skip Queue) β 1,000 points β Convenience β
β VIP Membership (1 Month) β 5,000 points β ΰΈΏ99-199 value β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β MEMBERSHIP TIERS β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Tier β Points/Month β Benefits β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Bronze β 0-499 β β’ Standard pricing β
β (Default) β β β’ Basic point earning β
β β
β Silver β 500-1,499 β β’ 10% discount on bookings β
β β β β’ 1.2x point earning β
β β β β’ Priority support β
β β
β Gold β 1,500-2,999 β β’ 15% discount on bookings β
β β β β’ 1.5x point earning β
β β β β’ Free equipment rental (2x/month) β
β β β β’ Advance booking (24hr) β
β β
β Platinum β 3,000+ β β’ 20% discount on bookings β
β β β β’ 2x point earning β
β β β β’ Free equipment rental (unlimited) β
β β β β’ Advance booking (48hr) β
β β β β’ Dedicated phone support β
β β β β’ Free guest pass (1x/month) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β IMPLEMENTATION TIMELINE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PHASE 1: FOUNDATION β
β (Weeks 1-4) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Week 1 β [ββββββ] Setup development environment β
β β [ββββββ] Configure LINE Developer Console β
β β [ββββββ] Initialize Next.js project with TypeScript β
β β
β Week 2 β [ββββββ] Set up database schema (Prisma/PostgreSQL) β
β β [ββββββ] Create basic authentication (LINE Login) β
β β [ββββββ] Build core UI components β
β β
β Week 3 β [ββββββ] Implement court browsing and selection β
β β [ββββββ] Build booking flow (date/time selection) β
β β [ββββββ] Create booking confirmation β
β β
β Week 4 β [ββββββ] Integrate PromptPay QR payment β
β β [ββββββ] Build wallet top-up functionality β
β β [ββββββ] Testing and bug fixes β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PHASE 2: ENHANCEMENT β
β (Weeks 5-8) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Week 5 β [ββββββ] Implement LINE Bot notifications β
β β [ββββββ] Add booking reminders (1hr before) β
β β [ββββββ] Build user profile and history β
β β
β Week 6 β [ββββββ] Create loyalty points system β
β β [ββββββ] Implement point earning and redemption β
β β [ββββββ] Add check-in QR code feature β
β β
β Week 7 β [ββββββ] Build admin dashboard β
β β [ββββββ] Create booking management for staff β
β β [ββββββ] Implement payment verification β
β β
β Week 8 β [ββββββ] Performance optimization β
β β [ββββββ] Security audit and fixes β
β β [ββββββ] User acceptance testing β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PHASE 3: LAUNCH β
β (Weeks 9-12) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Week 9 β [ββββββ] Soft launch with beta users β
β β [ββββββ] Collect feedback and iterate β
β β [ββββββ] Bug fixes and improvements β
β β
β Week 10 β [ββββββ] Marketing campaign launch β
β β [ββββββ] LINE OA promotional messages β
β β [ββββββ] Social media promotion β
β β
β Week 11 β [ββββββ] Full public launch β
β β [ββββββ] Monitor system performance β
β β [ββββββ] Customer support setup β
β β
β Week 12 β [ββββββ] Analyze metrics and KPIs β
β β [ββββββ] Plan Phase 2 features β
β β [ββββββ] Documentation and training β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β MILESTONE TRACKER β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Milestone β Target Date β Status β Completion
ββββββββββββββββββββββββΌββββββββββββββββΌβββββββββββββΌβββββββββββββ
Development Setup β Week 1 β β‘ Pending β 0%
LINE Integration β Week 2 β β‘ Pending β 0%
Core Booking Flow β Week 4 β β‘ Pending β 0%
Payment Integration β Week 5 β β‘ Pending β 0%
Beta Launch β Week 9 β β‘ Pending β 0%
Public Launch β Week 11 β β‘ Pending β 0%
Post-Launch Review β Week 12 β β‘ Pending β 0%
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SUCCESS METRICS (KPIs) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β KEY PERFORMANCE INDICATORS β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββ¬ββββββββββββββββββ¬ββββββββββββββββββββββββββββ
β Metric β Target (3 mo) β Target (6 mo) β
ββββββββββββββββββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββββββββββ€
β USERS β β β
ββββββββββββββββββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββββββββββ€
β Active Users (MAU) β 500 β 2,000 β
β New User Registrations β 200/month β 500/month β
β User Retention (Day 30) β 40% β 50% β
β LINE OA Followers β 1,000 β 3,000 β
ββββββββββββββββββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββββββββββ€
β ENGAGEMENT β β β
ββββββββββββββββββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββββββββββ€
β Daily Active Users (DAU) β 100 β 400 β
β DAU/MAU Ratio β 20% β 25% β
β Avg. Session Duration β 3 min β 5 min β
β Bookings per User β 2/month β 4/month β
ββββββββββββββββββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββββββββββ€
β BOOKINGS β β β
ββββββββββββββββββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββββββββββ€
β Total Bookings β 1,000 β 5,000 β
β Booking Conversion Rate β 35% β 45% β
β No-Show Rate β <10% β <5% β
β Repeat Booking Rate β 50% β 65% β
ββββββββββββββββββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββββββββββ€
β REVENUE β β β
ββββββββββββββββββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββββββββββ€
β Gross Transaction Value β ΰΈΏ300,000 β ΰΈΏ1,500,000 β
β Wallet Top-up Volume β ΰΈΏ200,000 β ΰΈΏ1,000,000 β
β Avg. Revenue per Booking β ΰΈΏ350 β ΰΈΏ400 β
β Customer Lifetime Value β ΰΈΏ1,500 β ΰΈΏ2,500 β
ββββββββββββββββββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββββββββββ€
β LOYALTY β β β
ββββββββββββββββββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββββββββββ€
β Points Redeemed β 50,000 pts β 200,000 pts β
β Members in Loyalty Program β 300 β 1,200 β
β Tier Upgrade Rate β 15% β 25% β
ββββββββββββββββββββββββββββββββ΄ββββββββββββββββββ΄ββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SUCCESS METRICS DASHBOARD β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β π SUCCESS METRICS DASHBOARD β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β
β β β β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββ β β
β β β ACTIVE β β BOOKINGS β β REVENUE β β NPS β β β
β β β USERS β β THIS MO β β THIS MO β β SCORE β β β
β β β β β β β β β β β β
β β β 0 β β 0 β β ΰΈΏ0 β β 0 β β β
β β β / 500 β β / 1000 β β / ΰΈΏ300K β β / 50 β β β
β β β β β β β β β β β β
β β β βββββββ β β βββββββ β β βββββββ β β ββββββ β β β
β β β 0% β β 0% β β 0% β β 0% β β β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββ β β
β β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Bookings Trend (Last 7 Days) β β β
β β β β β β
β β β 50 β€ β β β
β β β 40 β€ ββ β β β
β β β 30 β€ ββ ββ β β β
β β β 20 β€ ββ ββ ββ ββ β β β
β β β 10 β€ ββ ββ ββ ββ ββ ββ ββ β β β
β β β 0 βΌββββββββββββββββββββββββββββββββ Mon β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Top Courts β β β
β β β β β β
β β β Tennis Court 1 ββββββββββββββββββββ 120 bookings β β β
β β β Tennis Court 2 ββββββββββββββββββ 100 bookings β β β
β β β Badminton A ββββββββββββββββ 80 bookings β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Category
Technology
Version
Frontend
Next.js
16.1.1
Frontend
React
19.2.3
Styling
Tailwind CSS
Latest
Database
PostgreSQL
Latest
ORM
Prisma
Latest
LINE SDK
@line/liff
2.21.0
Payment
PromptPay
EMVCo
Icons
Lucide React
Latest
Calendar
date-fns
Latest
Endpoint
Method
Description
/api/auth/user
POST
LINE user authentication
/api/branches
GET
List all branches
/api/courts/:id
GET
Court details & availability
/api/bookings
POST
Create new booking
/api/bookings
GET
List user's bookings
/api/bookings/:id
GET
Booking details
/api/bookings/:id
DELETE
Cancel booking
/api/wallet/topup
POST
Generate payment QR
/api/wallet/slip
POST
Upload payment slip
/api/wallet/balance
GET
Get user balance
/api/wallet/transactions
GET
Transaction history
/api/points
GET
Get points balance
/api/points/history
GET
Points transactions
/webhook/line
POST
LINE Bot webhook
C. Database Schema (Key Tables)
Users
βββ id (PK)
βββ lineUserId (unique)
βββ name
βββ email
βββ phone
βββ credits (Decimal)
βββ totalPoints (Int)
βββ currentTier (Enum: Bronze/Silver/Gold/Platinum)
βββ createdAt
Branches
βββ id (PK)
βββ name
βββ address
βββ phone
βββ isActive
Courts
βββ id (PK)
βββ branchId (FK)
βββ name
βββ type (Enum: tennis/badminton)
βββ pricePerHour (Decimal)
βββ isActive
Bookings
βββ id (PK)
βββ userId (FK)
βββ courtId (FK)
βββ date
βββ startTime
βββ endTime
βββ totalPrice (Decimal)
βββ status (Enum: pending/confirmed/cancelled/completed)
βββ paymentStatus (Enum: pending/paid/failed)
βββ createdAt
Transactions
βββ id (PK)
βββ userId (FK)
βββ type (Enum: topup/booking/refund/bonus)
βββ amount (Decimal)
βββ status (Enum: pending/completed/failed)
βββ createdAt
PaymentSlips
βββ id (PK)
βββ userId (FK)
βββ amount (Decimal)
βββ paymentRef (unique)
βββ status (Enum: pending/verified/rejected)
βββ createdAt
Item
Details
Document Title
LINE MINI App Planning Overview
Version
1.0
Author
Sportclub CNX Development Team
Created
January 2026
Last Updated
January 2026
Status
Draft / Planning
Β© 2026 Sportclub CNX. All rights reserved.
This document is confidential and intended for internal use only.