자전거용 무료 CdA 계산기, 파워미터 현장 테스트와 Chung 가상 고도법으로 항력 면적·구름 저항을 측정
Free CdA calculator for cyclists: measure your drag area (CdA) and rolling resistance (Crr) from power meter field tests with Chung's virtual elevation method.
스포츠·피트니스TypeScript · JavaScriptGitHub @mariuspopovici온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.