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.