BikeControl (SwiftControl)
使用 Zwift Click、Zwift Play、Shimano Di2,或任何藍牙控制器搭配 MyWhoosh、Rouvy、Zwift 等。可於 iOS、Android、Windows 與 macOS 免費試用。
AI 翻譯
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Turf booking platform: public booking site, partner dashboard and admin console. Next.js + Supabase.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Turf booking platform: public booking site, partner (turf owner) dashboard and admin console. Next.js App Router with a Supabase Postgres backend.
Stack: Next.js 16 (App Router), React 19, Supabase Postgres, Clerk, Vercel. Tests: Vitest, SQL tests on Postgres, Playwright.
Needs Node 20.9+.
npm install
npm run dev # http://localhost:3000
That's all: with no .env.local the app stores data in .data/db.json (starting with the launch turfs) and uses a built-in dev login secret. To open /admin or /partner locally, set ADMIN_EMAIL/ADMIN_PASSWORD and PARTNER_EMAIL/PARTNER_PASSWORD in .env.local. npm run dev first runs a quick check and tells you if anything is missing.
npm run dev:lan, then open http://<your-computer-IP>:3000 on the same Wi-Fi..env.example to .env.local, fill in NEXT_PUBLIC_SUPABASE_URL and SUPABASE_SECRET_KEY, and run supabase/migrations/20261006000000_oyun_store.sql in the Supabase SQL editor. If the tables are missing, dev falls back to the local file and prints how to fix it.NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY and CLERK_SECRET_KEY together (the publishable key alone turns Clerk on, and server auth then fails without the secret). With no publishable key players use a device name-and-phone fallback..data/.npm install, delete .next/, restart.| Command | What it does |
|---|---|
npm run dev / npm run dev:lan | Dev server (LAN variant for testing on a phone) |
npm run typecheck / npm run lint | Type-check and lint (CI allows zero warnings) |
npm test | Unit tests (Vitest) |
npm run test:sql | Database function and race tests (needs Postgres) |
npm run test:e2e | Playwright end-to-end tests |
npm run build | Production build |
CI runs these on every pull request, plus npm audit. Dependabot opens dependency updates weekly (TypeScript and ESLint majors are skipped until the toolchain supports them).
Add every variable from .env.example in the Vercel project settings, apply the migration to the Supabase project once, then deploy.
See docs/GO-LIVE.md for the steps to take the site live, and docs/LAUNCH-SEO.md for Search Console, analytics, error alerts and the backlink plan.
src/modules/shared/database/store.ts is the only module that talks to storage. Pages call await getDb(); server actions call await mutate(db => ...), which reloads the latest data, runs the change and writes only the rows that changed in one transaction (apply_changes). If another write landed in between, it retries on fresh data. Postgres enforces one live booking per turf slot, so two people can never book the same hour.
All tables have row-level security on with no policies: only the server, using the secret key, can read or write them.