Sports Stats
Data-driven sports infographics by Angel Villanueva: tennis, football, the Olympic Games, swimming, basketball, American football, ice hockey, baseball, handball, rugby, volleyball, field hockey, ches
Translation pending
Lleva tus rutinas, pesos y repeticiones desde el celular.
Translation pending
Sports & fitnessTypeScript · JavaScriptGitHub @ElBeDevOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
App web mobile-first (PWA) para llevar rutinas de gym: armar rutinas con ejercicios del catálogo (1,500 con gif, nombres en español) o propios, entrenar registrando kg/reps por serie con sugerencia de peso y cronómetro de descanso (funciona sin señal), y ver el progreso por ejercicio, por sesión y por semana. Multiusuario con cuentas propias. En línea: https://workout-eight-neon.vercel.app (deploy automático en cada push a main). Ver PLAN.md para el plan completo, estado actual, mapa del código, notas de infra y registro de cambios.Read the full README ↗
App web mobile-first (PWA) para llevar rutinas de gym: armar rutinas con ejercicios del catálogo (1,500 con gif, nombres en español) o propios, entrenar registrando carga y reps por serie —en kilos, libras o placas, elegible desde el propio entrenamiento— con sugerencia de peso y cronómetro de descanso (funciona sin señal), y ver el progreso por ejercicio, por sesión y por semana. Multiusuario con cuentas propias.
En línea: https://workout-eight-neon.vercel.app (deploy automático en cada
push a main).
Toda la documentación está en docs/: el plan completo, estado actual, mapa del código, notas de infra y registro de cambios en docs/PLAN.md, y el rediseño visual al estilo Apple Fitness en docs/diseno-apple-fitness.md.
lucide-reactlocalStoragetests/smoke.mjs)npm install
cp .env.example .env.local # llenar DATABASE_URL (la de Neon, pooled)
npm run dev
Scripts útiles:
npm run lint
npm run build
npm run db:push # aplica src/db/schema.ts a la base (pide TTY si hay datos)
npm run db:generate # genera una migración en drizzle/ a partir del diff contra la última
npm run db:migrate # aplica las migraciones pendientes de drizzle/ contra DATABASE_URL
npm run db:studio # UI de Drizzle para ver la base
node --env-file=.env.local ./node_modules/.bin/tsx scripts/seed-exercises.ts # recargar catálogo
node --env-file=.env.local ./node_modules/.bin/tsx scripts/preview-translations.ts # muestra de nombres en español
node --env-file=.env.local ./node_modules/.bin/tsx scripts/translate-exercises.ts # regenerar name_es
La suite necesita Chromium una vez: npx playwright install chromium.
npm run smoke # suite de humo contra localhost:3000 (crea y borra su propia cuenta)
BASE_URL=https://workout-eight-neon.vercel.app npm run smoke
node --env-file=.env.local ./node_modules/.bin/tsx scripts/mirror-gifs.ts # copia gifs a Blob — hoy no sirve de nada: el store es privado y no entrega URLs públicas (pendiente #1 de docs/PLAN.md)
Offline: public/sw.js cachea el shell y las páginas visitadas; las series
marcadas sin señal se encolan en localStorage y se sincronizan al
reconectar. Si cambias la estrategia del SW, sube VERSION dentro del archivo.
src/db/schema.ts es la fuente de verdad, y desde el 2026-09-22 los cambios
quedan en drizzle/ (migraciones versionadas, migración 0000 = la base ya
adoptada — ver la nota de infra en docs/PLAN.md). Cuando db:push pide
confirmación interactiva (tablas con datos) y no hay terminal, aplicar el
cambio con SQL directo, correr npm run db:generate para que quede su
migración en el repo, y luego db:push de nuevo para confirmar que no queda
diferencia. Ver las notas de infra en docs/PLAN.md para los casos que ya
pasaron.
Crear un usuario QA directo en la base, recorrer la app (a mano o con
Playwright) y al final delete from users where username = '...' — el
cascade se lleva rutinas, sesiones y sets de esa cuenta.