Gym Log
개인 맞춤 근력 트레이닝 추적기(PWA)
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기CFB Office Pool App
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Status: Current
Last verified: 2026-08-26
Owner: Project documentation
Canonical for: repository onboarding — what this app is, how to run it, and where the authoritative docs live
Supersedes: (none — replaces the original create-next-app boilerplate)
A hosted, league-first dashboard for a college-football office pool, built with
Next.js (App Router) and React. League members get a
stable place to check the current league picture, weekly matchups, standings,
owner insights, and live context without commissioner intervention.README 전문 보기 ↗Status: Current Last verified: 2026-08-26 Owner: Project documentation Canonical for: repository onboarding — what this app is, how to run it, and where the authoritative docs live Supersedes: (none — replaces the original create-next-app boilerplate)
A hosted, league-first dashboard for a college-football office pool, built with Next.js (App Router) and React. League members get a stable place to check the current league picture, weekly matchups, standings, owner insights, and live context without commissioner intervention.
The app is API-first: CollegeFootballData (CFBD) is the source of truth for schedule and scores (and the sole normal production score provider), and The Odds API is the source of truth for betting odds. The schedule is the canonical game universe — all score, odds, ownership, standings, and analytics attachment respects schedule-derived canonical games; nothing constructs a parallel game identity.
Read the canonical docs before making changes — do not infer architecture from this README:
AGENTS.md — canonical for code architecture, the binding
engineering/architecture invariants, and agent operating rules. Start here.DESIGN.md — canonical for UI/UX and the design system. Read
before any UI work.docs/README.md — the full documentation map: which doc
owns what, plus lifecycle/status conventions.Upstream → downstream flow: authorized admin/cron refresh → provider adapter → durable provider
cache → schedule normalization + team-identity resolution (src/lib/teamIdentity.ts) → canonical
game model (AppGame) → score, odds, ownership, and presentation overlays → standings/analytics →
UI. Member/public reads are cache-only. Durable game-stat evidence is evaluated and projected
against canonical games (not stored inline on AppGame) and never creates a parallel identity.
See docs/CFB_APP_ARCHITECTURE.md for the compact pipeline and
diagnose upstream-first in that order.
Source entrypoints: the App Router routes live under src/app/ (the root page
is src/app/page.tsx, the root layout is src/app/layout.tsx); shared logic
lives under src/lib/ (cross-surface derived view models in
src/lib/selectors/); UI components under src/components/.
Requires Node.js 22 or newer and npm. Set the provider/auth environment variables described in the deployment docs (see below) before running against live data — no secrets are reproduced here.
npm install # install dependencies
npm run dev # start the dev server at http://localhost:3000
All commands are defined in package.json:
npm run dev — start the Next.js dev server (localhost:3000).npm run build — production build.npm start — serve the production build.npm test — full test suite (Node's built-in test runner via the tsx
loader). Executable tests live under the nearest __tests__/; the full glob
is deliberately broader so a misplaced test cannot silently disappear.npm run test:file -- <path-or-glob...> — run one or more exact test files or
globs with the same isolation, TypeScript config, and timeout as the full
suite. Exact App Router paths containing [brackets] are handled literally.
The shared runner sets UPSTREAM_PACING_DISABLED=1; the fetch helper honors
it only inside Node's test child (NODE_TEST_CONTEXT=child-v8), so pacing
fails closed if either signal is absent. Never configure this flag for an app
runtime.npm run test:lib, npm run test:api, and npm run test:components — focused
subsystem slices for local iteration; they overlap with and do not partition
the full suite.npm run lint — fast, scoped ESLint + Prettier + markdown lint for local
iteration (skips test/data paths).npm run lint:all — full-project lint (includes test files). Run this
before pushing — it is the intended pre-merge gate.npm run lint:fix — auto-fix on the fast scope.npx tsc --noEmit — type-check.npm run fetch:teams — regenerate src/data/teams.json from CFBD.To run a single test file with the same environment as the full suite:
npm run test:file -- src/path/to/__tests__/file.test.ts
See AGENTS.md → "Verification and reference conventions" and
CLAUDE.md for the full linting/testing workflow.
The app deploys on Vercel. The high-level deploy/env/auth-secret/cron overview is
docs/operations/deployment.md; the detailed
step-by-step operator checklist is
docs/deployment-runbook.md. Those docs enumerate
the required environment variables (CFBD/Odds API keys, Clerk auth, the league
password gate, and CRON_SECRET) and the operational procedures — configure the
actual secret values through your hosting provider, never in the repository.