World Cup 2026 Picks
Loading deadline
Log In
Sign in to manage your World Cup picks.
Reports
Live Bracket
Predictions
Admin
Admin Log In
Use username admin and the admin key from the server environment.
Deployment
Check GitHub for a newer version and deploy it to this server. The app backs up the database, fast-forwards the code, checks the build, restarts, and rolls back automatically if the new build fails to come up.
SMTP Test
Third-Place Reminders
Simulated Now (Testing)
Overrides what the app treats as "now" — affects Today's Games, deadline lock, and official-result date checks. Resets when the server restarts. Jumping to a future date can also make current sessions look expired (session TTLs use simulated time too) — re-login if that happens.
API Spec
Open Full SpecLogin
POST /api/accounts- Creates a password-protected draft account without submitting picks.
POST /api/entry/check- Checks whether an email already has an entry before starting a new bracket.
POST /api/entry/auth- Unlocks an existing entry using email and password. After the lock, the entry opens read-only.
POST /api/entries- Saves either a partial draft or final submitted bracket for the one entry tied to an email. Password can be omitted when the session cookie already owns that email.
POST /api/password-reset/request- Sends a reset link to the email when an entry exists. The response does not reveal whether it exists.
POST /api/password-reset/confirm- Sets a new password using the emailed reset token.
Session
POST /api/session/logout- Deletes the current session token and expires the login cookie.
GET /api/session- Requires a valid session cookie. Restores the current entry after refresh without asking for the password again.
GET /api/config- Requires login. Returns tournament deadline, app version, scoring bonuses, feed URL, rounds, matches, teams, and source relationships.
GET /api/reports- Requires login. Returns official standings, live provisional standings, live match summaries, submitted picks, draft summaries, third-place matchup and pick scoring, score breakdowns with possible remaining and max possible totals, cached live/feed matches, results, and feed status. Raw emails are omitted.
GET /api/predictions- Requires login. Returns cached betting-market favorites, pool consensus picks, actual winners, entrant bracket profiles, expected-points timeline by completed result, and aggregate favorite-vs-consensus accuracy. Raw emails are omitted. Add
?refresh=1to refresh feed, event IDs, and odds first. GET /api/third-place- Requires login. Returns the user's third-place matchup from their semifinal picks before actual results exist, or from actual/feed semifinal losers once known, plus the user's locked pick if already saved.
POST /api/third-place- Requires login. Saves winner, score, and penalties for the user's derived third-place matchup, then locks that pick immediately.
GET /api/standings- Requires login. Returns the standings portion of reports.
GET /api/results- Requires login. Returns cached result rows.
Admin
GET /api/admin/session- Checks the current admin session cookie used by
/admin. POST /api/admin/session/login- Requires username
adminand the configured admin key as password. Sets an HttpOnly admin session cookie. POST /api/admin/session/logout- Clears the current admin session cookie.
POST /api/results/sync- Requires admin key. Fetches the configured base feed, overlays live scores, updates feed-backed final results, and recalculates scores.
POST /api/results- Requires admin key. Saves manual result overrides. Manual results take precedence over feed results.
POST /api/admin/smtp/test- Requires admin key. Sends a test email through the configured SMTP sender.
GET /api/admin/third-place-reminders- Requires admin key. Returns submitted entries still missing a locked third-place pick, reminder history, SMTP readiness, and third-place matchup state.
POST /api/admin/third-place-reminders/send- Requires admin key. Sends third-place reminder emails to pending submitted entries and records send status.
GET /api/admin/activity- Requires admin key. Returns paginated login session history (
page/per_page, default 10 per page) and recent process-local connections for the admin panel. GET /api/admin/entries- Requires admin key. Returns full entries with emails.
GET /api/admin/entries.csv- Requires admin key. Downloads full entries and score columns as CSV.