尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證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.