Futbol Veritabanı
8대 리그 클럽·선수·통계—Transfermarkt 데이터
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Bora treinar? Registro e acompanhamento de treinos de academia para Personal/Instrutor e Aluno. Aplicação web mobile-first (PWA) em português do Brasil, com fuso de referência America/Sao_Paulo. O padrão decorativo de fundo é inspirado no calçadão de Copacabana (ondas em pedra portuguesa), aplicado de forma sutil.README 전문 보기 ↗
Bora treinar? Registro e acompanhamento de treinos de academia para Personal/Instrutor e Aluno.
Aplicação web mobile-first (PWA) em português do Brasil, com fuso de referência America/Sao_Paulo.
| Elemento | Escolha | Por quê |
|---|---|---|
Verde Bandeira #009C3B | cor primária (ações, sucesso, "série feita") | verde da bandeira, energia e vitalidade |
Amarelo Ipê #FFC72C | destaque (recordes, timer, CTA) | o ipê-amarelo e o ouro da bandeira |
Azul Anil #002776 | texto forte, cabeçalhos | azul do círculo da bandeira |
Coral Pitanga #FF5A36 | alertas, "não feita", pesagem vencida | fruta bem brasileira, chama atenção sem ser agressiva |
Areia #FFF8E7 | fundo claro | lembra praia/calçadão |
| Tipografia | Baloo 2 (títulos) + Inter (texto) | Baloo tem cara de "papo de academia", arredondada e amigável |
| Logo | halter estilizado dentro de um losango verde-amarelo | releitura do losango da bandeira |
| Tom de voz | "Bora!", "Mandou bem!", "Partiu treino", "Tá pago ✅" | gírias de academia brasileira |
O padrão decorativo de fundo é inspirado no calçadão de Copacabana (ondas em pedra portuguesa), aplicado de forma sutil.
Pré-requisitos: Node.js 20+ e uma conta no Supabase (ou o Supabase CLI com Docker).
git clone https://github.com/thaylles/boratreinar.git
cd boratreinar
npm install
cp .env.example .env.local # preencha as variáveis
npm run dev # http://localhost:3000
As migrações SQL ficam em supabase/migrations/. O catálogo padrão é uma migração de dados gerada por python3 scripts/catalogo.py (as ilustrações, por python3 scripts/gerar-ilustracoes.py). O logo e os ícones saem de python3 scripts/gerar-icones.py (os PNGs são renderizados a partir dos SVGs gerados).
# Com Supabase CLI ligado a um projeto remoto
npx supabase link --project-ref SEU_PROJECT_REF
npx supabase db push
# Ou localmente (Docker)
npx supabase start
npx supabase db reset # aplica migrações + seed
Veja .env.example. Resumo:
| Variável | Onde | Descrição |
|---|---|---|
NEXT_PUBLIC_APP_URL | cliente/servidor | URL pública do app (links de convite, e-mails) |
NEXT_PUBLIC_SUPABASE_URL | cliente/servidor | URL do projeto Supabase |
NEXT_PUBLIC_SUPABASE_ANON_KEY | cliente/servidor | chave pública (anon) |
SUPABASE_SERVICE_ROLE_KEY | só servidor | usada pelo cron do relatório |
RESEND_API_KEY / EMAIL_FROM | só servidor | envio de e-mails (relatório e lembrete das 7h; sem elas, só a notificação no app) |
GEMINI_API_KEY / GEMINI_MODEL | só servidor | sugestões do relatório pelo Gemini (opcional; faixa gratuita no Google AI Studio) |
ANTHROPIC_API_KEY / ANTHROPIC_MODEL | só servidor | sugestões do relatório pelo Claude (opcional) |
CRON_SECRET | só servidor | protege a rota do cron |
Nenhum segredo vai para o repositório: .env* está no .gitignore (exceto .env.example).
npx supabase db push).https://SEU-DOMINIO/auth/confirm em Redirect URLs (para previews: https://*-SEU-USUARIO.vercel.app/auth/confirm).
{{ .SiteURL }}/auth/confirm?token_hash={{ .TokenHash }}&type=email&next=/personal e o de Reset password por
{{ .SiteURL }}/auth/confirm?token_hash={{ .TokenHash }}&type=recovery&next=/redefinir-senha.
Assim o link funciona mesmo se aberto em outro aparelho/navegador.vercel.json já agenda os crons (em UTC; Brasil sem horário de verão desde 2019):
0 1 * * 1 = domingo 22h em São Paulo;0 10 * * * = todo dia às 7h em São Paulo.
No plano Hobby da Vercel o cron pode disparar em qualquer minuto daquela hora; no Pro, no minuto exato.CRON_SECRET na Vercel — ela envia esse valor automaticamente no header Authorization das chamadas de cron.| Comando | O quê |
|---|---|
npm run dev | servidor de desenvolvimento |
npm run build | build de produção |
npm run lint | ESLint |
npm run typecheck | checagem de tipos |
npm run test:unit | testes de unidade das funções puras (telefone, WhatsApp, agenda, estatísticas do dashboard) |
npm run test:db | aplica as migrações num Postgres descartável (com stub do Supabase) e roda os testes SQL de RLS. Use PGHOST/PGPORT/PGUSER para apontar o servidor |
/cadastro e confirma o e-mail./convite/<token>. O cadastro é feito no servidor com a service role e a conta já nasce confirmada; um gatilho no banco valida o convite (pendente, não expirado, não revogado), exige o aceite do termo e o WhatsApp, e cria o vínculo com o Personal.SECURITY DEFINER no Postgres; as tabelas têm RLS e só permitem leitura do que cada perfil pode ver..gitignore, licença MIT, .env.examplevercel.json com cron do relatórioboratreinar, região São Paulo)main)npm run test:db)scripts/catalogo.py e scripts/gerar-ilustracoes.pyimage_credit já existe)apply_plans_to_students)fichas e sessoes_treino aplicadas no Supabase de produçãonpm run test:unit) para telefone, link do WhatsApp e cálculo da agendatraining_summary, training_overview, security invoker: o RLS decide o que cada um vê), com testes SQL e de unidadeweekly_reports com RLS (Personal só lê os seus; só o servidor grava) + testes SQL e de unidadepublic/sw.js): telas de treino abrem sem internet (rede primeiro, cópia local), estáticos e imagens em cache, página offline.html para o resto; cache de páginas apagado ao sair da contascripts/gerar-icones.py gera favicon, ícones do PWA e o logo)update public.profiles set role = 'admin' where email = '...')set_equipment_image) e testadas (14_admin.test.sql)