BikeControl (SwiftControl)
使用 Zwift Click、Zwift Play、Shimano Di2,或任何藍牙控制器搭配 MyWhoosh、Rouvy、Zwift 等。可於 iOS、Android、Windows 與 macOS 免費試用。
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
🇮🇳 Chak De India — Asian Games 2026
Follow the Asian Games through India's eyes: the medal table, what's still to come, and the news that matters, all in one place.
Most medal tables treat India like any other country, and the news is scattered across a dozen sites. This page is made for supporters. India is always highlighted, you can see which medals are still possible today and tomorrow, and the latest India headlines sit right next to the tally.
It answers the questions Indian fans actually ask during the Games:檢視完整 README ↗Follow the Asian Games through India's eyes: the medal table, what's still to come, and the news that matters, all in one place.
Most medal tables treat India like any other country, and the news is scattered across a dozen sites. This page is made for supporters. India is always highlighted, you can see which medals are still possible today and tomorrow, and the latest India headlines sit right next to the tally.
It answers the questions Indian fans actually ask during the Games:
The first thing visitors see: a cheering hero, days left, India's medals today and a one-tap link to the forecast.
India is always highlighted and pinned above the table. Open any country to see its medals by sport, athlete and date.
Every event where India can still win a medal, rated High, Medium or Long shot, with a short reason.
India stories first, plus a tab for the rest of the Games.
Built to work on a phone, since that's where most people follow the Games.
The forecast is the heart of the site. It looks at the events India is still in and tells you what to watch.
How to use it
What the ratings mean
Each card explains the call in a sentence or two. The reasons are written by an AI, and it never adds events or athletes of its own. It only works from the schedule we give it. It's for fun, not an official prediction, and the page says so.
The site updates itself every 20 minutes or so, so you don't need to refresh the data. Medals and news come from public sources, and if a source is down, the last good data stays on screen, so the page never goes blank.
Keep in mind that it can trail the live results a little: Wikipedia editors and news sites take time to update, so expect a delay of up to an hour on busy days. The "Last updated" time in the footer shows when the data was last fetched.
You need Node.js 22 or newer.
git clone https://github.com/iiabhi/asian-games-forecast-generator.git
cd asian-games-forecast-generator
npm install
cp .env.example .env.local # then fill it in (see below)
npm run dev # opens at http://localhost:3000
In .env.local you'll need:
| Setting | What it is |
|---|---|
WIKI_USER_AGENT | A short label with your email, e.g. ChakDeIndiaTracker/1.0 ([email protected]). Wikipedia asks for this. |
LLM_API_KEY | A free Gemini API key from Google AI Studio, used for the forecast. |
REFRESH_TOKEN | Any long random password, only needed to trigger refreshes by hand. |
.env.local is never uploaded to GitHub.
Update the forecast
data/india-remaining.json (event, date in Japan time, who's competing, stage)."result": { "medal": "silver" }. Use gold, silver, bronze or none.npm run refresh:forecast.Other useful commands
npm run refresh # fetch the latest medals and news now
npm test # run the checks
Next.js 15 (App Router), TypeScript, Tailwind CSS, zod for validation, Google Gemini for the forecast text.
| Data | Source | Command | Saved to |
|---|---|---|---|
| Medal table and India's medalists | Wikipedia API | npm run refresh:medals | data/medals.json |
| News | Google News RSS (India and global editions) | npm run refresh:news | data/news.json |
| Forecast | Gemini, fed by data/india-remaining.json | npm run refresh:forecast (-- --dry previews the prompt) | data/forecast.json |
Everything is checked before it's saved, and written safely, so a failed fetch or a bad AI reply never overwrites good data. Gemini only judges the likelihood, the medal and a short reason for each event. The event names, athletes and dates always come from your schedule file, and code enforces the rules, such as dropping past events and only allowing "High" when a medal is guaranteed.
Vercel's disk is read-only and it can't keep a timer running, so on Vercel the data is stored in Vercel Blob and a scheduled job calls /api/refresh.
WIKI_USER_AGENT, REFRESH_TOKEN and LLM_API_KEY..github/workflows/refresh.yml). Add two repository secrets: REFRESH_TOKEN (same value as on Vercel) and SITE_URL (your site address, no trailing slash).data/india-remaining.json, push (Vercel redeploys with the new schedule), then run curl -H "Authorization: Bearer $REFRESH_TOKEN" "$SITE_URL/api/refresh?only=forecast". The forecast is not part of the 20-minute refresh because it uses the Gemini quota.Locally, npm run dev also refreshes by itself every AUTO_REFRESH_MINUTES (default 20; 0 turns it off).
app/ pages (home, forecast, news) and /api/refresh
components/ leaderboard, rows, India tag, forecast and news cards
lib/ data access, ranking, validation, and the refresh code
data/ the JSON files the site reads
prompts/forecast.md the forecast prompt
scripts/ refresh commands and tests
Jai Hind! 🇮🇳