BikeControl (SwiftControl)
使用 Zwift Click、Zwift Play、Shimano Di2,或任何藍牙控制器搭配 MyWhoosh、Rouvy、Zwift 等。可於 iOS、Android、Windows 與 macOS 免費試用。
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
大学体育館のバドミントンコート予約システム。海外大学の学生体育会向けに無償提供することを想定した、紙ベース予約(コピー配布)を置き換えるアプリです。 • Next.js (App Router) + TypeScript + Tailwind CSS • Supabase (Auth + PostgreSQL + Row Level Security) • Stripe (決済・返金 / 未実装、後日連携予定) • PWA (manifest + Service Worker、QRコードからブラウザ直接アクセス) • 日本語 / English / 中文 の3言語切り替え(カスタム軽量i18n、ヘッダー常時表示) 1. 予約カレンダー画面 (/reserve): コート × 時間枠の空き状況をカレンダー表示。予約・キャンセル操作。 2. アカウント登録・ログイン (/signup, /login): 大学メールアドレスでのメール確認付きサインアップ、プロフィール入力(/profile)。 3. 最小限のバックエンド: Supabase のテーブル設計・RLSポリシー・二重予約防止(ユニーク制約)。檢視完整 README ↗
大学体育館のバドミントンコート予約システム。海外大学の学生体育会向けに無償提供することを想定した、紙ベース予約(コピー配布)を置き換えるアプリです。
/reserve): コート × 時間枠の空き状況をカレンダー表示。予約・キャンセル操作。/signup, /login): 大学メールアドレスでのメール確認付きサインアップ、プロフィール入力(/profile)。決済(Stripe)連携、体育会スタッフ/管理者向け管理画面、CSV出力、レンタル機能(将来拡張)は未実装です。DB設計はレンタル機能を見据えた形(equipment / equipment_loans テーブル)にしてあります。
supabase.com で新規プロジェクトを作成し、Project Settings > API から URL と anon key を取得します。
Supabase ダッシュボードの SQL Editor で以下を順に実行してください。
supabase/migrations/0001_init.sql -- テーブル・RLS・関数
supabase/seed.sql -- (任意) サンプルコートの投入
もしくは Supabase CLI を使う場合:
supabase link --project-ref <project-ref>
supabase db push
.env.example を .env.local にコピーして値を設定します。
cp .env.example .env.local
NEXT_PUBLIC_SUPABASE_URL / NEXT_PUBLIC_SUPABASE_ANON_KEY: Supabase の Project Settings > APINEXT_PUBLIC_ALLOWED_EMAIL_DOMAINS: サインアップを許可する大学メールドメイン(カンマ区切り)。未設定なら制限なしhttp://localhost:3000/auth/callback(本番URLも追加)を登録してください。npm install
npm run dev
http://localhost:3000 にアクセスします。
app/
(auth)/login, signup # 認証画面
(main)/reserve, profile # 予約カレンダー / プロフィール
auth/callback # Supabase メール確認コールバック
api/reservations # 予約作成・キャンセル API
components/ # UI コンポーネント
lib/supabase/ # Supabase クライアント(browser/server/middleware)
lib/i18n/ # 多言語辞書・Context
lib/reservation/ # 時間枠生成・キャンセル期限などのルール
supabase/migrations/ # DBスキーマ (SQL)
types/database.ts # テーブル型定義
profiles.role に student / staff / admin を保持します(RLSで制御)。現時点では一般学生の予約フローのみ実装済みで、スタッフ/管理者向け画面は未実装です。
reservations テーブルに (court_id, reservation_date, start_time) の部分ユニークインデックス(status in ('pending_payment','confirmed'))を設定し、同時アクセスでも二重予約が発生しないようにしています。status = 'pending_payment' とし、hold_expires_at を過ぎた仮予約は expire_stale_reservations() 関数(pg_cron 等での定期実行を想定)で自動失効させる設計です。MVPでは決済ステップがないため、予約は即座に confirmed になります。