Endurain: un servicio tipo Strava que puedes autoalojar
(github.com/joaovitoriasilva)- Endurain es un servicio de seguimiento fitness autoalojado, diseñado para que los usuarios controlen directamente sus datos y su entorno de alojamiento; es similar a Strava, pero enfocado en la privacidad y la personalización
- El frontend está basado en Vue.js y el backend en Python FastAPI; usa PostgreSQL, Jaeger, Alembic, SQLAlchemy y más para gestionar datos de actividad y el seguimiento básico
- Soporta integración con Strava y Garmin Connect, y también permite la carga manual de actividades mediante archivos
.gpx,.tcxy.fit - Se ofrecen imágenes de Docker y un ejemplo de
docker-compose.yml.example, y la configuración se maneja con variables de entorno para facilitar el despliegue y la personalización - El repositorio de GitHub es un espejo de solo lectura y la actividad del proyecto se lleva en Codeberg; actualmente está en una pausa temporal de nuevas funciones para enfocarse más en fortalecer la base
Funciones que ofrece Endurain
- Endurain es un servicio de seguimiento fitness autoalojado cuyo objetivo es que el usuario tenga control total sobre sus datos y su entorno de alojamiento
- Es un servicio similar a Strava, pero su enfoque está en la privacidad y la personalización
- Los datos de actividad pueden importarse mediante integración con servicios externos o por carga de archivos
- Soporte para integración con Strava
- Soporte para integración con Garmin Connect
- Soporte para carga manual de archivos
.gpx,.tcxy.fit
Stack tecnológico
- El frontend está construido con Vue.js, Notivue y Bootstrap CSS
- El backend está centrado en Python FastAPI
- Alembic
- SQLAlchemy
- Apprise
stravalibpara la integración con Stravapython-garminconnectpara la integración con Garmin Connectgpxpypara importar.gpxtcxreaderpara importar.tcxfitdecodepara importar.fit
- La base de datos usa PostgreSQL
- Para trazabilidad y monitoreo básicos se utiliza Jaeger
Despliegue y configuración
- Se ofrecen imágenes de Docker para desplegar Endurain
- El repositorio incluye el archivo
docker-compose.yml.example, con un ejemplo de despliegue - La configuración se maneja mediante variables de entorno, lo que da flexibilidad y facilita la personalización
- Más información en la documentación de Endurain
Entorno de demostración
- Hay una demo disponible para probar Endurain sin instalar nada
- https://demo.endurain.com
- Nombre de usuario:
admin - Contraseña:
admin
- El entorno de demo se reinicia todos los días a la medianoche según la zona horaria Europe/Lisbon
- No se deben guardar datos importantes en la demo
Estado operativo del proyecto y licencia
- El repositorio de GitHub es un espejo de solo lectura, y los issues, pull requests y la actividad del proyecto se gestionan en Codeberg
- Endurain está en una pausa temporal de nuevas funciones
- El proyecto no está abandonado; el enfoque cambió de nuevas funciones a fortalecer la base
- La explicación relacionada puede consultarse en Pausando nuevas funciones para que Endurain pueda seguir creciendo
- Tiene soporte multilingüe y se puede contribuir con traducciones a través de Codeberg Translate
- La licencia es AGPL-3.0
- Endurain® es una marca registrada de João Vitória Silva
- Se permite el autoalojamiento no comercial con fines personales, educativos, de investigación y comunitarios, así como el uso del nombre y el logo
- No se permite el uso comercial del nombre o logo de Endurain, como hosting de pago, productos o servicios, sin autorización previa por escrito
1 comentarios
Comentarios en Hacker News
Me estoy pasando poco a poco a intervals.icu(https://intervals.icu/)
Como se basa en donaciones, se siente en cierto modo más “open source”, y me parece mucho mejor que Strava
La razón por la que uso Strava es porque mis amigos y mi familia me motivan, no porque quiera obtener números más altos de potencia o frecuencia cardíaca
Como app web, hay una función que falta, y es el seguimiento automático de actividades registradas por un smartwatch, lo cual parece difícil
La forma de rodearlo parece ser importar automáticamente a Strava primero y luego conectar Strava con Endurain
Garmin ofrece una interfaz REST de Connect para importar actividades FIT
https://developer.garmin.com/gc-developer-program/activity-a...
Entonces, lo que falta parecería ser la integración entre Endurain y las principales plataformas de fabricantes. No revisé el código para confirmar si realmente falta
Recuerdo que Garmin también podía hacerlo, pero no sé cómo esté la versión más reciente
Si no eres desarrollador profesional y solo tienes más o menos los conceptos de desarrollo que aprendiste en la universidad hace 10 años, entonces hiciste un buen trabajo al crear un sistema que se ve tan completo
Pero no sé si eres el desarrollador original; me da curiosidad si no te preocupa haber cometido algún error que luego te pase factura, por ejemplo problemas de seguridad o fallas difíciles de corregir más adelante
Soy del tipo que pierde una hora por un pequeño error de dedo o por un bug que debería ser fácil de encontrar
Uso ChatGPT como apoyo para el proyecto, para generar código y señalar problemas en el código
Sobre todo al implementar funciones comunes, suele cubrir mejor los casos límite que yo por mi cuenta, y si le pido que cierre huecos de seguridad, normalmente lo hace mejor que yo
Ayer mismo propuso 7 estrategias para bloquear bots que llenan formularios, y después de aplicar algunas en pocos minutos, el problema de bots se detuvo de inmediato
Claro que siguen ocurriendo errores, pero las herramientas de IA ayudan a reducirlos si se usan junto con el propio pensamiento crítico. Si corriges a la IA con frecuencia, pides ayuda desde la perspectiva de prevenir cierto tipo de problemas, o armas prompts basados en conocimiento previo, obtienes respuestas mucho mejores
Lo impresionante es que construyó un sistema y aparentemente lo dejó abierto a la retroalimentación de la comunidad, y eso podría dar un mejor resultado que el de un desarrollador con mucha experiencia trabajando solo durante años por preocupación de seguridad
Más que los errores en sí, lo importante es la velocidad para detectarlos y corregirlos. Y es importante construir sistemas de refuerzo propio, como linters, pruebas unitarias, sistemas de tipos y CI/CD, para evitar que vuelva a pasar lo mismo. En broma, a esto le llamo desarrollo basado en la humildad
Incluso los desarrolladores con más experiencia cometen ese tipo de errores. Si crees que ya superaste esa etapa, necesitas más experiencia para ver la realidad
La mejor forma de aprender es crear proyectos, equivocarte y encontrar cómo corregirlos. Cuanto más difícil sea corregirlos, más lo vas a considerar desde el diseño inicial en tu siguiente proyecto
Ya sea IA o un principiante, al final solo es una diferencia de cuánto se equivocan
El nombre es excelente. Parece un juego de palabras entre endurance y el gran campeón ciclista español Miguel Induráin
https://en.m.wikipedia.org/wiki/Miguel_Indur%C3%A1in
Trabajó con el pionero de la EPO, el Dr. Conconi; nunca dio positivo, pero parece poco probable que haya estado limpio
¿Esto no se parece más a un frontend alternativo con función de respaldo?
Al final, parece que primero tienes que darle los datos a Strava antes de poder usar esta herramienta
También hay una alternativa bastante rústica que hice yo, y que no necesita Strava para nada: https://github.com/cfe84/gpx-tools/blob/main/README.md
Es un comando CLI que se ejecuta en una carpeta con tracks GPX, y los segmentos se pueden definir directamente en un archivo JSON para luego listar los resultados por segmento
Registro las actividades con OsmAnd, las sincronizo con syncthing usando foldersync, y luego lo ejecuto en la carpeta de destino
Quizá te sirva como referencia para la lógica de cálculo de segmentos. No diría que sea excelente, pero podría ser una función adicional útil para meter en el servidor
Creo que la función estrella de Strava son los segmentos
Incluso si no te interesa el mejor tiempo entre todos los usuarios, es decir, el KOM, sigue siendo valioso poder comparar mi progreso con el paso del tiempo en un tramo específico de carretera
Si lo miras junto con la frecuencia cardíaca y el esfuerzo percibido, puedes estimar más o menos cuál es tu estado físico actual o cuánto has caído respecto a tu mejor forma
Después haría falta alguna forma de bloquear o eliminar segmentos maliciosos y a quienes los envían, y quizá podría funcionar un sistema de votos
Detectar segmentos durante una actividad es complicado, así que me habría gustado investigarlo más. Probablemente podría apoyarme en una explicación de ChatGPT, pero al menos sé que tiene que ver con cuadros delimitadores de latitud/longitud y con detectar los puntos de inicio y fin dentro de ellos
Recuerdo vagamente que Strava tenía alguna patente relacionada con los segmentos
Me pregunto cómo podría usarse junto con herramientas móviles como Gadgetbridge[0]
Esta app evita las aplicaciones propietarias del smartwatch y permite no subir datos de salud y ubicación a servicios comerciales
Pero no es compatible con los principales relojes deportivos de Garmin, solo con algunos dispositivos[1]. Así que tienes que conectar el reloj por USB para transferir las rutas y acceder a ellas desde la computadora; no hay soporte móvil
[0] https://f-droid.org/en/packages/nodomain.freeyourgadget.gadg...
[1] https://gadgetbridge.org/gadgets/
¿Se integra con el Fediverse? La razón principal por la que uso Strava es por su aspecto de red social
Garmin Connect tiene mejores herramientas de análisis que Strava. Todavía no he probado Endurain
Es una pena que Runalyze ya no sea de código abierto, pero las versiones anteriores todavía siguen ahí
https://github.com/Runalyze/Runalyze