RunCheck
Never show up to an empty gym again. RunCheck lets you see who's playing, where the run is, and when it tips off, before you leave the house.
翻译准备中
尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗PWA (Progressive Web App) para registrar entrenos: rutinas de gimnasio serie a serie con gráficas de progresión, y también bici, Hyrox u otros deportes en un calendario mensual. Los datos se sincronizan en la nube con Firebase y la app funciona también sin conexión.
👉 App: gym-marta.netlify.app
kg, bloques o goma)..json.| Parte | Tecnología |
|---|---|
| Frontend | HTML, CSS y JavaScript sin framework ni build |
| Autenticación | Firebase Authentication (email/contraseña) |
| Base de datos | Cloud Firestore |
| Gráficas | Chart.js 4.4.7 (CDN) |
| Offline / PWA | Service Worker (sw.js) + manifest.json |
├── index.html # Estructura: login, pantalla de pendiente y app
├── app.js # Lógica: auth, Firestore, render, modales y gráficas
├── styles.css # Estilos (tema claro/oscuro automático, mobile-first)
├── sw.js # Service Worker (caché de assets, excluye llamadas a Firebase)
├── manifest.json # Manifest de la PWA
├── icon.svg # Logo (macedonia de rodajas: naranja, lima y lila) e icono de la pestaña
├── icon-*.png # Iconos de la app para iPhone (180) y Android (192, 512)
├── img/ # Capturas de pantalla para el README
├── firestore.rules # Reglas de seguridad de Firestore
└── LICENSE # Licencia MIT
profiles/{uid}
email: string
approved: boolean
createdAt: "YYYY-MM-DD"
users/{uid}
activeRoutine: number
routines: [
{
name: string,
exercises: [
{ name, sets, reps, weight, unit, done, logs: [ { date, weights[], reps[] } ] }
]
}
]
trash: [ { routineIndex, exercise, deletedAt } ]
activities: [ { date, type: 'gym' | 'bike' | 'hyrox' | 'other', minutes, notes } ]
users/{uid}/backups/{id}
savedAt: ISO date
data: { ...copia completa de users/{uid} }
firebaseConfig, al principio de app.js.ADMIN_UID, al principio de app.js.La comprobación de "cuenta aprobada" y de "admin" se hace en el navegador, así que la seguridad real depende de las reglas de Firestore. Las reglas están en firestore.rules; cópialas en Firestore → Reglas de la consola (cambiando el UID de la admin por el tuyo) y publícalas. Garantizan que:
No hace falta instalar nada: basta con servir la carpeta con cualquier servidor estático (el Service Worker no funciona abriendo el HTML con file://).
# Con Python
python -m http.server 8000
# o con Node
npx serve .
Y abre http://localhost:8000.
Al ser un sitio estático, se puede publicar tal cual en Netlify, GitHub Pages, Firebase Hosting, Vercel, etc. Recuerda añadir el dominio en Firebase → Authentication → Settings → Authorized domains.
Cuando cambies archivos estáticos, sube la versión de
CACHE_NAMEen sw.js para que los usuarios reciban la versión nueva.
La apiKey que aparece en app.js no es un secreto: Firebase la diseña para ir en el código del cliente y solo identifica el proyecto. La protección de los datos la dan las reglas de Firestore (ver arriba). Aun así, es buena práctica:
MIT © Marta Torres Gómez