OpenTrailPaper
Open-source bike computer firmware for the LilyGO T5S3 4.7" E-Paper PRO, with offline maps, GPX routes, FIT recording and Bluetooth sensors.
Dashboard personal de running con datos de Strava
Translation pending
Sports & fitnessGitHub @doncesar117OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
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 web (PWA) para iPhone. Lee tus actividades de Strava y muestra: kilómetros de la semana, tendencia de ritmo, tiempos esperados, mejores marcas, desgaste de tenis y tus próximos entrenamientos.
Descomprime el zip y sube todo el contenido al repositorio (en github.com: Add file → Upload files). No subas node_modules ni .env.
STRAVA_CLIENT_ID (el ID de cliente de tu app de Strava)STRAVA_CLIENT_SECRET (el secreto de cliente)algo.vercel.app.Los tokens que Strava muestra en la página de configuración solo tienen permiso básico y no pueden leer actividades ni tenis. Hay que generar uno nuevo:
https:// (por ejemplo algo.vercel.app).https://algo.vercel.app/api/callback, toca Autorizar con Strava y acepta todos los permisos.STRAVA_REFRESH_TOKEN y vuelve a desplegar (Deployments → ⋯ → Redeploy).app/api/callback cuando termines.Abre la dirección en Safari → Compartir → Agregar a pantalla de inicio.
data/config.json: meta semanal de km (weeklyGoalKm) y vida útil de tenis en km (shoeLifeKm; para un modelo en particular usa shoeLifeOverrides, por ejemplo { "Boston": 700 }).data/plan.json: tu carrera objetivo (goal) y tus entrenamientos (sessions). Cada vez que Claude te dé un plan nuevo, se reemplaza este archivo y Vercel republica la app sola.Formato de una sesión:
{
"date": "2026-10-20",
"type": "Rodaje",
"title": "Rodaje suave",
"distance_km": 8,
"pace_target": "6:10",
"expected_time": "0:49:20",
"shoe": "ASICS Nimbus 27",
"notes": "Frecuencia cardiaca en zona 2"
}
Una sesión cuyo type (o title) diga fuerza, core, gym, pesas, movilidad, etc. se trata como fuerza: sin km, ritmo ni tenis, y sin la marca "Sin registro". Ejemplo:
{
"date": "2026-10-21",
"type": "Fuerza",
"title": "Fuerza de piernas y glúteos",
"duration_min": 25,
"url": "https://www.youtube.com/watch?v=XXXX",
"notes": "3 series de 12 repeticiones"
}
"videos": [{ "title": "Core 10 min", "url": "https://..." }, "https://..."]; la sesión se expande con un botón por video.url, link, video o youtube, o simplemente escrito dentro de notes (se convierte en botón). Solo se aceptan direcciones http o https.duration_min es opcional y se muestra como "25 min".En tablet y escritorio la app se acomoda en dos columnas (Inicio y Progreso) y se centra con un ancho máximo.
Tu personaje aparece arriba en Inicio, con un globo de texto, y cambia según tus datos (en este orden):
Al tocarlo salta, y mientras se actualizan los datos corre. Si tu iPhone tiene activado "Reducir movimiento", se queda quieto.
public/mascota/ (una tira de 8 cuadros por animación) y sus duraciones en lib/mascotAnims.ts.decide de components/Mascot.tsx.En la tarjeta del personaje hay un botón discreto ▶ Voy a correr. Al tocarlo:
El estado se guarda en el navegador de ese dispositivo (no se comparte entre tu iPhone y otras pantallas). No usa la API de Garmin: es un aviso manual.
La app puede mandarte una notificación:
Cómo funciona: la campana 🔔 de arriba activa los avisos en ese dispositivo; un servicio de tareas programadas llama a /api/notify a las 5:30 y a las 18:00. En iPhone hace falta iOS 16.4 o más nuevo y abrir la app desde la pantalla de inicio.
Configuración (una sola vez):
KV_REST_API_URL y KV_REST_API_TOKEN.VAPID_PUBLIC_KEY, VAPID_PRIVATE_KEY (par de llaves de los avisos) y CRON_SECRET (una contraseña larga inventada). Opcional: VAPID_SUBJECT (por ejemplo mailto:[email protected]). Vuelve a desplegar.https://TU-DOMINIO/api/notify?slot=amhttps://TU-DOMINIO/api/notify?slot=pm
En cada una agrega el encabezado Authorization: Bearer TU_CRON_SECRET (o, más simple, añade &key=TU_CRON_SECRET a la dirección).https://TU-DOMINIO/api/notify?test=1&key=TU_CRON_SECRET y debe llegar un aviso. Con &dry=1&slot=am (o pm) ves qué enviaría sin mandar nada.Mientras falte alguna de estas piezas, la campana y el botón no aparecen y todo lo demás funciona igual.
Muestra VFC, sueño, pulso en reposo y Body Battery de la API personal de Garmin (GARMIN_PERSONAL_API_KEY en Vercel). Arriba dice de qué día es el dato: "Datos de hoy" o "Último dato: lun 26 oct · aún no hay de hoy (sincroniza tu reloj)", más la hora de la consulta. Garmin solo tiene la VFC y el sueño de hoy después de que el reloj sincroniza con Garmin Connect. El botón de actualizar también refresca esta tarjeta (la app conserva la respuesta solo 1 minuto). Si Garmin rechaza la llave, la tarjeta se oculta.