Search teams or players, view game tables and news
Translation pending
AI summary · website content
Sports & fitnessJavaScript · CSSGitHub @PHI34HalladayOnlineOwner 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
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Browser-App, die Spielstände, Tabellen und News aus der öffentlichen ESPN-API anzeigt. Gehostet auf Vercel, Code auf GitHub – ohne Build-Schritt, ohne Abhängigkeiten.
logo: 'logos/datei.png' im LEAGUES-Eintrag). Jede Liga hat eine Akzentfarbe; die zuletzt gewählte Liga je Sportart wird gemerkt.currentGameTime (Sekunden im aktuellen Drittel) und modus (Drittel-/Verlängerungslänge, z. B. 20-20-20-OT5-PSO): Länge der abgeschlossenen Drittel + volle Minuten im laufenden Drittel, nie über das Drittelende hinaus; Verlängerung zählt ab 61'; beim Penaltyschießen entfällt die Minute (api/_hockeyapp.js, liveMinute). Aktualisierung alle 30 s./api/live, jede Minute aktualisiert, ESPN-Ligen).ger.dfb_pokal ganz hinten unter Fußball (Gruppe „Pokal“, eigenes Logo logos/dfbpokal.png). Als K.-o.-Wettbewerb hat er keinen Tab „Tabelle“ (cup: true im LEAGUES-Eintrag). ESPN liefert für Pokale (DFB-Pokal, Champions/Europa/Conference League) keine Tagesliste, sondern Runden mit Zeitraum, und lehnt Datumsbereiche bei Fußball mit 400 ab. Der Proxy (api/espn.js) zerlegt deshalb Bereiche bis 14 Tage selbst in Einzeltage und meldet die Tage mit Spielen (days); die App holt die Spieltage wochenweise nach – daraus entstehen Tagesnavigation (‹ › springen nur zu Tagen mit Spiel), Kalenderpunkte und „Heute“-Markierung./api/logo, im Browser gespeichert). Live-Spiele pulsieren rot, Favoriten-Spiele haben einen goldenen Rahmen. Vor Spielbeginn zeigt jede Karte oben mittig einen minutengenauen Countdown bis zum Anpfiff (z. B. „1 Tag 23 Stunden 15 Minuten“, Einheiten mit 0 entfallen; bei Beginn verschwindet er)./ oder Strg+K): findet Ligen, Teams aller Ligen (ESPN-Teamlisten, Kreisliga- und Hockeyweb-Tabellen) und Spieler über die ESPN-Suche. Teams lassen sich direkt in der Trefferliste per ★ favorisieren; Auswahl öffnet das Team- bzw. Spielerprofil (Kreisliga/Eishockey: Tabelle mit hervorgehobenem Team).…/?sync=CODE öffnen oder Code eingeben. Bestehende Favoriten beider Geräte werden zusammengeführt; danach gewinnt je Team/Spiel die neueste Änderung (auch Löschungen werden übertragen). Abgleich beim Start, bei jeder Änderung, beim Zurückkehren zur Seite und alle 2 Minuten. Grüner Punkt = Sync aktiv, rot = Fehler. Gespeichert in Vercel Blob (api/sync.js, Store „sport-dashboard-sync“, Umgebungsvariable BLOB_READ_WRITE_TOKEN) unter dem SHA-256-Hash des Codes – der Code selbst wird nirgends gespeichert./api/translate: mit DeepL, sobald die Umgebungsvariable DEEPL_API_KEY gesetzt ist (kostenloser Schlüssel „DeepL API Free“), sonst mit dem Übersetzer des Browsers (Chrome, falls Sprachpaket vorhanden) bzw. dem kostenlosen Dienst MyMemory (Tageslimit). Übersetzungen werden im Browser zwischengespeichert.teams/{id}, …/roster, …/schedule, …/statistics, news?team=, standings (Proxy api/espn.js).athletes/{id}, …/overview, …/gamelog, …/bio (Proxy api/espn.js).espn-dashboard/
├── index.html Seitengerüst
├── styles.css Design (dunkles Theme, mobil optimiert)
├── app.js Frontend-Logik
├── gamecast.js Spiel-Popup (Gamecast, Boxscore, Bericht)
├── profile.js Spieler-/Team-Popup (Profilseite, Teamfarben als Akzent)
├── logo.js Logo-Hilfe (Dark-Variante per Long-Press) + Teamfarben (TeamColor, Farbe aus Logo)
├── api/
│ ├── espn.js Vercel-Function: Proxy zur ESPN-API (CORS + Caching, inkl. Suche & Kader)
│ ├── logo.js Reicht Fussball.de-/Hockeyweb-Logos durch (für die Farberkennung)
│ ├── amateur.js Fussball.de (Kreisliga)
│ ├── amateurgame.js Fussball.de: Details für das Spiel-Popup (Kreisliga)
│ └── hockey.js Hockeyweb (Eishockey Europa)
├── vercel.json Vercel-Einstellungen
└── package.json
Der Browser ruft nie direkt ESPN auf, sondern /api/espn?type=…&sport=…&league=….
Die Function prüft die Parameter (kein offener Proxy), holt die Daten und lässt sie
von Vercel cachen (Spielstände 20 s, Tabellen/News 5 min).
Verwendete ESPN-Endpunkte:
| Typ | URL |
|---|---|
| scoreboard | site.api.espn.com/apis/site/v2/sports/{sport}/{league}/scoreboard?dates=YYYYMMDD |
| standings | site.api.espn.com/apis/v2/sports/{sport}/{league}/standings |
| news | site.api.espn.com/apis/site/v2/sports/{sport}/{league}/news |
| summary | site.api.espn.com/apis/site/v2/sports/{sport}/{league}/summary?event={id} |
| rankings | site.api.espn.com/apis/site/v2/sports/{sport}/{league}/rankings (AP Top 25 für NCAAF/NCAAM) |
| team | site.api.espn.com/apis/site/v2/sports/{sport}/{league}/teams/{id} (Team-Popup) |
| athlete | site.web.api.espn.com/apis/common/v3/sports/{sport}/{league}/athletes/{id} (Spieler-Popup) |
| schedule / statistics | site.api.espn.com/apis/site/v2/sports/{sport}/{league}/teams/{id}/schedule (bzw. /statistics) – Teamprofil |
| overview / gamelog / bio | site.web.api.espn.com/apis/common/v3/sports/{sport}/{league}/athletes/{id}/overview (bzw. /gamelog, /bio) – Spielerprofil |
| roster | site.api.espn.com/apis/site/v2/sports/{sport}/{league}/teams/{id}/roster (Kader im Team-Popup) |
| search | site.web.api.espn.com/apis/search/v2?query=… (Spieler-/Teamsuche, ligaübergreifend) |
Zwei Mannschaften der SGM FC Gündelbach/TSV Häfnerhaslach erscheinen gemeinsam als Liga „Kreisliga“ unter Fußball
(Umschalter Beide / SGM I / SGM II; in LEAGUES in app.js: teams: ['sgm1', 'sgm2']). Tab „Spiele“ funktioniert wie bei den ESPN-Ligen (Tagesansicht mit Datumsnavigation,
Sprung zum nächsten Tag mit Spielen; Team-Favoriten per ★, auch in der ★-Ansicht), Tab „Tabelle“ zeigt die Liga-Tabelle
(Platz 1 grün, Platz 2 gelb). Daten von Fussball.de: Die Tagesansicht zeigt alle Spiele der Liga (Spielpläne aller Mannschaften der Tabelle
werden zusammengeführt, 30 Min. Cache); Spiele der eigenen Mannschaft sind markiert. Vereinslogos kommen
vom Fussball.de-Logodienst (Hotlink).
api/amateur.js liest die HTML-Fragmente der Mannschaftsseite (ajax.team.table, ajax.team.matchplan,
ajax.team.prev.games) und liefert JSON; Antworten werden 15 Minuten im Edge-Netz gecacht.api/_fussballde.js enthält Mannschaftskonfiguration und Parser (npm test prüft ihn).amateurdetail.js + api/amateurgame.js): Spielort mit Kartenlink, Vergleich der Mannschaften
(Tabellenplatz, Punkte, Torverhältnis, bester Torschütze, Karten), Form der letzten fünf Spiele (S grün, U grau, N rot), Anpfiff/Abpfiff, Vor-/Spielberichte (öffnen im Lesemodus des Popups, Text über /api/amateurgame?article=) und bei gespielten Spielen der Spielverlauf (Minute, Art, Seite)
sowie ein Link zur Spielseite (der Spielverlauf ist unvollständig: Tore ohne Elfmeter stehen dort nicht lesbar). Es wird nur angezeigt, was auf Fussball.de lesbar im HTML steht; Schiedsrichter, Aufstellungen,
Spielernamen und Zwischenstände fehlen dort bzw. sind verschleiert. Die Function akzeptiert nur Spielseiten von www.fussball.de.TEAMS (api/_fussballde.js) saison, staffelId und ggf. league anpassen
(Team-ID bleibt gleich, die Staffel-ID steht im Ajax-Link der Mannschaftsseite).Das Dropdown „🏒 Eishockey“ in der Liga-Leiste enthält DEL, DEL2, Oberliga Süd, Oberliga Nord, NL (Swiss National League), ICEHL, CHL, SHL und den IIHF European Cup of Nations (bei Hockeyweb unter „Deutschland-Cup“). Aufbau wie bei den ESPN-Ligen:
Technik:
api/_hockeyapp.js, appdb.hockeyweb.de) – wie die Hockeyweb-App. Die Anfragen sind signiert; der Signierschlüssel liegt nicht im Repo, sondern in der Vercel-Umgebungsvariable HOCKEYWEB_APP_KEY (Project Settings → Environment Variables, danach neu deployen). Rundenkennungen (LEAGUES) und SEASON_ID gelten für 2026/27 und müssen zur neuen Saison angepasst werden (requests=seasons / roundsForSeason liefern die IDs).api/_hockeylogos.js; neue Vereine (Aufsteiger) fehlen dort und erscheinen ohne Logo, bis sie ergänzt werden. Fehlt die Teamfarbe, wird sie wie bei den Amateurvereinen aus dem Logo berechnet.api/hockey.js liest die HTML-Seiten von hockeyweb.de aus (api/_hockeyweb.js), falls die App-API fehlt oder scheitert (nur für die sieben ursprünglichen Ligen). Hockeyweb sperrt Server-IPs dort teils mit 403.npm test prüft Parser und Mapper.espn-dashboard) und den Inhalt dieses Ordners hochladen
(auf GitHub: Add file → Upload files, oder per git push).Danach deployt Vercel jeden Commit auf main automatisch.
npm i -g vercel
vercel dev
Dann http://localhost:3000 öffnen. (Einfaches Öffnen der index.html reicht nicht, weil die API-Function laufen muss.)
In app.js die Liste LEAGUES erweitern, z. B.:
{ id: 'por', name: 'Liga Portugal', cat: 'soccer', group: 'Topligen', sport: 'soccer', league: 'por.1', color: '#1fa463' },
{ id: 'wnba', name: 'WNBA', cat: 'basketball', group: 'Profis', sport: 'basketball', league: 'wnba', color: '#ff6f3c' },
cat bestimmt die Sportart (obere Leiste), group den Abschnitt in der Ligaleiste, color die Akzentfarbe.
Die ESPN-API ist öffentlich erreichbar, aber nicht offiziell dokumentiert. ESPN kann Struktur oder Verfügbarkeit jederzeit ändern. Die App ist ein privates Hobbyprojekt ohne Verbindung zu ESPN.