ランキングに戻る

thomaschampagne/elevate

TypeScriptthomaschampagne.github.io/elevate-docs/

A sport app to "Elevate" your training experience and goals! Track your fitness and progressions over time. Analyse deeper your activities. And more...

chromestravacyclingrunningswimwebextensionangularelectron
スター成長
スター
1.5k
フォーク
196
週間成長
Issue
140
5001k
2014年11月2018年9月2022年8月2026年7月
成果物npmnpm install elevate
README

Markdownify

✨ A sport app to "Elevate" your training experience and goals! Track your fitness and progressions over time. Analyse deeper your activities. And more...

ScreenshotsDesktop AppWeb Extension (For Strava)Development

fitness-chart

Screenshots And Features

fitness-chart
Track your long-term fitness trend and performance improvements visually.

activities
Browse and filter your recorded rides with summary statistics for each activity.

activity-main
Review in-depth ride details including map and core metrics for every session.

activity-stats
View essential ride stats including averages and highlight metrics for each activity.

activity-peaks
See peak values for power, heart rate, speed, and cadence across your ride.

activity-zones
Explore how much time was spent in various heart rate, power, and cadence zones during a ride.

activity-splits
Analyze best splits and key segment statistics like fastest speeds and highest cadence.

year-progress-ytd
Monitor your yearly progression with cumulative activity and training volume charts.

year-progress-rolling-volume
Visualize rolling training volume and track period-over-period improvements.

athlete-settings
Adjust personal data, physical metrics, and measurement preferences over time.

zones-settings-hr
Customize your training zones for heart rate, power, and cadence.

connectors
Manage integrations with external services and sync activities easily.

Install

Desktop App

Download & Install

Build from sources

Go to chapter Environment setup.

Web extension

Download for Chrome, Chromium, Edge (from 2020), Brave, Opera, Vivaldi, Yandex, ...

Go to Chrome Web Store

From the sources

Go to chapter Environment setup.

Star History

Star History

Development

This section covers the environment setup to develop and build both desktop app and web extension.

Global solution structure

The solution is cut in 3 folders/projects: the appcore, the desktop & webextension

App-core project

Contains the Elevate App shared and loaded by both desktop and webextensionprojects. Appcore contains core features like fitness trend, year progressions, athlete settings...

The Appcore main technology stack is:

Desktop project

Holds the container behaviour to provide a cross-platform desktop app under Windows, Linux & MacOS. It contains desktop specific features like connectors synchronization (to fetch athlete activities from external).

The Desktop main technology stack is:

  • Typescript as programming language.
  • Jest as Javascript test runner.
  • Electron as cross-platform desktop container.
  • Electron-builder to build, sign and publish installers per platform. Also handle app updates process (via electron-updater).
  • Rollup.js to load & bundle modules.
  • Vue.js for splash-screen update window.

Web-extension project

Contains the web extension behaviour that acts directly on strava.com website. This includes extended stats on activities & segments efforts, best splits, etc...

Environments setup

Install requirements

You will need to install NodeJS (v15+) to build both desktop and chrome web extension.

Clone the git-flow based project

git clone https://github.com/thomaschampagne/elevate.git

or

git clone git@github.com:thomaschampagne/elevate.git

The new mono-repo including the desktop app and the web extension is on develop-new branch at the moment. So checkout/track this branch to build the desktop app:

cd ./elevate
git checkout --track origin/develop-new

Then install npm dependencies:

npm install

Run solution tests (appcore + desktop + webextension):

npm test

(Should be executed with success for any pull request submission).

Desktop development environment

All commands displayed in this section will be executed in ./desktop/ folder. So:

cd ./desktop/
  • Run in development:
npm start

This npm task will create a ./desktop/dist output folder and re-compile both appcore and desktop projects on any code changes

To open the desktop app, open another terminal, then run:

npm run launch:dev:app
  • Run unit tests:
npm test
  • Generate production installers and publish them per platforms:

First switch to desktop directory with cd desktop/

  • Build Windows x64 .exe:

    npm run build:publish:windows
    
  • Build Linux x64 .deb:

    npm run build:publish:linux
    
  • Build MacOS x64 .dmg :

    npm run build:publish:macos
    

Output installers will be located in ./desktop/package/ The build targets are defined in ./desktop/package.json (build key section). See https://www.electron.build for more info.

npm run clean

Web extension development environment

To develop the web extension, you need a Chrome based browser such as Chrome, Chromium, Edge (from 2020), Brave, Opera, Vivaldi, Yandex, ...

All commands displayed in this section will be executed in ./webextension/ folder. So:

cd ./webextension/
  • Run in development:
npm start

This npm task will create a ./webextension/dist output folder and re-compile both appcore and webextension projects on any code changes

  • To load the web extension into your chrome based browser:

    • Open new tab and type chrome://extensions, then enter.
    • Tick Developer Mode checkbox.
    • Click Load Unpacked Extension button, then choose ./webextension/dist directory (this is where you have the manifest.json file)
    • Make sure to disable other instances of elevate. You can re-enable them back from same tab.
    • Open strava.com OR click on the Elevate icon in the browser toolbar.
  • Run unit tests

npm test
  • Production package

You can package the extension with the following command

npm run package

Output release will be located in ./webextension/package/

  • Clean outputs:
npm run clean

Build with docker

Desktop app

@TODO

Web extension

Create docker your image from Dockerfile

docker build . -t elevate-chrome-builder

Run a docker production build through a container. Replace /path/to/your/directory/ with a folder on your host to fetch the packaged build when done.

docker run --rm --name elevate-chrome-build -v /path/to/your/directory/:/package elevate-chrome-builder

Appendix

Add a new desktop migration for a next release

Register your new migration in below file

./appcore/src/app/desktop/migration/desktop-registered-migrations.ts

Tip: to emulate a version upgrade, you may downgrade the version property inside ipc.storage.json file (user app data folder)

Sign application

Self-sign with OpenSSL for windows build

  • Create & edit a code_sign.cnf openssl config:
[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
countryName             = FR
stateOrProvinceName     = Rhone Alpes
localityName            = Grenoble
organizationName        = Elevate
commonName              = Elevate Sports App
emailAddress            = you@email.com

[v3_req]
basicConstraints        = CA:FALSE
keyUsage                = critical,digitalSignature
extendedKeyUsage        = critical,codeSigning
  • Generate private key and certificate with a passphrase
openssl req -x509 -newkey rsa:4096 -sha256 -keyout code_sign.key -out code_sign.crt -days 3650 -config code_sign.cnf
  • Create .pxf file from the private key and certificate previously generated. .pxf file will be used to sign app under windows.
openssl pkcs12 -export -legacy -name "elevate-sports-app" -out code_sign.pfx -inkey code_sign.key -in code_sign.crt
  • Convert .pxf file to base64
base64 code_sign.pfx -w 0
  • Create/edit electron-builder.env file under ./desktop/ folder, and add following keys:
CSC_LINK=
CSC_KEY_PASSWORD=
  • Assign the base64 previously generated to the key CSC_LINK

  • Assign the passphrase previously used to the key CSC_KEY_PASSWORD

  • Then run packaging for windows:

npm run package:windows

Publish to github releases

  • Generate a github personal access token at https://github.com/settings/tokens/new

  • Tick write:packages scope. The repo and read:packages scopes should be automatically ticked too. Leave them ticked.

  • Enter a Note for your token, then click Generate token. Keep this token safe. If lost you will have to re-generate one.

  • Create/edit electron-builder.env file under ./desktop/ folder, and add following key:

GH_TOKEN=
  • Assign the generated token to the key GH_TOKEN.

  • Open ./desktop/package.json file and go to the key build.publish.

  • Edit the owner and repo variables to match with your target github repository.

Note: To publish a new version on github, a github draft release has to exist on the remote target repo. The github draft release value should match the version value of ./desktop/package.json file. New version must be compliant with semver convention and higher than previous version if exists. You can use this semver compare tool that your new version is higher than your previous one.

Note: You may already pushed a git tag matching your version. If not, the git tag will be created on publish.

  • Run packaging to publish installer:
npm run publish:win

or

npm run publish:mac

Use custom browser for unit-testing (web-extension only)

Create a browsers.karma.conf.js file in webextension folder.

To run unit test in a headless chromium instead of chrome, inject below javascript code:

module.exports = {
    browsers: [
        "HeadlessChrome"
    ],
    customLaunchers: {
        HeadlessChrome: {
            base: "Chromium",
            flags: [
                "--no-sandbox",
                // See https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md
                "--headless",
                "--disable-gpu",
                // Without a remote debugging port, Google Chrome exits immediately.
                " --remote-debugging-port=9222"
            ]
        }
    }
};

Desktop: Debug the calculated watts against real power

This works in development build only

  • Create a new local storage key named DEBUG_EST_VS_REAL_WATTS and set it to true
  • Reload application and go to activities performed with a real power meter (cycling or running)
関連リポジトリ
electron/electron

:electron: Build cross-platform desktop apps with JavaScript, HTML, and CSS

C++MIT Licenseelectronjavascript
electronjs.org
122.1k17.3k
puppeteer/puppeteer

JavaScript API for Chrome and Firefox

TypeScriptnpmApache License 2.0headless-chrometesting
pptr.dev
95.3k9.5k
microsoft/playwright

Playwright is a framework for Web Testing and Automation. It allows testing Chromium, Firefox and WebKit with a single API.

TypeScriptnpmApache License 2.0playwrighttesting
playwright.dev
93.2k6.1k
FiloSottile/mkcert

A simple zero-config tool to make locally trusted development certificates with any names you'd like.

GoGo ModulesBSD 3-Clause "New" or "Revised" Licensehttpstls
mkcert.dev
59.4k3.1k
ChromeDevTools/chrome-devtools-mcp

Chrome DevTools for coding agents

TypeScriptnpmApache License 2.0mcp-serverpuppeteer
npmjs.org/package/chrome-devtools-mcp
47.4k3.2k
jaywcjlove/linux-command

Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux

MarkdownMIT Licenselinuxlinux-command
jaywcjlove.github.io/linux-command
36.5k6.6k
feder-cr/Jobs_Applier_AI_Agent_AIHawk

AIHawk aims to easy job hunt process by automating the job application process. Utilizing artificial intelligence, it enables users to apply for multiple jobs in a tailored way.

PythonPyPIGNU Affero General Public License v3.0automationbot
30k4.6k
feder-cr/Jobs_Applier_AI_Agent

Auto_Jobs_Applier_AI_Agent aims to easy job hunt process by automating the job application process. Utilizing artificial intelligence, it enables users to apply for multiple jobs in an automated and personalized way.

PythonPyPIautomationbot
24.5k3.6k
ovity/octotree

GitHub on steroids

JavaScriptnpmGNU Affero General Public License v3.0githubchrome
octotree.io
23.2k1.8k
gildas-lormeau/SingleFile

Web Extension for saving a faithful copy of a complete web page in a single HTML file

JavaScriptnpmGNU Affero General Public License v3.0browserarchive
getsinglefile.com
21.9k1.4k
xifangczy/cat-catch

猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension

JavaScriptnpmGNU General Public License v3.0chromechrome-extension
cat-catch.94cat.com
20.8k1.8k
segment-boneyard/nightmare

A high-level browser automation library.

JavaScriptnpmelectronheadless-chrome
open.segment.com
19.8k1.1k