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
+40
View File
@@ -0,0 +1,40 @@
{
"groups": [
{
"name": "Group 1",
"teams": [
"Uruguay",
"Colombia",
"Soviet Union",
"Yugoslavia"
]
},
{
"name": "Group 2",
"teams": [
"Chile",
"Switzerland",
"West Germany",
"Italy"
]
},
{
"name": "Group 3",
"teams": [
"Brazil",
"Mexico",
"Czechoslovakia",
"Spain"
]
},
{
"name": "Group 4",
"teams": [
"Argentina",
"Bulgaria",
"Hungary",
"England"
]
}
]
}
+928
View File
@@ -0,0 +1,928 @@
{
"matches": [
{
"round": "Quarter-finals",
"date": "1962-06-10",
"time": "14:30",
"team1": "Chile",
"team2": "Soviet Union",
"score": {
"ft": [
2,
1
]
},
"goals1": [
{
"name": "L. Sánchez",
"minute": 11
},
{
"name": "Rojas",
"minute": 29
}
],
"goals2": [
{
"name": "Chislenko",
"minute": 26
}
],
"ground": "Estadio Carlos Dittborn, Arica"
},
{
"round": "Quarter-finals",
"date": "1962-06-10",
"time": "14:30",
"team1": "Czechoslovakia",
"team2": "Hungary",
"score": {
"ft": [
1,
0
]
},
"goals1": [
{
"name": "Scherer",
"minute": 13
}
],
"ground": "Estadio El Teniente, Rancagua"
},
{
"round": "Quarter-finals",
"date": "1962-06-10",
"time": "14:30",
"team1": "Brazil",
"team2": "England",
"score": {
"ft": [
3,
1
]
},
"goals1": [
{
"name": "Garrincha",
"minute": 31
},
{
"name": "Garrincha",
"minute": 59
},
{
"name": "Vavá",
"minute": 53
}
],
"goals2": [
{
"name": "Hitchens",
"minute": 38
}
],
"ground": "Estadio Sausalito, Viña del Mar"
},
{
"round": "Quarter-finals",
"date": "1962-06-10",
"time": "14:30",
"team1": "Yugoslavia",
"team2": "West Germany",
"score": {
"ft": [
1,
0
]
},
"goals1": [
{
"name": "Radaković",
"minute": 85
}
],
"ground": "Estadio Nacional, Santiago"
},
{
"round": "Semi-finals",
"date": "1962-06-13",
"time": "14:30",
"team1": "Czechoslovakia",
"team2": "Yugoslavia",
"score": {
"ft": [
3,
1
]
},
"goals1": [
{
"name": "Kadraba",
"minute": 48
},
{
"name": "Scherer",
"minute": 80
},
{
"name": "Scherer",
"minute": 84,
"penalty": true
}
],
"goals2": [
{
"name": "Jerković",
"minute": 69
}
],
"ground": "Estadio Sausalito, Viña del Mar"
},
{
"round": "Semi-finals",
"date": "1962-06-13",
"time": "14:30",
"team1": "Brazil",
"team2": "Chile",
"score": {
"ft": [
4,
2
]
},
"goals1": [
{
"name": "Garrincha",
"minute": 9
},
{
"name": "Garrincha",
"minute": 32
},
{
"name": "Vavá",
"minute": 47
},
{
"name": "Vavá",
"minute": 78
}
],
"goals2": [
{
"name": "Toro",
"minute": 42
},
{
"name": "L. Sánchez",
"minute": 61,
"penalty": true
}
],
"ground": "Estadio Nacional, Santiago"
},
{
"round": "Third-place match",
"date": "1962-06-16",
"time": "14:30",
"team1": "Chile",
"team2": "Yugoslavia",
"score": {
"ft": [
1,
0
]
},
"goals1": [
{
"name": "Rojas",
"minute": 90
}
],
"ground": "Estadio Nacional, Santiago"
},
{
"round": "Final",
"date": "1962-06-17",
"time": "14:30",
"team1": "Brazil",
"team2": "Czechoslovakia",
"score": {
"ft": [
3,
1
]
},
"goals1": [
{
"name": "Amarildo",
"minute": 17
},
{
"name": "Zito",
"minute": 69
},
{
"name": "Vavá",
"minute": 78
}
],
"goals2": [
{
"name": "Masopust",
"minute": 15
}
],
"ground": "Estadio Nacional, Santiago"
},
{
"round": "Group stage",
"group": "Group 1",
"date": "1962-05-30",
"time": "15:00",
"team1": "Uruguay",
"team2": "Colombia",
"score": {
"ft": [
2,
1
]
},
"goals1": [
{
"name": "Cubilla",
"minute": 56
},
{
"name": "Sasía",
"minute": 75
}
],
"goals2": [
{
"name": "Zuluaga",
"minute": 19,
"penalty": true
}
],
"ground": "Estadio Carlos Dittborn, Arica"
},
{
"round": "Group stage",
"group": "Group 1",
"date": "1962-05-31",
"time": "15:00",
"team1": "Soviet Union",
"team2": "Yugoslavia",
"score": {
"ft": [
2,
0
]
},
"goals1": [
{
"name": "Ivanov",
"minute": 51
},
{
"name": "Ponedelnik",
"minute": 83
}
],
"ground": "Estadio Carlos Dittborn, Arica"
},
{
"round": "Group stage",
"group": "Group 1",
"date": "1962-06-02",
"time": "15:00",
"team1": "Yugoslavia",
"team2": "Uruguay",
"score": {
"ft": [
3,
1
]
},
"goals1": [
{
"name": "Skoblar",
"minute": 25,
"penalty": true
},
{
"name": "Galić",
"minute": 29
},
{
"name": "Jerković",
"minute": 49
}
],
"goals2": [
{
"name": "Cabrera",
"minute": 19
}
],
"ground": "Estadio Carlos Dittborn, Arica"
},
{
"round": "Group stage",
"group": "Group 1",
"date": "1962-06-03",
"time": "15:00",
"team1": "Soviet Union",
"team2": "Colombia",
"score": {
"ft": [
4,
4
]
},
"goals1": [
{
"name": "Ivanov",
"minute": 8
},
{
"name": "Ivanov",
"minute": 11
},
{
"name": "Chislenko",
"minute": 10
},
{
"name": "Ponedelnik",
"minute": 56
}
],
"goals2": [
{
"name": "Aceros",
"minute": 21
},
{
"name": "Coll",
"minute": 68
},
{
"name": "Rada",
"minute": 72
},
{
"name": "Klinger",
"minute": 86
}
],
"ground": "Estadio Carlos Dittborn, Arica"
},
{
"round": "Group stage",
"group": "Group 1",
"date": "1962-06-06",
"time": "15:00",
"team1": "Soviet Union",
"team2": "Uruguay",
"score": {
"ft": [
2,
1
]
},
"goals1": [
{
"name": "Mamykin",
"minute": 38
},
{
"name": "Ivanov",
"minute": 89
}
],
"goals2": [
{
"name": "Sasía",
"minute": 54
}
],
"ground": "Estadio Carlos Dittborn, Arica"
},
{
"round": "Group stage",
"group": "Group 1",
"date": "1962-06-07",
"time": "15:00",
"team1": "Yugoslavia",
"team2": "Colombia",
"score": {
"ft": [
5,
0
]
},
"goals1": [
{
"name": "Galić",
"minute": 20
},
{
"name": "Galić",
"minute": 61
},
{
"name": "Jerković",
"minute": 25
},
{
"name": "Jerković",
"minute": 87
},
{
"name": "Melić",
"minute": 82
}
],
"ground": "Estadio Carlos Dittborn, Arica"
},
{
"round": "Group stage",
"group": "Group 2",
"date": "1962-05-30",
"time": "15:00",
"team1": "Chile",
"team2": "Switzerland",
"score": {
"ft": [
3,
1
]
},
"goals1": [
{
"name": "L. Sánchez",
"minute": 44
},
{
"name": "L. Sánchez",
"minute": 55
},
{
"name": "Ramírez",
"minute": 51
}
],
"goals2": [
{
"name": "Wüthrich",
"minute": 6
}
],
"ground": "Estadio Nacional, Santiago"
},
{
"round": "Group stage",
"group": "Group 2",
"date": "1962-05-31",
"time": "15:00",
"team1": "West Germany",
"team2": "Italy",
"score": {
"ft": [
0,
0
]
},
"ground": "Estadio Nacional, Santiago"
},
{
"round": "Group stage",
"group": "Group 2",
"date": "1962-06-02",
"time": "15:00",
"team1": "Chile",
"team2": "Italy",
"score": {
"ft": [
2,
0
]
},
"goals1": [
{
"name": "Ramírez",
"minute": 73
},
{
"name": "Toro",
"minute": 87
}
],
"ground": "Estadio Nacional, Santiago"
},
{
"round": "Group stage",
"group": "Group 2",
"date": "1962-06-03",
"time": "15:00",
"team1": "West Germany",
"team2": "Switzerland",
"score": {
"ft": [
2,
1
]
},
"goals1": [
{
"name": "Brülls",
"minute": 45
},
{
"name": "Seeler",
"minute": 59
}
],
"goals2": [
{
"name": "Schneiter",
"minute": 73
}
],
"ground": "Estadio Nacional, Santiago"
},
{
"round": "Group stage",
"group": "Group 2",
"date": "1962-06-06",
"time": "15:00",
"team1": "West Germany",
"team2": "Chile",
"score": {
"ft": [
2,
0
]
},
"goals1": [
{
"name": "Szymaniak",
"minute": 21,
"penalty": true
},
{
"name": "Seeler",
"minute": 82
}
],
"ground": "Estadio Nacional, Santiago"
},
{
"round": "Group stage",
"group": "Group 2",
"date": "1962-06-07",
"time": "15:00",
"team1": "Italy",
"team2": "Switzerland",
"score": {
"ft": [
3,
0
]
},
"goals1": [
{
"name": "Mora",
"minute": 2
},
{
"name": "Bulgarelli",
"minute": 65
},
{
"name": "Bulgarelli",
"minute": 67
}
],
"ground": "Estadio Nacional, Santiago"
},
{
"round": "Group stage",
"group": "Group 3",
"date": "1962-05-30",
"time": "15:00",
"team1": "Brazil",
"team2": "Mexico",
"score": {
"ft": [
2,
0
]
},
"goals1": [
{
"name": "Zagallo",
"minute": 56
},
{
"name": "Pelé",
"minute": 73
}
],
"ground": "Estadio Sausalito, Viña del Mar"
},
{
"round": "Group stage",
"group": "Group 3",
"date": "1962-05-31",
"time": "15:00",
"team1": "Czechoslovakia",
"team2": "Spain",
"score": {
"ft": [
1,
0
]
},
"goals1": [
{
"name": "Štibrányi",
"minute": 80
}
],
"ground": "Estadio Sausalito, Viña del Mar"
},
{
"round": "Group stage",
"group": "Group 3",
"date": "1962-06-02",
"time": "15:00",
"team1": "Brazil",
"team2": "Czechoslovakia",
"score": {
"ft": [
0,
0
]
},
"ground": "Estadio Sausalito, Viña del Mar"
},
{
"round": "Group stage",
"group": "Group 3",
"date": "1962-06-03",
"time": "15:00",
"team1": "Spain",
"team2": "Mexico",
"score": {
"ft": [
1,
0
]
},
"goals1": [
{
"name": "Peiró",
"minute": 90
}
],
"ground": "Estadio Sausalito, Viña del Mar"
},
{
"round": "Group stage",
"group": "Group 3",
"date": "1962-06-06",
"time": "15:00",
"team1": "Brazil",
"team2": "Spain",
"score": {
"ft": [
2,
1
]
},
"goals1": [
{
"name": "Amarildo",
"minute": 72
},
{
"name": "Amarildo",
"minute": 86
}
],
"goals2": [
{
"name": "Adelardo",
"minute": 35
}
],
"ground": "Estadio Sausalito, Viña del Mar"
},
{
"round": "Group stage",
"group": "Group 3",
"date": "1962-06-07",
"time": "15:00",
"team1": "Mexico",
"team2": "Czechoslovakia",
"score": {
"ft": [
3,
1
]
},
"goals1": [
{
"name": "Díaz",
"minute": 12
},
{
"name": "Del Águila",
"minute": 29
},
{
"name": "Hernández",
"minute": 90,
"penalty": true
}
],
"goals2": [
{
"name": "Mašek",
"minute": 1
}
],
"ground": "Estadio Sausalito, Viña del Mar"
},
{
"round": "Group stage",
"group": "Group 4",
"date": "1962-05-30",
"time": "15:00",
"team1": "Argentina",
"team2": "Bulgaria",
"score": {
"ft": [
1,
0
]
},
"goals1": [
{
"name": "Facundo",
"minute": 4
}
],
"ground": "Estadio El Teniente, Rancagua"
},
{
"round": "Group stage",
"group": "Group 4",
"date": "1962-05-31",
"time": "15:00",
"team1": "Hungary",
"team2": "England",
"score": {
"ft": [
2,
1
]
},
"goals1": [
{
"name": "Tichy",
"minute": 17
},
{
"name": "Albert",
"minute": 71
}
],
"goals2": [
{
"name": "Flowers",
"minute": 60,
"penalty": true
}
],
"ground": "Estadio El Teniente, Rancagua"
},
{
"round": "Group stage",
"group": "Group 4",
"date": "1962-06-02",
"time": "15:00",
"team1": "England",
"team2": "Argentina",
"score": {
"ft": [
3,
1
]
},
"goals1": [
{
"name": "Flowers",
"minute": 17,
"penalty": true
},
{
"name": "Charlton",
"minute": 42
},
{
"name": "Greaves",
"minute": 67
}
],
"goals2": [
{
"name": "Sanfilippo",
"minute": 81
}
],
"ground": "Estadio El Teniente, Rancagua"
},
{
"round": "Group stage",
"group": "Group 4",
"date": "1962-06-03",
"time": "15:00",
"team1": "Hungary",
"team2": "Bulgaria",
"score": {
"ft": [
6,
1
]
},
"goals1": [
{
"name": "Albert",
"minute": 1
},
{
"name": "Albert",
"minute": 6
},
{
"name": "Albert",
"minute": 53
},
{
"name": "Tichy",
"minute": 8
},
{
"name": "Tichy",
"minute": 70
},
{
"name": "Solymosi",
"minute": 12
}
],
"goals2": [
{
"name": "Sokolov",
"minute": 64
}
],
"ground": "Estadio El Teniente, Rancagua"
},
{
"round": "Group stage",
"group": "Group 4",
"date": "1962-06-06",
"time": "15:00",
"team1": "Hungary",
"team2": "Argentina",
"score": {
"ft": [
0,
0
]
},
"ground": "Estadio El Teniente, Rancagua"
},
{
"round": "Group stage",
"group": "Group 4",
"date": "1962-06-07",
"time": "15:00",
"team1": "England",
"team2": "Bulgaria",
"score": {
"ft": [
0,
0
]
},
"ground": "Estadio El Teniente, Rancagua"
}
]
}
+8
View File
@@ -0,0 +1,8 @@
{
"host": "Chile",
"teams_count": 16,
"winner": "Brazil",
"runner_up": "Czechoslovakia",
"third_place": "Chile",
"fourth_place": "Yugoslavia"
}
File diff suppressed because it is too large Load Diff
+20
View File
@@ -0,0 +1,20 @@
{
"stadiums": [
{
"name": "Estadio Carlos Dittborn",
"city": "Arica"
},
{
"name": "Estadio El Teniente",
"city": "Rancagua"
},
{
"name": "Estadio Sausalito",
"city": "Viña del Mar"
},
{
"name": "Estadio Nacional",
"city": "Santiago"
}
]
}