⚔️

RIFTBOUND

Restricted Access

⚔️RIFTBOUND
GNL: Vendetta — Event Day

Declare Vendettas, record live results, or process a past event

Upload today's check-in / pairings CSV. Each attending player gets declared a Vendetta — their best available rival from the saved season Gist — even if that exact rival isn't here today.

☁ Season Rivalry Data
⬆ Today's Attendance / Pairings File
📄

Drop today's CSV here or browse

Same export format as your tournament platform

🌙 Post-Event Processing

Couldn't be at the event? Process the whole thing afterwards. Upload every round's results CSV at once (Swiss rounds and Top Cut together — tag each file below). Scoring uses the Vendetta list declared before the event; if none was declared, one is generated retroactively from attendance — including random New Blood pairs — so nobody misses out on points. Each round scores exactly like the live flow, and every match is merged into season head-to-head.

🌙

Drop ALL round results CSVs here or browse

One file per round / bracket — same export format as your tournament platform

Settings

Configure Gist sync — your token is stored locally on this device only

🏙️ Active City

Each city has its own data, Gist, and passwords. Log out and use the other city's passphrase to switch.

🔒 Passwords

Saved to this city's Gist — applies only to the active city.

🔑 GitHub Gist Token

Paste your GitHub Personal Access Token with gist scope. It is saved only in this browser's localStorage — never sent to GitHub inside the HTML file.

☁ Gist Info
City:
Gist ID:
File:
Data syncs automatically on every change.
⚖️ Judges Gist

The judge roster and service record live in their own Gist, shared across both cities — judges work Abu Dhabi and Dubai, so they carry one rank. Leave this blank to use the built-in default.

💾 Backup & Restore

Download a local backup of your Gist data, or restore from a previous backup file.

TCG Raffle

In-event pack raffle — door prize + round-by-round draws

Infractions

Record warnings and penalties tied to players and events

⚠ Issue Infraction

No infractions recorded
Swiss Tournament

Run a Swiss-format tournament with OMW tiebreakers

Players
No players added yet
Rounds
4
Total Rounds
Info
Players
0
Rounds
4
Has Bye
No
Max Pts
-
Round 1
Pairings
Standings
#PlayerPtsW-L-DOMW%
🏆
Tournament Complete
Final Standings
#PlayerPtsW-L-DOMW%
More Tools

Additional tools will appear here over time

🔮

Coming soon…

Rivalry Analyzer

Upload historical round CSVs to generate rivalry pairings from real match data

⬆ Tournament Files
📄

Drop CSVs here or browse

Player A · Player B · Wins A · Wins B

⚖ Score Weights
Meetings (frequency) 70%
Close matches (2-1) 20%
Win swing 10%
⚔️
Upload past tournament CSVs to generate rivalry scores from real match history
GNL Top 16

GSL group stage into single-elimination playoffs — the season's championship bracket

GNL Knockout

Blind-draw single elimination down to a Top 8, then double elimination for the finish

Player Stats

Season records for every player, computed from the saved head-to-head data

Judges

Certification level and service rank for the judge team

🏅 Scorecard
📋 Log a Shift

Two independent measures. Level is certification — what a judge is qualified to run. Rank is service — how often they have actually turned up. A Level 1 who works every week outranks a Level 3 who rarely does.
Rank follows one number, total shifts served, and only ever rises.

📈 The ladder

Pick a night, say what it was, tick everyone who worked it. New judges are created here and nowhere else — the only way onto the roster is to work an event.
Entries queue locally and write to the judges Gist in one go; nothing reaches GitHub until you press Save.

MTWTFSS
Date
Event type
City
Judges who served
Note — optional
⏳ Pending — 0 to write

Review the batch, then one write. A rejected write leaves the queue intact so you can retry.