Endurain: serviço auto-hospedável no estilo Strava
(github.com/joaovitoriasilva)- Endurain é um serviço de rastreamento fitness auto-hospedável projetado para que o usuário controle diretamente seus dados e o ambiente de hospedagem; é semelhante ao Strava, mas com foco em privacidade e personalização
- O frontend é baseado em Vue.js e o backend em Python FastAPI; usa PostgreSQL, Jaeger, Alembic, SQLAlchemy e outros para gerenciar dados de atividades e compor o rastreamento básico
- Oferece integração com Strava e Garmin Connect, além de permitir o upload manual de atividades por arquivos
.gpx,.tcxe.fit - Imagens Docker e um exemplo de
docker-compose.yml.examplesão fornecidos, com configuração via variáveis de ambiente para facilitar a implantação e a personalização - O repositório no GitHub é um espelho somente leitura; a atividade do projeto acontece no Codeberg e, no momento, ele está em congelamento temporário de funcionalidades, com foco em fortalecer a base em vez de adicionar novos recursos
O que o Endurain oferece
- Endurain é um serviço de rastreamento fitness auto-hospedável, com o objetivo de dar ao usuário controle total sobre seus dados e ambiente de hospedagem
- É um serviço semelhante ao Strava, mas o foco está em privacidade e personalização
- Os dados de atividades podem ser importados por integração com serviços externos ou por upload de arquivos
- Suporte à integração com Strava
- Suporte à integração com Garmin Connect
- Suporte a upload manual de arquivos
.gpx,.tcxe.fit
Composição técnica
- O frontend é composto por Vue.js, Notivue e Bootstrap CSS
- O backend é centrado em Python FastAPI
- Alembic
- SQLAlchemy
- Apprise
stravalibpara integração com Stravapython-garminconnectpara integração com Garmin Connectgpxpypara importar.gpxtcxreaderpara importar.tcxfitdecodepara importar.fit
- O banco de dados usado é PostgreSQL
- Jaeger é usado para rastreamento e monitoramento básicos
Implantação e configuração
- São fornecidas imagens Docker para implantar o Endurain
- O repositório inclui o arquivo
docker-compose.yml.example, que permite consultar um exemplo de implantação - A configuração é feita por variáveis de ambiente, oferecendo flexibilidade e facilidade de personalização
- Mais informações estão disponíveis na documentação do Endurain
Ambiente de demonstração
- Há uma demonstração disponível para experimentar o Endurain sem instalação
- https://demo.endurain.com
- Nome de usuário:
admin - Senha:
admin
- O ambiente de demonstração é redefinido diariamente à meia-noite, no fuso horário Europe/Lisbon
- Dados importantes não devem ser armazenados na demonstração
Status de operação do projeto e licença
- O repositório no GitHub é um espelho somente leitura, e issues, pull requests e atividades do projeto são gerenciados no Codeberg
- O Endurain está em congelamento temporário de funcionalidades
- O projeto não foi interrompido; o foco mudou de novos recursos para o fortalecimento da base
- A explicação relacionada pode ser vista em Pausing new features so Endurain can keep growing
- Há suporte multilíngue, e é possível contribuir com traduções pelo Codeberg Translate
- A licença é AGPL-3.0
- Endurain® é uma marca registrada de João Vitória Silva
- Auto-hospedagem não comercial e uso do nome e do logotipo para fins pessoais, educacionais, de pesquisa e comunitários são permitidos
- O uso comercial do nome ou logotipo Endurain, como em hospedagem paga, produtos ou prestação de serviços, não é permitido sem autorização prévia por escrito
1 comentários
Opiniões no Hacker News
Estou migrando aos poucos para o intervals.icu (https://intervals.icu/)
Por ser baseado em doações, é meio que “open source”, e sinto que é muito melhor que o Strava
O motivo de usar o Strava é que amigos e família dão motivação, não porque eu queira obter números maiores de potência/frequência cardíaca
Como web app, há uma funcionalidade que falta, e acho difícil fazer rastreamento automático de atividades registradas por smartwatch
A alternativa parece ser importar automaticamente para o Strava e depois conectar o Strava ao Endurain
A Garmin oferece uma interface REST do Connect para importar atividades FIT
https://developer.garmin.com/gc-developer-program/activity-a...
Então o que parece faltar é uma integração entre o Endurain e as principais plataformas dos fabricantes. Não verifiquei o código para saber se isso realmente falta
Lembro que a Garmin também permitia isso, mas não sei como está nas versões atuais
Se a pessoa não é desenvolvedora profissional e só tem conceitos de desenvolvimento aprendidos na faculdade há 10 anos, criar um sistema que parece tão completo é um bom trabalho
Mas, não sei se é o desenvolvedor original, fico curioso se ela não tem medo de ter cometido erros que a prejudiquem mais tarde. Por exemplo, problemas de segurança ou erros difíceis de corrigir depois
Sou do tipo que perde uma hora com um erro de digitação bobo ou um bug que deveria ser fácil de encontrar
Uso o ChatGPT como assistente de projeto, para gerar código e apontar problemas no código
Especialmente ao implementar funcionalidades comuns, ele costuma cuidar melhor dos casos de borda do que eu faria sozinho e, quando peço para fechar brechas de segurança, também faz melhor do que o meu nível permitiria
Ainda ontem ele sugeriu sete estratégias para impedir bots de preencher formulários e, depois que apliquei algumas delas em poucos minutos, o problema com bots parou imediatamente
Erros obviamente acontecem, mas ferramentas de IA, usadas junto com o próprio pensamento crítico, ajudam a reduzi-los. Quando você corrige a IA com frequência, pede ajuda pensando em evitar certos tipos de problema, ou monta prompts com base no conhecimento que já tem, obtém respostas muito melhores
O impressionante é que ele criou um sistema e provavelmente o abriu para feedback da comunidade, o que pode levar a resultados melhores do que um desenvolvedor experiente passar anos criando sozinho, preocupado com segurança
Acho que mais importante do que o erro em si é a velocidade de descobrir e corrigir. E é importante criar sistemas de autorreforço, como linters, testes unitários, sistema de tipos e CI/CD, para que a mesma coisa não volte a acontecer. De brincadeira, chamo isso de desenvolvimento baseado em humildade
Até os desenvolvedores mais experientes cometem esses erros. Se você acha que já passou dessa fase, precisa de mais experiência para enxergar a verdade
A melhor forma de aprender é criar projetos, errar e descobrir como corrigir. Quanto mais difícil for corrigir, mais você vai considerar isso desde o design inicial no próximo projeto
Seja IA ou iniciante, no fim é só uma diferença de grau em relação ao quanto está errado
O nome é excelente. Parece um trocadilho combinando endurance com o nome do grande campeão espanhol de ciclismo Miguel Induráin
https://en.m.wikipedia.org/wiki/Miguel_Indur%C3%A1in
Trabalhou com o pioneiro da EPO, Dr. Conconi, e embora nunca tenha sido pego, parece pouco provável que fosse limpo
Isto não está mais para um front-end alternativo com recurso de backup?
No fim, parece uma estrutura em que você precisa primeiro entregar os dados ao Strava antes que eles cheguem a esta ferramenta
Também tenho uma alternativa bem tosca que criei e que não precisa do Strava de jeito nenhum: https://github.com/cfe84/gpx-tools/blob/main/README.md
É um comando CLI que roda em uma pasta com trilhas GPX; os segmentos são definidos diretamente em um arquivo JSON e depois é possível listar o desempenho por segmento
Registro as atividades com o OsmAnd, sincronizo via syncthing usando foldersync e então rodo o comando na pasta de destino
A lógica de cálculo de segmentos pode servir de referência. Não vou dizer que é excelente, mas pode ser um bom recurso adicional para colocar em um servidor
Acho que o recurso matador do Strava são os segmentos
Mesmo que você não se importe com o melhor tempo entre todos os usuários, ou seja, o KOM, é valioso poder comparar seu progresso ao longo do tempo em determinados trechos de estrada
Ao olhar a frequência cardíaca junto com a percepção de esforço, dá para estimar em que nível está sua forma física atual, ou o quanto você está abaixo do seu melhor condicionamento
Depois seria necessário haver uma forma de bloquear ou remover segmentos maliciosos e seus remetentes, e talvez um sistema de votação fosse possível
Detectar segmentos durante uma atividade é complicado, então eu queria pesquisar mais. Talvez eu pudesse pegar emprestada uma explicação do ChatGPT, mas sei pelo menos que isso envolve caixas delimitadoras de latitude/longitude e a detecção de pontos de início e fim dentro delas
Tenho uma lembrança vaga de que a Strava tinha alguma patente relacionada a segmentos
Fico curioso para saber como isso poderia ser usado junto com ferramentas móveis como o Gadgetbridge[0]
Esse app permite contornar os apps proprietários dos smartwatches e evita que dados de saúde e localização sejam enviados para serviços comerciais
Mas ele não dá suporte aos principais relógios esportivos da Garmin, apenas a alguns dispositivos[1]. Então é preciso conectar o relógio por USB para transferir os trajetos e acessá-los no computador; não há suporte móvel
[0] https://f-droid.org/en/packages/nodomain.freeyourgadget.gadg...
[1] https://gadgetbridge.org/gadgets/
Integra com o Fediverse? O principal motivo para usar o Strava é seu caráter de rede social
O Garmin Connect tem ferramentas de análise melhores que as do Strava. Ainda não experimentei o Endurain
É uma pena que o Runalyze não seja mais open source, mas as versões antigas ainda estão lá
https://github.com/Runalyze/Runalyze