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/.