BikeControl (SwiftControl)
Use Zwift Click, Zwift Play, Shimano Di2, or any Bluetooth controller with MyWhoosh, Rouvy, Zwift, and more. Free to try on iOS, Android, Windows, and macOS.
Revamped Dynasty League — standings, power rankings, trade values, and history.
Translation pending
Sports & fitnessTypeScript · JavaScriptGitHub @connordolan14OnlineOwner 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
Revamped Dynasty League site + weekly automation
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
A fast, mobile-first site for the Revamped Dynasty League and a daily job that
refreshes it (plus a weekly emailed write-up). No database, $0 to run. Data
is computed from the public Sleeper API + FantasyCalc by a scheduled GitHub
Action, written to a JSON file, and served as a static site on Vercel. The site
also pulls live rosters + transactions straight from Sleeper on each visit and
layers them over that snapshot.Read the full README ↗A fast, mobile-first site for the Revamped Dynasty League and a daily job that refreshes it (plus a weekly emailed write-up). No database, $0 to run. Data is computed from the public Sleeper API + FantasyCalc by a scheduled GitHub Action, written to a JSON file, and served as a static site on Vercel. The site also pulls live rosters + transactions straight from Sleeper on each visit and layers them over that snapshot.
src/core/ Portable engine (half-win standings, 6-factor power model) — validated vs 2025
src/pipeline/ buildLive (Sleeper+FantasyCalc → bundle.json), writeup, email
src/data/ League identity + 2025 fixtures
data/power-rankings/ Append-only weekly power-ranking snapshots
web/ The static site (index.html, styles.css, app.js) + web/data/bundle.json
scripts/ validate2025, buildBundle (offline), render images, screenshots
.github/workflows/ weekly.yml — daily data refresh (+ Tuesday write-up email)
The half-win logic and power model are unit-validated against the 2025 sheet:
npm run validate → 50/50 checks pass (exact top-6 half-win totals, OVW,
avg PF, season totals; sample-stdev deviation).
Create a new private repo and push this folder to it (any name, e.g.
revamped-league).
npm run build. Output directory: dist.*.vercel.app URL — the site is live.revampedleague.com and
www.revampedleague.com. Vercel will show the exact records.A record, name @ → 76.76.21.21CNAME, name www → cname.vercel-dns.comThe workflow .github/workflows/weekly.yml runs daily at 12:00 UTC (7–8 AM
ET) and can be run anytime from the repo's Actions tab (“Run workflow”).
It: pulls fresh data → sanity-checks it → commits web/data/bundle.json → tells
Vercel to redeploy. The Tuesday run additionally renders the standings/power
PNGs and emails you the write-up (or tick send_email on a manual run).
Deploy trigger: if Vercel's Git integration reliably redeploys on push, no
setup is needed. If it doesn't (a known flake on private repos), create a
Deploy Hook in Vercel → Project → Settings → Git → Deploy Hooks (branch
main) and paste the URL into the repo as secret VERCEL_DEPLOY_HOOK. The job
POSTs it after every data change; without the secret it just relies on Git.
RESEND_API_KEY = your keyEMAIL_TO = your email[email protected] can email your own
account email with no domain setup. To send from your own address (or to the
group), verify a domain in Resend and set repo variable EMAIL_FROM
(e.g. Revamped League <[email protected]>).Optional repo variable LEAGUE_ID overrides the default league id (already
set to yours).
npm ci
npm run validate # engine checks vs 2025
npm run build:live # pull live data → web/data/bundle.json (needs internet)
npm run build:bundle # OR rebuild the offline preview bundle from fixtures
npm run build # assemble the deployable static site in dist/
npm run smoke # open every route in a local browser smoke test
npm run check # lint, type-check, test, validate, build, and smoke
npm run standalone # → web/standalone.html (single self-contained file)
npm run shots # screenshot every page (desktop + mobile) into shots/
npx serve web # preview the site at localhost
GitHub Action (daily) ─► buildLive: Sleeper + FantasyCalc ─► core engine
─► web/data/bundle.json ─► git commit ─► Vercel deploy hook redeploys
(Tuesday only) ─► render standings/power PNGs ─► Resend emails the write-up
Each page load ─► app.js fetches Sleeper /users, /rosters, /transactions
─► patches team names, "Moves" counts, and the Recent-activity feed live
web/app.js
(pageRules) marked for your input.