OpenAthlete
AGPLv3 기반 지구력 훈련 플랫폼—EU 호스팅, 투명한 로직, 자체 호스팅·전체 내보내기 지원
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Weekly training plans built from your profile, logged in the app, rebuilt every week. Single-file PWA on Vercel, Firebase Auth + Firestore, OpenRouter for plan generation.
index.html — the whole app (auth, onboarding, views)sw.js, manifest.json, icon.svg — PWAapi/_lib.js — Firebase Admin, token check, OpenRouter callapi/generate-plan.js — POST, builds a weekly plan from the profileapi/weekly-review.js — POST, closes a week: review + next week's plan from the logsapi/weekly-close.js — Monday cron, auto-closes last week for users who logged sessionsapi/estimate-meal.js — POST, macro estimate from a meal descriptionapi/calendar.js — GET, per-user iCal feed (token in the URL)api/delete-account.js — POST, erases the user's data and auth accountapi/daily-notify.js — daily cron, sends today's session by Web Pushfirestore.rules — each user can only read/write users/{uid}/**vercel.json — crons: daily notify 06:00 UTC, weekly close Monday 04:00 UTC (Hobby fires within the hour)firestore.rules in the Rules tab and publish.FIREBASE_CONFIG in index.html.npx web-push generate-vapid-keys. Put the public key in VAPID_PUBLIC_KEY in index.html and both keys in Vercel env..env.example. CRON_SECRET is sent automatically by Vercel cron as a Bearer token when set.users/{uid} profile, email, createdAt
users/{uid}/plans/{weekId} generated weekly plan
users/{uid}/logs/{id} session logs (step 3)
users/{uid}/reviews/{wk} weekly feedback (step 4)
users/{uid}/nutrition/{d} targets + meals (step 5)
users/{uid}/weights/{id} weight history
users/{uid}/push/main Web Push subscription + timezone
usage/{uid} server-only daily API counters (not readable by clients)
clubs/{clubId} name, sport, inviteCode, createdBy
clubs/{clubId}/members/{uid} role (coach|member), name, hidden
clubs/{clubId}/activity/{id} finished sessions for feed + leaderboard
clubs/{clubId}/notes/{uid} coach note fed into the member's next review
.github/workflows/smoke.yml runs a headless Chromium against the live site after every push. Add these repository secrets (GitHub → Settings → Secrets and variables → Actions):
CADENCE_URL — e.g. https://cadence-xi-one.vercel.appCADENCE_TEST_EMAIL / CADENCE_TEST_PASSWORD — an email/password account created in Firebase → Authentication → Users → Add user
Tests: API routes and auth, sign-in and tab navigation, Today fits one screen, the session view, nutrition/log/club screens and the language switch, and the per-day preference editor. Two heavier tests run only on manual dispatch with the generate input: full plan generation and layout measurement. Results are published to the test-results branch as JSON.