RunCheck
빈 체육관에 가는 일 없게, RunCheck로 누가, 어디서, 언제 뛰는지 미리 확인한다
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. 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