UCG Routine Planner
Plan UCG WAG, MAG and T&T routines, calculate start values, and export filled-in UCG worksheets and competition cards.
Translation pending
Personal DUPR pickleball tracker — filters, splits, rating history & tags (installable PWA)
Translation pending
Sports & fitnessHTML · JavaScriptGitHub @kyeillOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗A personal, installable web app (PWA) for Kyle's DUPR pickleball history. Three tabs:
All filterable by year, type, level, event and partner. All from your real DUPR record.
Live app: https://kyeill.github.io/pickleball/
DUPR (your browser) ──🔄 Sync bookmark──▶ data/data.json ──┐
├──▶ index.html (the PWA) ──▶ your browser
your cleanup edits ──▶ data/overrides.json ──┘
data/data.json — your matches + ratings, pulled from DUPR. Updated by the
🔄 Sync bookmark. This is the only file that changes when you refresh.data/overrides.json — your edits: event renames, event types, levels and hidden
partners. Committed to the repo so they follow you to every device and survive every sync.data/players.json — a dated rating for every player you have faced, one point per sync,
going back to 2026-09-02. Feeds the Players tab.data/watchlist.json — who appears on the Players tab, in two groups.index.html — the whole app. Static; loads those files. No build step.DUPR's API only answers requests made from dashboard.dupr.com with your login cookie, so the sync runs there, as a bookmark, and hands the data to the app, which saves it to the repo.
main / root). Live at
https://kyeill.github.io/pickleball/.Sync whenever you've played. It runs in your own browser while you're logged in to DUPR, so no DUPR token or password is stored anywhere.
data/data.json to GitHub, and opens the updated app. Other devices see it ~1 minute later.If DUPR returns fewer matches than you already have, nothing is saved (a guard against DUPR changing its data format). Pop-up blocked? Allow pop-ups for dashboard.dupr.com.
Why not automatic? Until 2026-09 a GitHub Action refreshed daily with a copied DUPR token. DUPR then moved its API to
api.dupr.com, switched to an httpOnlydupr_atcookie, and started rejecting copied tokens from anywhere but your browser, so the Action was retired.
In the app: expand Filters → ⚙ Clean up data. There you can:
These edits live in your browser as you work. To make them permanent and cross-device, save them to the repo — one click, once you've connected GitHub:
kyeillpickleballThe token is stored only in your browser (localStorage) and is sent only to GitHub's API to save this one file — never to the app's host, never into the repo, never to anyone else. Because it's fine-grained and scoped to just this repo's Contents, the worst it can do is edit this repo. Disconnect removes it from the browser.
Clean up → Save / sync → 💾 Save to GitHub. It commits data/overrides.json and the live
site refreshes in ~a minute. Do the same on any device once it's connected.
(The manual ⤓ Export file / ⤒ Import buttons still exist as a no-token fallback and for moving edits between browsers.)
| Path | What it is |
|---|---|
index.html | The PWA (app shell + all logic). Static, no build. |
data/data.json | Matches + ratings, pulled from DUPR. |
data/overrides.json | Your event renames, types, levels and hidden partners. |
data/players.json | Dated ratings for everyone you have played. |
data/watchlist.json | Who shows on the Players tab. |
sync.js | What the Sync bookmark loads; generated — do not edit by hand. |
tools/sync_bookmarklet.js | Sync source. Run python tools/build_bookmarklet.py after editing. |
tools/backfill_players.py | One-off: rebuilt players.json from the committed data history. |
manifest.webmanifest, sw.js, icons/ | PWA install + offline. |
Win% + 25·Pts% + 50·(oppDUPR − teamDUPR) — last term is strength of schedule (positive = tougher opponents), it follows the at-time/now toggle.