BikeControl (SwiftControl)
Use Zwift Click, Zwift Play, Shimano Di2, or any Bluetooth controller with MyWhoosh, Rouvy, Zwift, and more. Free to try on iOS, Android, Windows, and macOS.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗App de treino de triatlo do grupo (4 pessoas) para a All Limits – High Limits (distância olímpica, Lagoa dos Ingleses).
Tecnologia: Next.js no Vercel (rotas seguras em app/api), Supabase (login + banco Postgres), API da Anthropic (IA), API do Strava.
transicao · Região: South America (São Paulo) · anote a senha do banco.supabase/schema.sql e clique Run. Deve aparecer "Success".Project URL → NEXT_PUBLIC_SUPABASE_URLanon public → NEXT_PUBLIC_SUPABASE_ANON_KEYservice_role → SUPABASE_SERVICE_ROLE_KEY (secreta, nunca coloque no navegador)Onde ficam os dados: Table Editor → documents. Cada linha é um assunto de um atleta (data/users/<id>/profile, /activities, /plan, /checkins, /weights, /diet, /chat). Toda alteração guarda a versão anterior em documents_history, então nada se perde se alguém apagar por engano.
https:// (ex.: transicao.vercel.app; para testar local use localhost)STRAVA_CLIENT_ID e Client Secret → STRAVA_CLIENT_SECRET.ANTHROPIC_API_KEY.claude-sonnet-5-5, tarefas rápidas usam claude-haiku-5-5).Heenga/transicao..env.example:| Variável | Valor |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | do Passo 1 |
NEXT_PUBLIC_SUPABASE_ANON_KEY | do Passo 1 |
SUPABASE_SERVICE_ROLE_KEY | do Passo 1 |
GROUP_INVITE_CODE | código do grupo (desativado no momento; REQUIRE_GROUP_CODE em app/api/signup) |
ADMIN_USERNAMES | seu usuário (ex.: henrique) — pode editar a prova e exportar dados do grupo |
MAX_MEMBERS | 4 |
ANTHROPIC_API_KEY | do Passo 3 |
AI_MODEL / AI_MODEL_QUICK | claude-sonnet-5-5 / claude-haiku-5-5 |
STRAVA_CLIENT_ID / STRAVA_CLIENT_SECRET | do Passo 2 |
APP_URL | a URL final, ex.: https://transicao.vercel.app (sem barra no fim) |
STATE_SECRET | um texto aleatório longo (ex.: gere em https://1password.com/password-generator) |
APP_URL bate com a URL real; se mudou, ajuste e clique Redeploy. Atualize também o Callback Domain no Strava.henrique, senha (4+ caracteres, pode ser só números).npm install
cp .env.example .env.local # preencha os valores
npm run dev # http://localhost:3000
app/api/signup cria conta (confere o limite de membros)
app/api/me quem está logado, organizador?, Strava conectado?
app/api/ai proxy da IA (chave fica no servidor)
app/api/strava/connect inicia o login no Strava da pessoa
app/api/strava/callback recebe a autorização e guarda os tokens (só o servidor lê)
app/api/strava/activities treinos e zonas do Strava da pessoa
app/api/strava/disconnect desconecta
lib/ utilitários do servidor (Supabase admin, Strava)
public/index.html app (tela de login + painel)
public/shim.js login, banco, IA e downloads no navegador
public/app.js · app.css interface e lógica de treino
public/motor.js motor de treino (carga, fases, metas, prontidão, validação) — base: transicao-coach/
tests/ testes do motor (npm test)
supabase/schema.sql tabelas e regras de segurança
team/) é visível ao grupo; a prova (config/) só o organizador altera; organizadores leem tudo para backup.service_role ficam só no servidor (Vercel).