OpenAthlete
AGPLv3 endurance training platform: EU-oriented hosting, transparent CTL/ATL/TSB logic in code, self-hosting, and full export. Built in Grenoble.
Road, gravel, MTB, cyclocross and kids' races across Central Europe. Plan the season for yourself, your family or your team.
Sports & fitnessTypeScript · HTMLGitHub @tobolkaOnlineOwner 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
Map-first cycling race finder for Central Europe
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Map-first cycling race finder for kids and adults across Central Europe (CZ, DE, AT, SK, PL, IT, FR). Road, gravel, XC, XCM, and more — not just mountain bike.
• Next.js (App Router) + TypeScript
• Supabase (Postgres + PostGIS)
• MapLibre GL + OpenFreeMap
• Watcher with layered extraction (JSON-LD → host adapters → generic)
• Admin for sources, discovery queue, manual event create/edit with field locksRead the full README ↗Map-first cycling race finder for kids and adults across Central Europe (CZ, DE, AT, SK, PL, IT, FR). Road, gravel, XC, XCM, and more — not just mountain bike.
public/maps/light-v1).env.example → .env.local (a working .env.local is already prepared for the letsrace Supabase project).ADMIN_PASSWORD and ADMIN_SESSION_SECRET (both required — no defaults).SUPABASE_SERVICE_ROLE_KEY from Supabase → Project Settings → API.npm install
npm run dev
/api/cron/watch twice daily (05:00 & 17:00 UTC)GET/POST /api/cron/watch with Authorization: Bearer $CRON_SECRET
Polls due watched_urls, hashes content, extracts events, discovers child links, respects locked overrides. Cron runs twice daily (05:00 and 17:00 UTC) on the Hobby plan.
en (default), cs, pl, sk — race names stay in the original language.