BikeControl (SwiftControl)
使用 Zwift Click、Zwift Play、Shimano Di2 或任何藍牙控制器,搭配 MyWhoosh、Rouvy、Zwift 等。iOS、Android、Windows、macOS 均可免費試用。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Sci Games 2026 — ระบบเว็บไซต์กีฬาสานสัมพันธ์ภายใน คณะวิทยาศาสตร์และเทคโนโลยี มหาวิทยาลัยราชภัฏภูเก็ต (PKRU) เว็บไซต์สำหรับงานกีฬาสานสัมพันธ์ภายใน 9 - 11 ตุลาคม 2569 สร้างด้วย Next.js (App Router), Vanilla CSS (Glassmorphism), และ Supabase (PostgreSQL + Auth + Realtime)查看完整 README ↗
เว็บไซต์สำหรับงานกีฬาสานสัมพันธ์ภายใน 9 - 11 ตุลาคม 2569 สร้างด้วย Next.js (App Router), Vanilla CSS (Glassmorphism), และ Supabase (PostgreSQL + Auth + Realtime)
ระบบสาธารณะ (Public Spectators):
matches_public_v2 + RLS ใน migration 007/008/010) หน้าอัปเดตเองทุก 30 วินาทีผ่าน /api/live-summary ที่แคชไว้ที่ edge/handbook): ดาวน์โหลด/พรีวิวไฟล์ PDF ทางการ (public/docs/)/live) — เฉพาะผู้ล็อกอิน: บอร์ดคะแนนสดทุกสนามสำหรับกรรมการ/เจ้าหน้าที่/ผู้ดูแล (Supabase Realtime + ลูกศรแจ้งเมื่อได้แต้ม); ผู้ชมทั่วไปจะถูกส่งไปหน้าเข้าสู่ระบบteam_standings แสดงบนหน้าแรก)/staff/login (เข้าด้วย PIN 6 หลักรายกีฬา หรือบัญชี staff/admin)ระบบผู้ดูแลระบบ (Admin Dashboard):
ระบบเจ้าหน้าที่ลงคะแนนในสนาม (Staff Scoring):
/admin/settings)/admin/pins — เซสชัน 14 ชม.) หรือบัญชี staff/adminlive_scoring_enabled ใน /admin/settings แล้วกรรมการ/เจ้าหน้าที่จะลงคะแนนไม่ได้ทันที (ผู้ดูแลยังแก้ได้)npm install
คัดลอกไฟล์ตัวอย่าง .env.local.example เป็น .env.local:
cp .env.local.example .env.local
ระบุค่าจาก Supabase Project Settings:
NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
supabase/ ตามลำดับ: migrations/001_initial_schema.sql → seed.sql (4 ทีมสี, 5 ชนิดกีฬา, สาขา, ช่วงเวลาแข่ง) → migrations/002…010 ทุกไฟล์เป็น idempotent รันซ้ำได้ (007 = view matches_public, 008 = ตัดสิทธิ์ anon อ่านคะแนนสด — รัน 008 หลัง deploy โค้ดที่อ่าน view แล้วเท่านั้น, 010 = คอลัมน์ court + view matches_public_v2 ที่หน้าเว็บใช้)
{ for f in supabase/migrations/001_initial_schema.sql supabase/seed.sql supabase/migrations/00[2-9]_*.sql supabase/migrations/01[0-9]_*.sql; do printf '\n-- >>>>>>>>>> %s\n' "$f"; cat "$f"; done; } > supabase/apply-all.sql
npm run seed:matches (ลอง -- --dry ก่อน)node scripts/create-admin.mjs <email> <password>npm run dev
เปิดเบราว์เซอร์ไปที่: http://localhost:3000
npm run build
npm run start
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYSUPABASE_SERVICE_ROLE_KEYPIN_SESSION_SECRET (สุ่มยาว ๆ ใช้เซ็น cookie ของกรรมการที่ล็อกอินด้วย PIN)| คำสั่ง | ทดสอบอะไร |
|---|---|
npm test | Vitest — helper ล้วน (format, labels, scoring queue, filters, API mappers) |
npm run test:db | รัน migration + seed + scenario ทั้งหมดบน PostgreSQL ในเครื่อง (ต้องมี PGPASSWORD) |
npm run test:smoke | ยิง API จริงผ่าน dev server ที่ :3000 กับ Supabase จริง (สร้าง/ลบข้อมูลทดสอบเอง) |
npm run lint / npm run format:check | ESLint / Prettier ทั้ง repo |
© 2569 สโมสรนักศึกษาคณะวิทยาศาสตร์และเทคโนโลยี มหาวิทยาลัยราชภัฏภูเก็ต