尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Calculate CdA (Coefficient of Drag) and crr (tire rolling resistance) based on field testing data in the form of Garmin or compatible .FIT files.
翻译准备中
正在加载完整 README。
查看完整 README ↗MyCdA.app estimates your aerodynamic drag area (CdA) and rolling resistance (Crr) from rides recorded with a power meter, speed sensor and cycling computer. Compare runs to find out whether a change in position or equipment makes you faster.
Try it: mycda.app (free)
.fit and .csv files, including gzipped and zipped exports. Problem files say exactly why they can't be used, and failed or interrupted uploads can be retried.| Activities | Activity |
|---|---|
| Part | Technology |
|---|---|
Web app (web/) | React 19, TypeScript, Vite, Mantine, React Router, TanStack Query, Plotly, Leaflet |
Analysis core (web/src/core/) | Framework-free TypeScript: virtual elevation, fitting, wind model, air density, loop detection |
| Backend | Firebase Auth, Firestore, Storage and Hosting. Cloud Functions (functions/, Node 22) parse uploads and serve activity data |
| External data | Open-Meteo (weather, elevation) and OpenStreetMap (maps), with no API keys |
Architecture, design notes and decision records are in docs/.
You need Node 22+ and, for the emulator tests, Java 21+ and Chrome.
# web app
cd web
npm ci
cp .env.example .env.local # fill in your Firebase web config
npm run dev # http://localhost:5173
# or run everything locally against the Firebase emulators
npm --prefix ../tests/emulator ci
npm --prefix ../tests/emulator run emulators # terminal 1
npm run dev:emulators # terminal 2
Tests:
npm --prefix web test # analysis core, data and UI helpers (Vitest)
npm --prefix functions test # upload parsing (node --test)
npm --prefix tests/emulator test # security rules, functions end to end, browser tests (Playwright)
From the repository root, npm run dev, dev:emulators, emulators, build, lint, test (web and functions) and test:emulator forward to the packages; each package still installs its own dependencies with npm ci.
CI runs all of them on every push (.github/workflows/ci.yml).
Bump version in web/package.json on master, then tag that commit with the same version and push the tag:
git tag v2.1.0 && git push origin v2.1.0
The Deploy workflow checks that the tag matches the version and is on master, runs CI, and deploys to Firebase. The version shows in the app's footer.
.firebaserc at your project, and fill in web/.env.local from the project's web app config.firebase deploy. That deploys the Firestore and Storage rules, the functions, and hosting (which builds web/ first).The header row needs time, power and speed (km/h). It can also have airspeed, elevation, lap, lat and long. See the FAQ for details, or download the example file.
Questions and release notes: the MyCdA community. Bugs and ideas: GitHub issues.