World Cup 2026 Picks

Loading deadline

Log In

Sign in to manage your World Cup picks.

Reports

Live Bracket

Predictions

Admin

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 Spec

Login

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=1 to 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 admin and 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.

Version History