UCG Routine Planner
UCG WAG, MAG, T&T 루틴을 계획하고 시작값을 계산해 완성된 UCG 워크시트와 대회 카드를 내보냅니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
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.