BikeControl (SwiftControl)
使用 Zwift Click、Zwift Play、Shimano Di2 或任何藍牙控制器,搭配 MyWhoosh、Rouvy、Zwift 等。iOS、Android、Windows、macOS 均可免費試用。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证RONDO is a football community app that helps people find nearby games and book
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Rondo is a mobile-first football/futsal coordination app built with Next.js App Router + Supabase. It supports player and organizer journeys: discovery, join/payment, match chat, organizer operations, help tickets, wallet ledger records, notifications, and live timer screens.
npm install.env.local (copy from .env.example and fill values).npm run devhttp://localhost:3000Required (current implementation):
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYSUPABASE_SERVICE_ROLE_KEYNEXT_PUBLIC_APP_URLPAYMONGO_SECRET_KEYPAYMONGO_WEBHOOK_SECRET_KEYIn the Vercel project Settings → Environment Variables, add every variable from .env.example for Production (and Preview if you use it). Then Redeploy the latest commit.
Set NEXT_PUBLIC_APP_URL to your production URL, e.g. https://rondo-app.vercel.app.
PayMongo webhook URL: https://rondo-app.vercel.app/api/payments/webhook
The code reads ~36 tables, one RPC, and four storage buckets. If the project is
missing any of them, screens come up empty, API routes answer
Could not find the table 'public.…' in the schema cache, and actions fail.
Two files, in this order, in Supabase → SQL Editor:
supabase/schema.sql — fresh projects only. Base tables, triggers, avatars bucket.supabase/RUN_ALL_IN_SUPABASE.sql — everything else, safe to re-run. Covers every
file under supabase/migrations/ plus organizations, reels, scout clips, and
tournament rooms. Re-run it after every deploy that adds a migration.Then confirm with either:
supabase/SUPABASE_AUDIT.sql in the SQL Editor — every row must read OK; orGET /api/health with header x-seed-secret: <SEED_SECRET> — returns
{"ok":true} or a missing list naming exactly what to create.supabase/migrations/*.sql remain as the per-change history for supabase db push
workflows; the runner file is generated from them by hand, and
__tests__/supabase/schema-manifest.test.ts fails CI if code references a table the
runner does not create.
Symptoms: every screen empty or erroring, /api/reels returning 500, guest sign-in
failing in the browser while POST /api/auth/guest returns 200.
supabase/schema.sql.supabase/RUN_ALL_IN_SUPABASE.sql, then supabase/SUPABASE_AUDIT.sql (all OK).SUPABASE_SERVICE_ROLE_KEY server-side.NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYSUPABASE_SERVICE_ROLE_KEYNEXT_PUBLIC_APP_URL=https://rondo-app.vercel.appSEED_SECRET (for /api/health and /api/seed)GET /api/health with x-seed-secret → {"ok":true}. Guest from / reaches
/feed; within a minute the feed shows placeholder open games.instrumentation.ts pins server rendering to
Asia/Manila (override with APP_TIMEZONE). Without it, Vercel renders in UTC
and an 8 PM game shows as 12:00 PM until the page hydrates.POST /api/seed/organizers runs both on demand.lib/venues/pitch-photos.ts, then shipped night-scene art in
public/scenes/. BGC Turf has its real photo (public/venues/bgc-turf.jpg);
to add another venue, drop its photo in public/venues/ and add an entry to
PITCH_PHOTOS.app/manifest.ts and public/icons/ make Rondo an
add-to-home-screen app that opens on /feed.lib/navigation/tab-routes.ts);
every other screen gets a back button and owns the bottom edge for its action bar.FREE_DROP_OUT_HOURS in
lib/match/drop-out.ts). Inside that window they're sent to Help with the match
attached. All of it lives in lib/wallet/refunds.ts and is safe to repeat.20261002000100_private_match_pay_after_approval.sql)./login via Face ID, Touch ID, Windows Hello, or a security keyprofiles.username; password login resolves @handle → email server-side/feed, /feed/map, /games/[id], /games/[id]/join, /games/[id]/payment, /games/[id]/chat, /my-games, /profile/[id], /help, /notifications, /tournaments, /tournaments/[id], /community (social feed + players)/organizer/dashboard, /organizer/create, /organizer/games/[id]/manage, /organizer/games/[id]/payments, /organizer/tournaments, /organizer/tournaments/create, /organizer/tournaments/[id]/manage/organizers/[id]/admin/tickets, /admin/tickets/[id]Grant the admin role via the Supabase SQL editor (clients cannot self-promote —
the protect_profile_role trigger blocks it):
update public.profiles set role = 'admin' where id = '<user-uuid>';
Admins get the ticket dashboard at /admin/tickets: filter/sort/search tickets,
change status, reply to users, and leave internal notes (hidden from users by RLS).
lib/paymongo/verify-signature.ts).payment_attempts with
anomaly flags (failure streaks, high-value attempts from new accounts) for
admin review.Use the Supabase Dashboard → Reports → Query Performance (pg_stat_statements)
to find slow queries. Hot list queries are covered by indexes (see
20260610000200_admin_tickets_payment_security.sql); list endpoints paginate
with range queries.
supabase/RUN_ALL_IN_SUPABASE.sql, then SUPABASE_AUDIT.sql or /api/health shows no MISSING.npm run build before release.