BikeControl (SwiftControl)
使用 Zwift Click、Zwift Play、Shimano Di2,或任何藍牙控制器搭配 MyWhoosh、Rouvy、Zwift 等。可於 iOS、Android、Windows 與 macOS 免費試用。
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Plan your goals, track your progress.
• Framework: Next.js 16 (App Router)
• Language: TypeScript 5
• UI: React 19, Tailwind CSS 4, shadcn/ui
• Linting: ESLint 9, Prettier
• Package Manager: pnpm
Open http://localhost:3000.
Copy .env.example to .env.local and fill in:檢視完整 README ↗Plan your goals, track your progress.
tenplanner/
├── app/ # Next.js App Router (pages, layouts, routes)
│ ├── (legal)/ # Public legal pages (privacy, cookies, etc.)
│ └── api/
│ ├── account/delete # RGPD supresión (art. 17)
│ ├── export # RGPD portabilidad (art. 20)
│ └── cron/cleanup # Retención automática
├── components/ # Shared React components
│ └── ui/ # shadcn/ui primitives
├── lib/ # Utility functions and shared logic
├── db/ # Database schema, migrations, queries
├── docs/
│ └── legal/ # Documentación RGPD interna (RAT, DPA, brechas…)
├── public/ # Static assets
└── .github/
└── workflows/ # CI pipeline (lint + type-check on PRs)
pnpm install
pnpm dev
Open http://localhost:3000.
| Command | Description |
|---|---|
pnpm dev | Start dev server |
pnpm build | Production build |
pnpm lint | Run ESLint |
pnpm format | Format code with Prettier |
pnpm format:check | Check formatting |
pnpm typecheck | Run TypeScript type checking |
pnpm db:generate | Generate Drizzle migration |
pnpm db:migrate | Apply pending migrations |
Copy .env.example to .env.local and fill in:
| Variable | Required | Purpose |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL | ✅ | Supabase project URL. |
NEXT_PUBLIC_SUPABASE_ANON_KEY | ✅ | Supabase anon (client-safe) key. |
SUPABASE_SERVICE_ROLE_KEY | ✅ (producción) | Service-role key. Solo servidor. Necesaria para el endpoint de borrado de cuenta (/api/account/delete). |
DATABASE_URL | ✅ | Postgres connection string para Drizzle. |
NEXT_ANTHROPIC_API_KEY | ✅ | Clave API de Anthropic (Dr. Planner). |
CRON_SECRET | ✅ (producción) | Bearer token para autenticar /api/cron/cleanup. Vercel lo pasa automáticamente si está configurado. |
NEXT_DEV_ALLOWED_ORIGINS | opcional | Lista de orígenes permitidos en dev. |
Every PR runs lint, Prettier check, and type-check via GitHub Actions.
Esta aplicación trata datos personales de terceros (alumnos) por cuenta del entrenador. Antes de desplegar en producción debe completarse la capa legal.
<!-- TODO --> en:
app/(legal)/privacidad/page.tsxapp/(legal)/aviso-legal/page.tsxapp/(legal)/terminos/page.tsxdocs/legal/RAT.md, docs/legal/subprocessors.md, docs/legal/breach-procedure.md, docs/legal/DPA-template.md.[email protected]). Sin ZDR, el proveedor retiene peticiones hasta 30 días.SUPABASE_SERVICE_ROLE_KEY y CRON_SECRET en el panel de Vercel.0014_consent_tracking.sql en producción (pnpm db:migrate)./api/cron/cleanup está activo (Vercel → Settings → Cron Jobs).docs/legal/RAT.md tras cualquier cambio que añada nuevas finalidades o subencargados.components/app/cookie-banner.tsx.docs/legal/.