supabase.co. In the request headers, find authorization — copy everything after Bearer (the long JWT string starting with eyJ).
upbcarvmkmyzhbosheyo.supabase.co.
PurpleFox JWTs expire after 1 hour. The exporter shows a warning badge on this tab when expiry is under 10 minutes. To refresh: reload the tournament page in your browser, open DevTools Network, click any supabase.co request, copy the authorization header value (minus Bearer ), and paste it here.
Query any table directly. Useful for discovering the schema if automatic fetching is incomplete.
Hits /rest/v1/ to discover every table name exposed by PostgREST. Uses your stored JWT if one is set (required for this Supabase instance).
Check which tables exist and are accessible with your current token.
| Endpoint | Method | Auth | Description |
|---|---|---|---|
| /api/login | POST | none | Authenticate — returns Bearer token stored in localStorage |
| /api/logout | GET | Bearer | Invalidate current session token |
| /api/me | GET | Bearer | Return current username and is_admin flag |
| /api/sync?tournamentId= | GET | Bearer + JWT | Fetch all Supabase + carde data, upsert SQLite, return full dataset |
| /api/logs?tournamentId= | GET | Bearer | Read accumulated SQLite data without hitting any external API |
| /api/backfill[?tournamentId=] | GET | Bearer | Re-fetch carde round data for all (or one) tournament(s) and fill missing timing fields |
| /api/tournaments | GET | Bearer | List configured tournaments with their ended status |
| /api/end-tournament?tournamentId= | GET | Bearer | Mark tournament as ended — stops auto-refresh |
| /api/set-token | POST | Bearer | Store a PurpleFox Supabase JWT in server memory |
| /api/token-status | GET | Bearer | Check stored PF JWT validity and expiry |
| /proxy?url= | GET | Bearer + JWT | Authenticated proxy to PurpleFox Supabase (restricted to upbcarvmkmyzhbosheyo.supabase.co) |
Re-fetches carde.io round data for both tournaments and fills in any missing timer_end_datetime, started_at, and extra_time_seconds values. No token required.
This tool gives tournament staff a live, searchable view of all PurpleFox event data — drops, time extensions, penalties, judge activity, and round timing — pulled from PurpleFox and carde.io and stored locally so nothing is lost between sessions.
Enter your username and password at the sign-in prompt. Sessions last 7 days — you stay logged in across page reloads. Click Logout in the top-right to end your session manually.
admin
full access — all tabs including Data and admin sections
hj
standard access — all tabs except Data
Main feed of all recorded events grouped by round — drops, time extensions, judge seats, table results, penalties. Most recent round first.
Round-by-round breakdown: timer (start → time-called → completed), how many tables had extensions, outstanding tables at time-called, drops, and penalty types. Click any round header to expand.
Penalty-focused view across the entire event. Flags players with multiple penalties, shows a breakdown by type (Slow Play, Late to Match, etc.), and lists every penalty with player, round, type, sanction, and issuing judge.
Paste your PurpleFox JWT token here to enable live syncing. Without a token the app shows cached data only.
eyJ → copy and paste it here. Tokens expire after about an hour.
Query the PurpleFox Supabase database directly. Requires a token. Useful for exploring what data is available or diagnosing sync issues. Not needed during normal event operation.
Documents every local database table, its columns, and where the data comes from. Also lists all server API endpoints and a backfill button to re-pull round timing from carde.io.
action_logs.db — data loads only when you expand a table.