OpenAthlete
AGPLv3 endurance training platform: EU-oriented hosting, transparent CTL/ATL/TSB logic in code, self-hosting, and full export. Built in Grenoble.
Every Fantasy Premier League player's price, ownership and price changes in one sortable table, plus an AI assistant and FPL tools for transfers, chips and mini-leagues. No fluff.
Sports & fitnessTypeScript · CSSGitHub @ThomasgreaneyOnlineOwner 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
Quick and easy fpl helper
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
A blunt, no-fluff Fantasy Premier League price tracker. Every player's price,
ownership, and price movement in one sortable, filterable table — plus a
risers/fallers section so you know who's actually worth transferring in
before the price ticks up again.
Data comes straight from the official FPL API — bootstrap-static for
players/teams and fixtures for upcoming fixture difficulty. No account, no
API key needed — both are public endpoints. Player photos come from the
official FPL image CDN (resources.premierleague.com); if a photo 404s the
UI falls back to a plain initials avatar.Read the full README ↗A blunt, no-fluff Fantasy Premier League price tracker. Every player's price, ownership, and price movement in one sortable, filterable table — plus a risers/fallers section so you know who's actually worth transferring in before the price ticks up again.
Data comes straight from the official FPL API — bootstrap-static for
players/teams and fixtures for upcoming fixture difficulty. No account, no
API key needed — both are public endpoints. Player photos come from the
official FPL image CDN (resources.premierleague.com); if a photo 404s the
UI falls back to a plain initials avatar.
data/history.json, so the site can
report price moves it has actually witnessed (and power the sparklines),
not just what the FPL API itself reports.npm install
npm run dev
Open http://localhost:3000.
npm run refresh
This fetches the current FPL data, writes data/latest.json, and appends a
snapshot to data/history.json. In production this runs automatically —
see below.
.github/workflows/refresh-data.yml runs npm run refresh every 3 hours
via GitHub Actions. If any player's price has changed since the last
snapshot, it commits the updated data/ files back to the repository. Since
Vercel auto-deploys on every push, this also keeps the live site's build-time
data fresh.
You can also trigger it manually from the Actions tab (workflow_dispatch)
if you want a snapshot right now.
Snapshot history is capped at 240 entries (roughly a month at the default
3-hour cadence) so data/history.json doesn't grow without bound.
refresh-data.yml already
requests contents: write permission, which is enabled by default for
most repos.No environment variables are required. FPL_BOOTSTRAP_URL and
FPL_FIXTURES_URL can be set to override the FPL API URLs (useful for
testing against a mock endpoint).
app/
page.tsx Home page — fetches live data, renders everything
api/players/route.ts JSON API exposing the same player data
api/player-history/[id]/route.ts One player's price history (for sparklines)
lib/
fpl-types.ts Shared types for the FPL API + our normalized data
normalize.ts Raw FPL payload -> normalized Player[]
live.ts Live fetch from the FPL API (players + fixtures, 5 min cache)
fixtures.ts Builds each team's next-3-fixtures difficulty run
history.ts Reads our own committed price-snapshot history
copy.ts Blunt one-liners for the risers/fallers cards
components/
TopPlayers.tsx Top 15 sortable table with sparklines
RisersFallers.tsx Recent price movers
PlayerLookup.tsx Search-any-player section
SquadBuilder.tsx My team: pitch view / list view squad builder
PlayerAutocomplete.tsx Shared search input used by the above
PlayerDetailCard.tsx Shared player summary card (photo, price, sparkline)
PlayerPhoto.tsx Player photo with initials fallback
FixtureChips.tsx Small difficulty-coloured fixture chips
Sparkline.tsx Inline SVG price sparkline
scripts/
fetch-snapshot.ts Snapshot job run by the scheduled workflow
data/
history.json Committed price history (bounded, pruned)
.github/workflows/
refresh-data.yml Scheduled price snapshot job
ci.yml Lint + build on push/PR
Not affiliated with the Premier League or Fantasy Premier League.