NBA Feed
팀 뉴스와 경기 정보를 제공, 점수는 직접 확인할 때까지 숨겨져 있습니다
From Victory 13세 이상 7종 스포츠 선수용 가이드 시각화
See the first moment before you compete. Guided visualization for athletes 13+ across seven sports. Your identity is secure. Compete From Victory.
스포츠·피트니스TypeScript · PLpgSQLGitHub @kchan-code온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A daily-discipline, mental-toughness, and Christian faith app for athletes ages 13 and up (calibrated for 13-25) — live for hockey, basketball, golf, football, baseball, lacrosse, and soccer. Parents buy for athletes under 18; adults 18+ can own their own account (self-serve, flag-gated — not yet enabled in production). Identity precedes performance: we operate from Christ's victory, not toward it (Hebrews 12:1-2).
See CLAUDE.md for full mission, scope, and non-negotiable constraints (minor data protection, journal safety, content voice).README 전문 보기 ↗A daily-discipline, mental-toughness, and Christian faith app for athletes ages 13 and up (calibrated for 13-25) — live for hockey, basketball, golf, football, baseball, lacrosse, and soccer. Parents buy for athletes under 18; adults 18+ can own their own account (self-serve, flag-gated — not yet enabled in production). Identity precedes performance: we operate from Christ's victory, not toward it (Hebrews 12:1-2).
See CLAUDE.md for full mission, scope, and non-negotiable constraints (minor data protection, journal safety, content voice).
apps/native are an additive App Store / Play path around the same web app — scaffolding only; store listings are not live. See docs/native-capacitor.md.main)from-victory/
├── apps/web/ # Next.js app (Vercel)
├── apps/native/ # Capacitor Android + iOS shell (store distribution)
├── supabase/ # Migrations
└── .github/ # CI gates (build, typecheck, lint, audio-cache-bust, privacy-verdict)
.nvmrc)audio:* and scripts:* tooling,
which executes .ts files directly via node --experimental-strip-types
(added in Node 22.6). The deployed app and CI still run on Node 20+; this
requirement applies to local audio generation / script export only.git clone <repo-url> from-victory
cd from-victory
nvm use # optional, picks up .nvmrc
npm install
cp apps/web/.env.example apps/web/.env.local
# Edit .env.local and fill in Supabase + Stripe values (see comments in the file).
Start the local Supabase stack (Supabase CLI required):
supabase start # starts local Postgres, Auth, Studio
supabase db push # apply all migrations
supabase gen types typescript --local > apps/web/lib/supabase/database.types.ts
Production migrations are applied automatically: merging a PR that touches
supabase/migrations/** triggers the db-migrate workflow, which runs
supabase db push against the linked project (FV-259 — closes the
code-ahead-of-schema gap that caused the 2026-06-12 login outage). It needs the
SUPABASE_ACCESS_TOKEN and SUPABASE_DB_PASSWORD repo secrets; if they are
missing the job fails loudly and the push must be run manually. Regenerating
types (supabase gen types --linked) remains a manual follow-up.
A daily drift detector backstops both halves of the deploy (FV-188 —
infra-drift workflow, scheduled + workflow_dispatch). It is strictly
read-only — it never applies migrations or changes secrets — and emails KC
through the existing Resend alert channel (ALERT_EMAIL_TO) when it finds a gap:
(1) any local supabase/migrations/** file missing on the linked project, or
(2) any required env var from apps/web/.env.example absent in the GitHub
production environment. The env check reports by name only and never reads,
logs, or emails a value. Mark a var optional with a # fv-env-check: optional
comment above it in .env.example. Required secrets/config for the job are
documented at the top of .github/workflows/infra-drift.yml. The two checks run
locally too:
# from apps/web/
node --experimental-strip-types scripts/check-env-presence.ts --no-alert
supabase migration list --linked \
| node --experimental-strip-types scripts/check-migration-drift.ts \
--migrations-dir ../../supabase/migrations
For local Stripe webhook testing (Stripe CLI required):
stripe listen --forward-to localhost:3000/api/webhooks/stripe
# Copy the printed whsec_... value into STRIPE_WEBHOOK_SECRET in .env.local
For end-to-end tests:
cp apps/web/.env.test.example apps/web/.env.test
# Fill in the test credentials before running npm run test:e2e
Run from the repo root:
| Command | What it does |
|---|---|
npm run dev | Start the Next.js dev server on :3000 |
npm run build | Production build of the web app |
npm run typecheck | Run tsc --noEmit against apps/web |
npm run lint | Run next lint |
npm test | Run tests across workspaces (when present) |
The web app stays on Vercel. apps/native wraps the hosted production URL
in a Capacitor WebView for Play / App Store distribution. It does not replace
the PWA and must not add tracking SDKs.
cd apps/native
npx cap sync
npm run build:android:debug # needs Android SDK; see docs/native-capacitor.md
# iOS archive requires macOS + Xcode — see docs/ios-app-store-release.md
Application / bundle id is locked: com.fromvictoryapp.app (Play Console).
Play enrollment, signing, Internal testing, and Data safety:
docs/android-play-release.md. iOS / App Store
(TestFlight-first; enrollment not started):
docs/ios-app-store-release.md. Architecture +
privacy rules: docs/native-capacitor.md.
These are non-negotiable. See CLAUDE.md for the full version.
main directly. Branch off with feature/<name> or hotfix/<name>.feat:, fix:, chore:, test:, docs:.privacy-verdict status check.This product serves minors (13-17). Journal entries are athlete-only readable, enforced at the database level via Supabase RLS. The parent dashboard reads metadata only. No third-party analytics or ad SDKs on minor accounts, ever (California AADC / GDPR-K compliance floor). Every PR touching user data, auth, journal, migrations, or third-party SDKs is reviewed by the kids-privacy-officer subagent; the privacy-verdict required CI check enforces an explicit VERDICT: APPROVED before merge.
If you're contributing: read the relevant sections of CLAUDE.md before opening a PR.