This website requires JavaScript.
8e01616327
feat: add 2026 World Cup data (Spain champions)
main
valknar and Claude Sonnet 4.6
2026-07-20 07:44:15 +02:00
0f09c3da6f
fix: remove reversed-pair exemption from knockout stale cleanup
valknar and Claude Sonnet 4.6
2026-07-11 17:24:18 +02:00
c5f30b4eaf
fix: drop provisional knockout matches where teams haven't yet advanced
valknar and Claude Sonnet 4.6
2026-07-07 18:04:53 +02:00
e3dd53c40c
fix: match Wikipedia's hyphen-free heading style for QF and SF rounds
valknar and Claude Sonnet 4.6
2026-07-05 09:35:16 +02:00
a437affd1d
fix: make squad sync opt-in to prevent OOM in scheduled runs
valknar and Claude Sonnet 4.6
2026-07-05 09:32:23 +02:00
02d977a866
fix: never delete knockout matches that already have a result during sync
valknar and Claude Sonnet 4.6
2026-07-05 09:28:57 +02:00
20c6b5545c
fix: also clean up stale knockout matches when date changes on Wikipedia
valknar and Claude Sonnet 4.6
2026-07-04 11:25:29 +02:00
36f324e53f
fix: remove duplicate a.e.t. label in compact match card
valknar and Claude Sonnet 4.6
2026-07-04 11:19:26 +02:00
a808d0726a
fix: remove stale knockout matches when bracket opponents change on Wikipedia
valknar and Claude Sonnet 4.6
2026-07-01 10:14:54 +02:00
c96c683580
feat: replace text loading messages with PageSpinner component
valknar and Claude Sonnet 4.6
2026-06-17 09:54:39 +02:00
0d415baf95
fix: exclude own goals from player goal counts and hat-trick detection
valknar and Claude Sonnet 4.6
2026-06-17 08:16:41 +02:00
1ebe4613ce
docs: rewrite README with accurate data pipeline documentation
valknar and Claude Sonnet 4.6
2026-06-16 07:50:12 +02:00
c721062560
fix: anchor scroll — double-rAF timing + scroll-mt-20 on match cards
valknar and Claude Sonnet 4.6
2026-06-16 01:52:20 +02:00
1fc9c59367
fix: sort recentMatches by UTC kickoff time, not ID
valknar and Claude Sonnet 4.6
2026-06-16 01:44:38 +02:00
7fb54683e4
fix: mark sitemap as dynamic to avoid DB query at build time
valknar and Claude Sonnet 4.6
2026-06-15 20:25:46 +02:00
a494c80a76
feat: SEO enhancements — server metadata, sitemap, robots, dynamic base URL
valknar and Claude Sonnet 4.6
2026-06-15 20:18:36 +02:00
2bd32daae1
fix: show 0-0 for live matches with no score data; exclude live from recent
valknar and Claude Sonnet 4.6
2026-06-15 20:00:07 +02:00
71e7e47aca
feat: show all groups including unplayed, add upcoming matches per group
valknar and Claude Sonnet 4.6
2026-06-15 19:47:52 +02:00
76425e7f76
fix: sort upcoming fixtures by UTC kickoff time, not venue local HH:MM
valknar and Claude Sonnet 4.6
2026-06-15 19:37:41 +02:00
015f6c2ef3
fix: derive upcoming fixture day label from computed local kickoff time
valknar and Claude Sonnet 4.6
2026-06-15 19:34:20 +02:00
47eb5092e9
fix: show proper date and local kickoff time in Upcoming Fixtures
valknar and Claude Sonnet 4.6
2026-06-15 19:28:20 +02:00
7e4bf2d07c
fix: retry failed group subpages, add rate-limit detection in scraper
valknar and Claude Sonnet 4.6
2026-06-15 18:44:54 +02:00
d37ebe201e
refactor: consolidate data/ into single root directory, fix historical player names
valknar and Claude Sonnet 4.6
2026-06-15 18:27:35 +02:00
9ce2a4e27c
fix: use full player names from title attr, preserve UTC offset in match times
valknar and Claude Sonnet 4.6
2026-06-15 18:14:53 +02:00
b141356247
refactor: replace hardcoded hex colors with theme tokens, move data/ to root
valknar and Claude Sonnet 4.6
2026-06-15 18:08:23 +02:00
187ee2e312
fix: parse Wikipedia 12h time format and sort upcoming matches with NULLS LAST
valknar and Claude Sonnet 4.6
2026-06-15 17:50:30 +02:00
42063cdfda
fix: extend group heading regex from [a-h] to [a-z] for 2026 Groups I-L
valknar and Claude Sonnet 4.6
2026-06-15 17:39:38 +02:00
61c3c3f6cf
fix: add --force flag to sync to clear 2026 data and orphaned teams
valknar and Claude Sonnet 4.6
2026-06-15 17:37:15 +02:00
b832b62f5e
fix: normalize Bosnia & Herzegovina and USA team name variants
valknar and Claude Sonnet 4.6
2026-06-15 17:33:05 +02:00
f885e4312c
refactor: extract lib/wiki-scraper.ts, make scraper composable, sync from Wikipedia
valknar and Claude Sonnet 4.6
2026-06-15 17:23:17 +02:00
d1171267a8
feat: scrape tournament meta from Wikipedia, drop world_cup.csv
valknar and Claude Sonnet 4.6
2026-06-15 17:09:45 +02:00
ff4989f39f
refactor: rename data/openfootball → data/wikipedia, drop data/kaggle
valknar and Claude Sonnet 4.6
2026-06-15 16:10:21 +02:00
5dcd22ad22
feat: replace Kaggle CSV with Wikipedia scraper for historical match data
valknar and Claude Sonnet 4.6
2026-06-15 11:39:53 +02:00
83b1ad3e35
fix: atomic goal updates in sync — transaction + bulk INSERT
valknar and Claude Sonnet 4.6
2026-06-15 09:56:43 +02:00
2c981dc6c0
fix: add non-null assertion for DATABASE_URL in sync.ts closure
valknar and Claude Sonnet 4.6
2026-06-15 08:56:11 +02:00
9f8f56ac4e
fix: remove redundant DDL from sync.ts and validate DATABASE_URL
valknar and Claude Sonnet 4.6
2026-06-15 08:53:20 +02:00
de03dfeadb
fix: suppress Apollo cache warnings for Match.team1 / Match.team2
valknar and Claude Sonnet 4.6
2026-06-14 22:18:47 +02:00
11a89204af
feat: add Umami analytics via UMAMI_ID / UMAMI_SRC env vars
valknar and Claude Sonnet 4.6
2026-06-14 22:04:41 +02:00
767236739b
feat: add football net background pattern and glass card styling
valknar and Claude Sonnet 4.6
2026-06-14 22:01:40 +02:00
479c3d93e4
fix: constrain nav and footer content to max-w-[1200px] like main content
valknar and Claude Sonnet 4.6
2026-06-14 21:46:33 +02:00
ae46cbc44e
feat: add footer with copyright and dev.pivoine.art link
valknar and Claude Sonnet 4.6
2026-06-14 21:44:58 +02:00
1c73baf894
fix: remove unused \$name variable from PlayerGoalsByYear query
valknar and Claude Sonnet 4.6
2026-06-14 21:41:42 +02:00
0b26c59ceb
fix: regenerate pnpm-lock.yaml after heroicons install, remove npm lockfile
valknar and Claude Sonnet 4.6
2026-06-14 21:34:49 +02:00
3cb619d7fa
fix: include today's completed matches in recentMatches
valknar and Claude Sonnet 4.6
2026-06-14 21:26:25 +02:00
c3ddb6e874
feat: replace emoji icons with Heroicons SVG set
valknar and Claude Sonnet 4.6
2026-06-14 21:23:38 +02:00
a6111d7beb
fix: resolve Apollo cache warning for TeamStats embedded objects
valknar and Claude Sonnet 4.6
2026-06-14 21:12:13 +02:00
6e6e819718
fix: scope team page scorers by teamId instead of filtering global top 200
valknar and Claude Sonnet 4.6
2026-06-14 21:11:16 +02:00
9b8e266f88
feat: team pages with match/tournament history, mobile padding fixes, linked scorers and nations
valknar and Claude Sonnet 4.6
2026-06-14 21:07:56 +02:00
f1b5328b78
fix: switch team table and confederation stats to proper table layout
valknar and Claude Sonnet 4.6
2026-06-14 20:26:49 +02:00
e5625bf759
fix: minimize favicon margins — trophy fills 96% of height
valknar and Claude Sonnet 4.6
2026-06-14 20:23:03 +02:00
9077f3ec8b
fix: remove background rect from favicon, transparent icons
valknar and Claude Sonnet 4.6
2026-06-14 20:21:13 +02:00
2b18fa1ebb
fix: rebuild favicon with inlined vector paths, no image-embed blurriness
valknar and Claude Sonnet 4.6
2026-06-14 20:20:21 +02:00
020fbd5bdf
fix: rebuild favicon as proper square SVG with dark background
valknar and Claude Sonnet 4.6
2026-06-14 20:17:08 +02:00
238bbabbdb
feat: add proper favicon, apple-touch-icon, webmanifest and PWA icons
valknar and Claude Sonnet 4.6
2026-06-14 20:13:52 +02:00
886523173b
fix: use grid layout for full match card so teams stay in one row on mobile
valknar and Claude Sonnet 4.6
2026-06-14 20:10:55 +02:00
ee1acb6e45
feat: add mobile hamburger menu with slide-down panel
valknar and Claude Sonnet 4.6
2026-06-14 20:08:03 +02:00
05a75fffca
fix: increase trophy icon height to 36px
valknar and Claude Sonnet 4.6
2026-06-14 20:02:39 +02:00
ffa8ec16c8
fix: constrain trophy icon height to 22px to match nav proportions
valknar and Claude Sonnet 4.6
2026-06-14 20:02:16 +02:00
c9e1beafc7
feat: replace hand-drawn ball SVG with FIFA trophy icon in nav
valknar and Claude Sonnet 4.6
2026-06-14 20:01:28 +02:00
3eb36061e0
feat: replace inline SVG icon with FIFA World Cup trophy icon
valknar and Claude Sonnet 4.6
2026-06-14 20:00:17 +02:00
52b8348203
feat: add 404 page matching app design system
valknar and Claude Sonnet 4.6
2026-06-14 19:54:14 +02:00
85c40cf56e
fix: update document.title on every page via useEffect
valknar and Claude Sonnet 4.6
2026-06-14 19:52:59 +02:00
32d33d2f92
fix: add data-scroll-behavior="smooth" to suppress Next.js warning
valknar and Claude Sonnet 4.6
2026-06-14 19:45:01 +02:00
2e284ec49e
fix: show penalty score as headline result, FT score as footnote
valknar and Claude Sonnet 4.6
2026-06-14 19:39:01 +02:00
25e440f5a4
fix: scroll to hash anchor after Apollo data loads on tournament page
valknar and Claude Sonnet 4.6
2026-06-14 19:36:08 +02:00
e4d9772c47
fix: add missing team name variants and defunct nations to iso-codes
valknar and Claude Sonnet 4.6
2026-06-14 19:33:01 +02:00
c98d45da79
fix: add Türkiye alias to iso-codes (openfootball uses new name)
valknar and Claude Sonnet 4.6
2026-06-14 19:31:13 +02:00
050f661e6d
fix: match placeholder badge dimensions to flag-icons flag size
valknar and Claude Sonnet 4.6
2026-06-14 19:28:12 +02:00
39985a5c71
fix: override stale DB iso2 with registry for known defunct nations
valknar and Claude Sonnet 4.6
2026-06-14 19:25:55 +02:00
b942ae7c8f
fix: show placeholder badge for defunct nations with no flag-icons code
valknar and Claude Sonnet 4.6
2026-06-14 19:21:38 +02:00
3955c7492b
feat: replace historical sync with Kaggle seed for complete 1930-2022 goal data
valknar and Claude Sonnet 4.6
2026-06-14 18:43:43 +02:00
191888225f
fix: delete goals once per match instead of once per team in syncGoals()
valknar and Claude Sonnet 4.6
2026-06-14 17:38:35 +02:00
c418a51f08
chore: remove flags from location text on homepage and history
valknar and Claude Sonnet 4.6
2026-06-14 17:30:12 +02:00
78340bd2db
fix: convert match local time to UTC in isLive()
valknar and Claude Sonnet 4.6
2026-06-14 17:24:59 +02:00
42019e5035
fix: normalize West Germany → Germany in sync script and repair existing data
valknar and Claude Sonnet 4.6
2026-06-14 17:12:06 +02:00
48f7e71a8e
fix: map total_goals → totalGoals in confederationStats resolver
valknar and Claude Sonnet 4.6
2026-06-14 17:06:22 +02:00
9926673ffd
fix: add limit arg to Tournament.topScorers in GraphQL schema
valknar and Claude Sonnet 4.6
2026-06-14 17:05:31 +02:00
0eb0fb5ee4
fix: use percent-encoded DATABASE_URL instead of split DB_PASSWORD trick
valknar and Claude Sonnet 4.6
2026-06-14 17:01:06 +02:00
2b22f504cf
fix: pass DB_PASSWORD to postgres client in sync script
valknar and Claude Sonnet 4.6
2026-06-14 16:43:50 +02:00
9a87e9dde3
fix: proper Tailwind v4 CSS structure in globals.css
valknar and Claude Sonnet 4.6
2026-06-14 16:37:59 +02:00
ea7f0551f0
fix: replace recursive ** globs in @source with explicit per-directory paths
valknar and Claude Sonnet 4.6
2026-06-14 16:26:25 +02:00
30d30f68fb
fix: add @source directives so Tailwind v4 scans all component files
valknar and Claude Sonnet 4.6
2026-06-14 16:22:13 +02:00
0cabcf7438
fix: separate DB_PASSWORD from DATABASE_URL to handle special chars
valknar and Claude Sonnet 4.6
2026-06-14 15:58:48 +02:00
29ef528d67
chore: update DATABASE_URL hostname in .env.example to worldcup_db
valknar and Claude Sonnet 4.6
2026-06-14 15:41:17 +02:00
bec5cf28e6
chore: set explicit container names and drop no-index middleware
valknar and Claude Sonnet 4.6
2026-06-14 15:40:12 +02:00
58b4114159
feat: initial commit — World Cup stats app with pnpm, Traefik, Docker
valknar and Claude Sonnet 4.6
2026-06-14 15:36:44 +02:00