OpenAthlete
AGPLv3 endurance training platform: EU-oriented hosting, transparent CTL/ATL/TSB logic in code, self-hosting, and full export. Built in Grenoble.
Medal tally of the 20th Asian Games (Aichi-Nagoya 2026) through India's eyes.
Translation pending
Sports & fitnessTypeScript · CSSGitHub @iiabhiOnlineOwner 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
Loading the full README. The saved excerpt is shown below.
🇮🇳 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:Read the full 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! 🇮🇳