NBA Feed
팀 뉴스와 경기 정보를 제공, 점수는 직접 확인할 때까지 숨겨져 있습니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Gym management app — Expo (web target) on top of Supabase (Postgres + auth + storage + RLS).
Prereqs:
• Docker (for the local Supabase stack)
• Node 22
• Supabase CLI matching package.json#supabase.cli_version. npm run dev warns if your local CLI doesn't match.
npm run dev does, in order: start the local Supabase stack if it isn't running, write .env.local pointing at it (only if the file doesn't exist), then hand off to expo start --web. Open the URL it prints.
The local DB is seeded with two ready-made logins (run supabase db reset first if you started the stack before the seed existed):README 전문 보기 ↗Gym management app — Expo (web target) on top of Supabase (Postgres + auth + storage + RLS).
Prereqs:
package.json#supabase.cli_version. npm run dev warns if your local CLI doesn't match.From a fresh clone:
npm install
npm run dev
npm run dev does, in order: start the local Supabase stack if it isn't running, write .env.local pointing at it (only if the file doesn't exist), then hand off to expo start --web. Open the URL it prints.
The local DB is seeded with two ready-made logins (run supabase db reset first if you started the stack before the seed existed):
| Password | Role | |
|---|---|---|
[email protected] | password123 | owner of the demo gym |
[email protected] | password123 | member |
Seeds run only on local supabase db reset — they never reach the hosted project. You can also sign up a fresh account and walk through Start a new gym.
To pull main + reinstall deps + replay migrations in one go:
npm run sync
.env.local is auto-generated to point at the local stack (http://127.0.0.1:54321). To debug against your hosted project, edit .env.local with the URL + anon key from dashboard.supabase.com → project → API:
EXPO_PUBLIC_SUPABASE_URL=https://<project>.supabase.co
EXPO_PUBLIC_SUPABASE_ANON_KEY=<anon-key>
.env.local is gitignored — never commit it.
The CRM dashboard, setup wizard, and Automation settings can open a live
browser voice call with a gym's AI assistant (no phone number needed).
This needs Vapi's public key (dashboard.vapi.ai → API Keys, not the
private key used server-side):
EXPO_PUBLIC_VAPI_KEY=<public-key>
Without it, those entry points show as unavailable rather than failing.
supabase/migrations/NNNN_description.sql.supabase db reset replays every migration against the local DB. Catches order / syntax / RLS problems immediately.supabase test db runs the pgTAP suite. Author a _self_only.sql or similar for any RLS change.main runs the db-deploy CI job which sends the migration to the hosted project. No manual supabase db push needed.Three jobs in .github/workflows/ci.yml:
| Job | When | What |
|---|---|---|
check | every push + PR | tsc --noEmit + npm test |
db-tests | every push + PR | supabase start + supabase test db against a fresh local stack |
db-deploy | push to main only, after both gates pass | supabase db push --include-all against the hosted project |
db-deploy needs three repo secrets (Settings → Secrets and variables → Actions):
SUPABASE_ACCESS_TOKEN — personal access token from https://supabase.com/dashboard/account/tokensSUPABASE_PROJECT_REF — the hosted project ref (the slug in the dashboard URL)SUPABASE_DB_PASSWORD — hosted DB password (used by supabase db push)Without these the job will fail loudly on first push to main; add them before merging anything that touches migrations.
npm install wires a husky hook at .husky/pre-commit that:
user.email + user.name on the local repo if not already configured (avoids unverified commits).tsc --noEmit and npm test.Skip with git commit --no-verify if you really need to.
.claude/settings.json registers a SessionStart hook (scripts/session-start.sh). On every session start it sets the git author if unset and fetches origin/main; if the workspace is sitting on a throwaway claude/* branch with a clean tree and every commit pushed, it switches to a synced main. Cloud containers reset onto stale branches between sessions — this keeps new sessions from building on weeks-old code. It never touches a branch with uncommitted or unpushed work.
| Symptom | Fix |
|---|---|
supabase start complains about port conflicts | supabase stop --all then retry, or check docker ps --filter publish=54322. |
Invalid db.major_version: 17 in CI | Bump package.json#supabase.cli_version to a release that supports Postgres 17 (≥ 2.40). |
Missing Supabase env vars page in browser | Delete .env.local and re-run npm run dev to regenerate. |
CLI mismatch warning from npm run dev | Either bump local CLI (brew upgrade supabase etc.) or change package.json#supabase.cli_version to match your local. |
Stuck on /welcome after creating a gym | Hard-reload the browser. The membership query is pinned to refetchOnMount: false; any flow that changes membership must await refreshMembership(queryClient) (exported from src/lib/auth.ts) before navigating. |