BATTERY
Baseball Arm-Care, Body-Care, and Fuel-Stacking web app.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Survive Sunday — NFL survivor pool PWA for friends (2026/27)
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Private NFL survivor / elimination pool PWA for the 2026/27 season.
Locale: en-CA. Stack: Next.js App Router, Prisma + Neon Postgres (production), Auth.js (email/username + password).
#1 cost rule: For specs, FILE-MAP lookups, QA critic scoring, copy, and checklists, use free tiers in order — free Grok, then free Claude, then free Gemini — before any paid Grok Bot / Cursor coding agents. Paid agents only for the actual code PR/merge. Aim to save ~30–50% usage by keeping planning and critic loops off paid runs. Details: docs/HANDOFF.md (top) and docs/FREE-GROK.md (free AI first).README 전문 보기 ↗Private NFL survivor / elimination pool PWA for the 2026/27 season.
Locale: en-CA. Stack: Next.js App Router, Prisma + Neon Postgres (production), Auth.js (email/username + password).
#1 cost rule: For specs, FILE-MAP lookups, QA critic scoring, copy, and checklists, use free tiers in order — free Grok, then free Claude, then free Gemini — before any paid Grok Bot / Cursor coding agents. Paid agents only for the actual code PR/merge. Aim to save ~30–50% usage by keeping planning and critic loops off paid runs. Details: docs/HANDOFF.md (top) and docs/FREE-GROK.md (free AI first).
Docs freshness: When any free or included usage allotment is near empty, refresh HANDOFF / FREE-GROK.md / FILE-MAP (Help only if a user/admin process changed) before starting more work — including Grok Bot / Cursor included weekly usage.
Not a coder? Start with docs/HANDOFF.md — what is live on main vs still in an open PR, where the app lives (GitHub + Vercel + Neon), login / AUTH_SECRET / AUTH_URL pitfalls, BM Boys roster names, official Week 1 picks, and copy-paste prompts for free Grok, then free Claude, then free Gemini. That is not paid Grok Bot, Cursor desktop agents, or other expensive coding bots. You merge GitHub PRs and click through Vercel yourself.
If a chat and the handoff disagree, trust the GitHub main branch.
cd /workspace/survive-sunday/app
npm install
npx prisma db push
npm run seed
npm run dev
Open http://localhost:3000.
Or one-shot: npm run setup && npm run dev
npm install && npx prisma db push && npm run seed && npm run build
The pool is live-only. There is no Demo↔Real switch on Admin. Friends see Who are you? from the live roster, then Join (own email + password) or Sign in. Unclaimed seats still use practice @survivesunday.demo emails for Join claiming — that is seat claiming, not a Demo mode.
First real administrator login: Sign in as Gams (Player + Administrator). Switch Admin tools from Account.
Week 1 is the current board week. Week 2 stays on the schedule. Playbook: docs/REAL-MODE.md.
Legal names live in the database (Admin → Players), not in this repo. Sample files use placeholders such as Alex Player.
SUNDAY26@survivesunday.demo address until claimed. That is not a Demo-mode picker.Friends stay signed in on their phone / Home Screen app. We do not ask for a code at every login.
If they forget the password: Sign in → Forgot password → 6-digit code by email (check inbox and spam/junk; optional SMS if a cell is saved) → new password → signed back in.
@survivesunday.demo addresses cannot use Forgot password. Claim the seat, or ask the administrator to set a password. There is no demo sign-in route.RESEND_API_KEY and RESEND_FROM_EMAIL (see DEPLOY.md §3b). Optional Twilio for texts.data/week1-slate.json (real 2026 slate + final scores where present)one_loss; second loss → eliminated/help from HELP-COPY (+ importing prior picks); footer disclaimerpublic/helmets/. Every feed abbreviation (WSH, LA, JAC, …) maps to its file through src/lib/team-abbr.ts; see public/helmets/README.mdnpm run seedWeek 1 may already be in progress. As [email protected]:
nickname,team)public/examples/week1-picks-import.csvsource: imported, audited, visible post-lock, and auto-graded if games are finalWave 1 Pool QA (critical):
ensureWeekLockedEffects(weekId) runs on pool, picks API, standings, scores, and import. When now >= lockAt (or week is locked/graded), it applies missed-pick losses once and auto-grades FINAL games.source: missed pick (teamAbbr: MISS) + week.missedPicksAppliedAt. Lock now then Force grade will not double-loss. role === "admin" (Administrator) is skipped.src/app/not-found.tsx, error.tsx, global-error.tsx, and (app)/error.tsx so a reload on /admin or /help no longer 404/500 with “missing required error components”.AUTH_URL=http://localhost:3000, AUTH_TRUST_HOST=true, trustHost: true, Secure cookies only on https. A practice administrator keeps admin membership for /admin and /admin/import until a real administrator login exists. There is no separate demo sign-in route.
8b. Tunnel login Host — middleware forwards a public Host (e.g. *.trycloudflare.com) as x-forwarded-host / x-forwarded-proto. Auth callbacks.redirect and the auth route rewrite any https://localhost:3000 Location to the request Host. Client afterAuthNavigate always uses a relative signed-in path (/pick).signOuts first, await getSession() before navigate, then hard-loads /pick. Authenticated routes are force-dynamic + revalidate = 0; BottomNav prefetch is off; SW is network-only for HTML/RSC. remounts on user id (, ).Server identity check: node scripts/verify-session-identity.mjs
Copy .env.example → .env. Defaults use SQLite file:./dev.db.
AUTH_URL=http://localhost:3000
AUTH_TRUST_HOST=true
AUTH_TRUST_HOST=true + trustHost: true in src/lib/auth.ts make Auth.js
use the incoming Host / x-forwarded-host / x-forwarded-proto instead of
pinning AUTH_URL. Middleware copies a non-localhost Host onto
x-forwarded-host so a Cloudflare quick tunnel
(https://*.trycloudflare.com) and http://localhost:3000 share one
npm run dev. Auth redirects that still resolve to localhost are rewritten
to the request Host. Session cookies are Secure only on https; names stay
authjs.* (no __Secure- / __Host- prefix) so a localhost login still
works after a tunnel visit.
To pin a single origin (OAuth callback, tunnel-only):
AUTH_URL=https://great-sloths-fetch.loca.lt
AUTH_TRUST_HOST=false
Scores (live): ESPN’s public NFL scoreboard JSON (site.web.api.espn.com, fallback site.api.espn.com). No API key. /scores, Home, Pick, and Schedule sync on load and poll about every 45s during a live kickoff window. Finals auto-grade picks.
Injuries (near-live): same ESPN public injury report JSON. Cached ~12 minutes. Team pages list Out / Doubtful / Questionable / IR / suspension. Pick / Home / Schedule show compact Out·Doubtful·Q chips. This is not the official NFL club report and has no SLA — ESPN’s undocumented endpoints can 403 or change. data/sample_injury_news.json is schema-only and is not shown in the UI.
Not live: spreads/odds stay seeded; no paid SportsDataIO / API-Sports key is required for Hobby.
See DEPLOY.md and data/data_sources.json.
Seed JSON lives in /workspace/survive-sunday/data/ (symlinked as ./data).
For entertainment among friends. Not a gambling service. Not affiliated with or endorsed by the NFL. Team names and logos are trademarks of their owners.
SessionProviderrefetchOnWindowFocusrefetchInterval={60}PickClient.