refactor: replace hardcoded hex colors with theme tokens, move data/ to root

- Add --color-green-mid token (#4a7a55) to @theme for dimmer stat values
- Replace all text-[#hex]/bg-[#hex] arbitrary values with named tokens:
  text-green, text-green-light, text-green-sec, text-green-muted,
  text-green-dark, text-green-mid, text-text, bg-card, bg-bg, border-border
- Replace rgba(34,197,94,X) inline styles with bg-green/X opacity modifiers
- Convert single-prop style={{ borderColor/background }} to className
- Fix SVG stroke="#dff5e8" → stroke="currentColor"
- Use CSS variables in globals.css base styles (background-color, color)
- Move app/data/wikipedia/ → data/ (project root, not inside Next.js app dir)
- Update Dockerfile, seed.ts, scrape-wikipedia.ts paths accordingly
- Remove unused app/data/world_cup.csv

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-15 18:08:23 +02:00
parent 187ee2e312
commit b141356247
125 changed files with 279 additions and 322 deletions
+753
View File
@@ -0,0 +1,753 @@
{
"matches": [
{
"round": "Group stage",
"group": "Group 1",
"date": "1950-06-24",
"time": "15:00",
"team1": "Brazil",
"team2": "Mexico",
"score": {
"ft": [
4,
0
]
},
"goals1": [
{
"name": "Ademir",
"minute": 30
},
{
"name": "Ademir",
"minute": 79
},
{
"name": "Jair",
"minute": 65
},
{
"name": "Baltazar",
"minute": 71
}
],
"ground": "Estádio do Maracanã, Rio de Janeiro"
},
{
"round": "Group stage",
"group": "Group 1",
"date": "1950-06-25",
"time": "15:00",
"team1": "Yugoslavia",
"team2": "Switzerland",
"score": {
"ft": [
3,
0
]
},
"goals1": [
{
"name": "Mitić",
"minute": 59
},
{
"name": "Tomašević",
"minute": 70
},
{
"name": "Ognjanov",
"minute": 84
}
],
"ground": "Estádio Independência, Belo Horizonte"
},
{
"round": "Group stage",
"group": "Group 1",
"date": "1950-06-28",
"time": "15:00",
"team1": "Brazil",
"team2": "Switzerland",
"score": {
"ft": [
2,
2
]
},
"goals1": [
{
"name": "Alfredo",
"minute": 3
},
{
"name": "Baltazar",
"minute": 32
}
],
"goals2": [
{
"name": "Fatton",
"minute": 17
},
{
"name": "Fatton",
"minute": 88
}
],
"ground": "Estádio do Pacaembu, São Paulo"
},
{
"round": "Group stage",
"group": "Group 1",
"date": "1950-06-28",
"time": "15:00",
"team1": "Yugoslavia",
"team2": "Mexico",
"score": {
"ft": [
4,
1
]
},
"goals1": [
{
"name": "Bobek",
"minute": 20
},
{
"name": "Ž. Čajkovski",
"minute": 23
},
{
"name": "Ž. Čajkovski",
"minute": 51
},
{
"name": "Tomašević",
"minute": 81
}
],
"goals2": [
{
"name": "Ortiz",
"minute": 89,
"penalty": true
}
],
"ground": "Estádio dos Eucaliptos, Porto Alegre"
},
{
"round": "Group stage",
"group": "Group 1",
"date": "1950-07-01",
"time": "15:00",
"team1": "Brazil",
"team2": "Yugoslavia",
"score": {
"ft": [
2,
0
]
},
"goals1": [
{
"name": "Ademir",
"minute": 4
},
{
"name": "Zizinho",
"minute": 69
}
],
"ground": "Estádio do Maracanã, Rio de Janeiro"
},
{
"round": "Group stage",
"group": "Group 1",
"date": "1950-07-02",
"time": "15:40",
"team1": "Switzerland",
"team2": "Mexico",
"score": {
"ft": [
2,
1
]
},
"goals1": [
{
"name": "Bader",
"minute": 10
},
{
"name": "Antenen",
"minute": 44
}
],
"goals2": [
{
"name": "Casarín",
"minute": 89
}
],
"ground": "Estádio dos Eucaliptos, Porto Alegre"
},
{
"round": "Group stage",
"group": "Group 2",
"date": "1950-06-25",
"time": "15:00",
"team1": "England",
"team2": "Chile",
"score": {
"ft": [
2,
0
]
},
"goals1": [
{
"name": "Mortensen",
"minute": 39
},
{
"name": "Mannion",
"minute": 51
}
],
"ground": "Estádio do Maracanã, Rio de Janeiro"
},
{
"round": "Group stage",
"group": "Group 2",
"date": "1950-06-25",
"time": "15:00",
"team1": "Spain",
"team2": "United States",
"score": {
"ft": [
3,
1
]
},
"goals1": [
{
"name": "Igoa",
"minute": 81
},
{
"name": "Basora",
"minute": 83
},
{
"name": "Zarra",
"minute": 89
}
],
"goals2": [
{
"name": "Pariani",
"minute": 17
}
],
"ground": "Estádio Durival de Britto, Curitiba"
},
{
"round": "Group stage",
"group": "Group 2",
"date": "1950-06-29",
"time": "15:00",
"team1": "Spain",
"team2": "Chile",
"score": {
"ft": [
2,
0
]
},
"goals1": [
{
"name": "Basora",
"minute": 17
},
{
"name": "Zarra",
"minute": 30
}
],
"ground": "Estádio do Maracanã, Rio de Janeiro"
},
{
"round": "Group stage",
"group": "Group 2",
"date": "1950-06-29",
"time": "15:00",
"team1": "United States",
"team2": "England",
"score": {
"ft": [
1,
0
]
},
"goals1": [
{
"name": "Gaetjens",
"minute": 38
}
],
"ground": "Estádio Independência, Belo Horizonte"
},
{
"round": "Group stage",
"group": "Group 2",
"date": "1950-07-02",
"time": "15:00",
"team1": "Spain",
"team2": "England",
"score": {
"ft": [
1,
0
]
},
"goals1": [
{
"name": "Zarra",
"minute": 48
}
],
"ground": "Estádio do Maracanã, Rio de Janeiro"
},
{
"round": "Group stage",
"group": "Group 2",
"date": "1950-07-02",
"time": "15:00",
"team1": "Chile",
"team2": "United States",
"score": {
"ft": [
5,
2
]
},
"goals1": [
{
"name": "Robledo",
"minute": 16
},
{
"name": "Cremaschi",
"minute": 32
},
{
"name": "Cremaschi",
"minute": 60
},
{
"name": "Prieto",
"minute": 54
},
{
"name": "Riera",
"minute": 82
}
],
"goals2": [
{
"name": "Wallace",
"minute": 47
},
{
"name": "Maca",
"minute": 48,
"penalty": true
}
],
"ground": "Estádio Ilha do Retiro, Recife"
},
{
"round": "Group stage",
"group": "Group 3",
"date": "1950-06-25",
"time": "15:00",
"team1": "Sweden",
"team2": "Italy",
"score": {
"ft": [
3,
2
]
},
"goals1": [
{
"name": "Jeppson",
"minute": 25
},
{
"name": "Jeppson",
"minute": 68
},
{
"name": "Andersson",
"minute": 33
}
],
"goals2": [
{
"name": "Carapellese",
"minute": 7
},
{
"name": "Muccinelli",
"minute": 75
}
],
"ground": "Estádio do Pacaembu, São Paulo"
},
{
"round": "Group stage",
"group": "Group 3",
"date": "1950-06-29",
"time": "15:30",
"team1": "Sweden",
"team2": "Paraguay",
"score": {
"ft": [
2,
2
]
},
"goals1": [
{
"name": "Sundqvist",
"minute": 17
},
{
"name": "Palmér",
"minute": 26
}
],
"goals2": [
{
"name": "López",
"minute": 35
},
{
"name": "López Fretes",
"minute": 74
}
],
"ground": "Estádio Durival Britto, Curitiba"
},
{
"round": "Group stage",
"group": "Group 3",
"date": "1950-07-02",
"time": "15:00",
"team1": "Italy",
"team2": "Paraguay",
"score": {
"ft": [
2,
0
]
},
"goals1": [
{
"name": "Carapellese",
"minute": 12
},
{
"name": "Pandolfini",
"minute": 62
}
],
"ground": "Estádio do Pacaembu, São Paulo"
},
{
"round": "Group stage",
"group": "Group 4",
"date": "1950-07-02",
"time": "15:00",
"team1": "Uruguay",
"team2": "Bolivia",
"score": {
"ft": [
8,
0
]
},
"goals1": [
{
"name": "Míguez",
"minute": 14
},
{
"name": "Míguez",
"minute": 40
},
{
"name": "Míguez",
"minute": 51
},
{
"name": "Vidal",
"minute": 18
},
{
"name": "Schiaffino",
"minute": 23
},
{
"name": "Schiaffino",
"minute": 54
},
{
"name": "Pérez",
"minute": 83
},
{
"name": "Ghiggia",
"minute": 87
}
],
"ground": "Estádio Independência, Belo Horizonte"
},
{
"round": "Final round",
"date": "1950-07-09",
"time": "15:00",
"team1": "Uruguay",
"team2": "Spain",
"score": {
"ft": [
2,
2
]
},
"goals1": [
{
"name": "Ghiggia",
"minute": 29
},
{
"name": "Varela",
"minute": 73
}
],
"goals2": [
{
"name": "Basora",
"minute": 37
},
{
"name": "Basora",
"minute": 39
}
],
"ground": "Estádio do Pacaembu, São Paulo"
},
{
"round": "Final round",
"date": "1950-07-09",
"time": "15:00",
"team1": "Brazil",
"team2": "Sweden",
"score": {
"ft": [
7,
1
]
},
"goals1": [
{
"name": "Ademir",
"minute": 17
},
{
"name": "Ademir",
"minute": 36
},
{
"name": "Ademir",
"minute": 52
},
{
"name": "Ademir",
"minute": 58
},
{
"name": "Chico",
"minute": 39
},
{
"name": "Chico",
"minute": 88
},
{
"name": "Maneca",
"minute": 85
}
],
"goals2": [
{
"name": "Andersson",
"minute": 67,
"penalty": true
}
],
"ground": "Estádio do Maracanã, Rio de Janeiro"
},
{
"round": "Final round",
"date": "1950-07-13",
"time": "15:00",
"team1": "Brazil",
"team2": "Spain",
"score": {
"ft": [
6,
1
]
},
"goals1": [
{
"name": "Ademir",
"minute": 15
},
{
"name": "Ademir",
"minute": 57
},
{
"name": "Jair",
"minute": 21
},
{
"name": "Chico",
"minute": 31
},
{
"name": "Chico",
"minute": 55
},
{
"name": "Zizinho",
"minute": 67
}
],
"goals2": [
{
"name": "Igoa",
"minute": 71
}
],
"ground": "Estádio do Maracanã, Rio de Janeiro"
},
{
"round": "Final round",
"date": "1950-07-13",
"time": "15:00",
"team1": "Uruguay",
"team2": "Sweden",
"score": {
"ft": [
3,
2
]
},
"goals1": [
{
"name": "Ghiggia",
"minute": 39
},
{
"name": "Míguez",
"minute": 77
},
{
"name": "Míguez",
"minute": 85
}
],
"goals2": [
{
"name": "Palmér",
"minute": 5
},
{
"name": "Sundqvist",
"minute": 40
}
],
"ground": "Estádio do Pacaembu, São Paulo"
},
{
"round": "Final round",
"date": "1950-07-16",
"time": "15:00",
"team1": "Sweden",
"team2": "Spain",
"score": {
"ft": [
3,
1
]
},
"goals1": [
{
"name": "Sundqvist",
"minute": 15
},
{
"name": "Mellberg",
"minute": 33
},
{
"name": "Palmér",
"minute": 80
}
],
"goals2": [
{
"name": "Zarra",
"minute": 82
}
],
"ground": "Estádio do Pacaembu, São Paulo"
},
{
"round": "Final round",
"date": "1950-07-16",
"time": "15:00",
"team1": "Uruguay",
"team2": "Brazil",
"score": {
"ft": [
2,
1
]
},
"goals1": [
{
"name": "Schiaffino",
"minute": 66
},
{
"name": "Ghiggia",
"minute": 79
}
],
"goals2": [
{
"name": "Friaça",
"minute": 47
}
],
"ground": "Estádio do Maracanã, Rio de Janeiro"
}
]
}