{"id":23885664,"url":"https://github.com/entorb/strava-streamlit","last_synced_at":"2025-07-22T01:02:28.133Z","repository":{"id":269827999,"uuid":"908075919","full_name":"entorb/strava-streamlit","owner":"entorb","description":"Strava Äpp V2 using Streamlit","archived":false,"fork":false,"pushed_at":"2025-07-04T16:22:08.000Z","size":219,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-04T17:35:07.493Z","etag":null,"topics":["analysis","python","strava","strava-api","streamlit"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/entorb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-12-25T04:07:59.000Z","updated_at":"2025-07-04T16:22:12.000Z","dependencies_parsed_at":"2024-12-26T13:37:06.432Z","dependency_job_id":"b1b687d3-db3c-4eb0-9057-da3bb1162e6a","html_url":"https://github.com/entorb/strava-streamlit","commit_stats":null,"previous_names":["entorb/strava-streamlit"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/entorb/strava-streamlit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/entorb%2Fstrava-streamlit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/entorb%2Fstrava-streamlit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/entorb%2Fstrava-streamlit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/entorb%2Fstrava-streamlit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/entorb","download_url":"https://codeload.github.com/entorb/strava-streamlit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/entorb%2Fstrava-streamlit/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266405362,"owners_count":23923535,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-21T11:47:31.412Z","response_time":64,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["analysis","python","strava","strava-api","streamlit"],"created_at":"2025-01-04T05:53:06.907Z","updated_at":"2025-07-22T01:02:28.052Z","avatar_url":"https://github.com/entorb.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Torben's Strava App V2 using Streamlit\n\nThis is a modern rewrite of my [old Strava Äpp](https://entorb.net/strava/). Currently, only read-only statistics features are implemented. For bulk modify of activities and Excel import, please use the old Äpp.\n\n## Privacy\n\n* **Code:** The [source-code](https://github.com/entorb/strava-streamlit/) is open source.\n* **Data:** The app does not use a database. Your Strava data is only temporarily cached.\n* **Access:** A temporary access token to your Strava profile is used and revoked at logout.\n* **Cookies:** Only a single technical cookie is used for session identification and deleted at end of session. No user tracking.\n\n## Repo Setup\n\n### Python version\n\nAs my webserver is running Python 3.11, I need to use it locally too. See below.\n\n### Install\n\nsee [install.sh](scripts/install.sh)\n\n### Run\n\nsee [run.sh](scripts/run.sh)\n\n### Check Code\n\n```sh\npre-commit run --all-files\nscripts/copy_test_data.sh\npytest --cov --cov-report=html:coverage_report\n```\n\n### Config\n\nsee [.streamlit/config.toml](.streamlit/config.toml)\nsee [.streamlit/secrets.toml](.streamlit/secrets-EXAMPLE.toml)\n\n### SonarQube Code Analysis\n\nAt [sonarcloud.io](https://sonarcloud.io/summary/overall?id=entorb_template-python\u0026branch=main)\n\nIf you want unit test coverage reports in SonarQube, you need to run the sonar check in the GitHub Action pipeline:\n\n* disable the \"Automatic Analysis\" at \u003chttps://sonarcloud.io/project/analysis_method?id=entorb_strava-streamlit\u003e\n* setup SonarSource/sonarqube-scan-action@v5 in [check.yml](.github/workflows/check.yml)\n* rename [.sonarcloud.properties](.sonarcloud.properties) to [sonar-project.properties](sonar-project.properties)\n* generate a token at \u003chttps://sonarcloud.io/account/security\u003e\n* add this token as secret SONAR_TOKEN in GitHub\n\n## TODOs\n\n### Features\n\n#### Open Feature TODOs\n\n* some text to explain features\n\n#### Done Feature TODOs\n\n* activity caching: all or selected years only\n* activity geo calculations\n* gear download\n* activity table\n* activity statistics\n* activity year summary\n* activity active days per year\n* known locations edit and list unknown frequent locations\n* choose km vs. miles\n* calendar export\n\n### Technical Features\n\n#### Open Dev TODOs\n\n* why is supervisorctl log empty\n`supervisorctl tail -f strava-streamlit`\n* reconnect after token expired\n* unit tests for act stats\n\n#### Done Dev TODOs\n\n* Strava login\n* Strava logout/deauthorize\n* Strava token refresh\n* Strava logos and buttons\n* API response caching for local dev environment\n* unit tests using dummy activity data\n\n## Deployment at Uberspace\n\n### Python version for local dev\n\nAs my webserver is running Python 3.11, I need to use it locally too.\n\nVariant 1: use venv\n\n```sh\n.pyenv/versions/3.11.9/bin/python -m venv .venv --prompt $(basename $(pwd))\nsource .venv/bin/activate\n```\n\nVariant 2: use global pyenv\n\n```sh\npyenv global 3.11.9\neval \"$(pyenv init -)\"\n```\n\n`.vscode/settings.json`\n\n```json\n{\n    \"python.defaultInterpreterPath\": \".pyenv/versions/3.11.9/bin/python\"\n}\n```\n\n### Setup\n\nsee \u003chttps://entorb.net/wickie/Uberspace#Streamlit\u003e\n\n```sh\nmkdir ~/strava-streamlit\n\n# run scripts/deploy.sh\n\npip3.11 install --user streamlit -r strava-streamlit/requirements.txt\n\n# start it manually (stop by ctrl+c)\nstreamlit run app.py\n\n# add web backend\nuberspace web backend set /strava-streamlit --http --port 8501\n```\n\nverify it is working via browser \u003chttps://entorb.net/strava-streamlit\u003e\n\nstop streamlit via `ctrl+c`\n\ncreate service `vim ~/etc/services.d/strava-streamlit.ini`\n\n```ini\n[program:strava-streamlit]\ndirectory=%(ENV_HOME)s/strava-streamlit\ncommand=python3.11 -O -m streamlit run src/app.py\nloglevel=info\n```\n\nstart service\n\n```sh\nsupervisorctl reread\nsupervisorctl update\nsupervisorctl status\nsupervisorctl restart strava-streamlit\n```\n\n### Check log\n\n```sh\n supervisorctl tail -f strava-streamlit\n```\n\nTODO: why is the output of logger missing?\n\n### Deploy update\n\nsee [deploy.sh](scripts/deploy.sh)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fentorb%2Fstrava-streamlit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fentorb%2Fstrava-streamlit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fentorb%2Fstrava-streamlit/lists"}