Skyderby
Turn GPS tracks from your skydives and BASE jumps into real flight analysis — plus worldwide rankings and competition scoring. Free to start.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
An endurance training app: adaptive plan generation across nine published
coaching methodologies, readiness and load engines, an LLM coach, and
Garmin / Strava / Apple Health integration. Live at
attune.coach.
"Broken Arrow Training" is legacy branding. The repo name, the migration
airlock's legacy path, and vite.config.ts's fallback base path still carry
it; the product does not.README 전문 보기 ↗An endurance training app: adaptive plan generation across nine published coaching methodologies, readiness and load engines, an LLM coach, and Garmin / Strava / Apple Health integration. Live at attune.coach.
"Broken Arrow Training" is legacy branding. The repo name, the migration airlock's legacy path, and
vite.config.ts's fallback base path still carry it; the product does not.
| Path | What it is |
|---|---|
src/engines/ | The domain engines — plan generator, readiness, MIM, terrain, descent, running, hyrox, general fitness |
src/__tests__/ | 315 test files / ~3982 tests, including property-invariant "laws" and golden plan snapshots |
api/ | Python serverless functions (coach, sync, auth, garmin, apple) deployed by Vercel |
worker/ | Cloudflare worker for the Strava OAuth token exchange |
ios/ | iOS wrapper app |
scripts/airlock/ | Standalone migration page served at the legacy origin; carries users' local data to attune.coach |
docs/initiatives/ | Intent → plan → close-out per initiative, with a registry |
docs/adr/ | Architecture decision records |
npm install
npm run dev # local dev server
npm test # vitest — gates every publish
npm run build # tsc -b && vite build
pytest -m "not eval" api/coach/tests # keyless Python suite
CLAUDE.md is the standing brief — commands, deploy topology, and the hard
constraints (notably: api/requirements.txt pins are the deployment, and the
DB schema is applied by hand). Read it before changing anything under api/
or .github/workflows/.
Three surfaces, three independent routes:
deploy.yml runs the suite, builds, and publishes dist/ to
the separate repo mcbeebe/attune-coach (gh-pages), which serves
attune.coach. That repo is a build artifact; it takes no hand-authored
commits.wrangler deploy.Because they are independent, they can drift. Every build stamps its commit
SHA into version.json and the bundle, and /api/version reports what Vercel
built; Settings → Deploy Diagnostics compares all three so a stale browser
is distinguishable from a stale backend.
The cross-device sync layer (/api/sync) stores per-(athlete, key)
JSONB rows in a Vercel Postgres (Neon) database. Provisioning the
database via Vercel automatically injects POSTGRES_URL,
POSTGRES_URL_NON_POOLING, and POSTGRES_PRISMA_URL into the
project's env vars; the schema still has to be applied once per fresh
database:
# 1. Pull the env vars Vercel injected into this project
vercel env pull .env.local
# 2. Apply the schema (idempotent — re-running is safe)
psql "$(grep '^POSTGRES_URL_NON_POOLING=' .env.local | cut -d= -f2- | tr -d '"')" \
-f scripts/db/init.sql
Use the non-pooling URL for DDL like this (the pooled URL goes
through PgBouncer in transaction mode and rejects some DDL). The
serverless functions in api/sync.py use the pooled POSTGRES_URL
because they're short-lived.
To verify:
psql "$POSTGRES_URL_NON_POOLING" -c '\dt'
# expect to see user_state in the list
Full PR scope, verification matrix, and follow-up roadmap (PR B / C /
D) live in docs/pr-a-sync-plan.md.