Sportfest-Ausgabe der Stadionzeitung zum Heimspiel gegen ATS Wartenfels

Neue Live-Seiten, geschaltet vom chat-gepflegten Feld `veranstaltung` (Slug aus
data/veranstaltungen.json) — Programm und Turnierpläne kommen damit aus derselben
Quelle wie die Website, nicht als Kopie ins Heft:

- Programm-Seite (programm[], rendert zugleich auf /veranstaltungen/sportfest-2026)
- vier Turnierplan-Seiten (turniere[]) mit leerer Ergebnisspalte und leerer
  Abschlusstabelle zum Eintragen am Platz
- Gegnerseite je Mannschaft mit Heimspiel am Fest statt nur der tragenden:
  stadionzeitung_gegner_fixtures() ist die einzige Stelle, die das entscheidet,
  Seitenplanung und Snapshot lesen beide dort. `gegner` ist deshalb eine Map je
  Team-Key; die Vorschau überspringt jedes Spiel mit eigener Gegnerseite
- Danke-Seite mit Partner-Logo-Wand aus data/partners.json und QR auf
  /partner-werden, dazu das Anzeigen-Feld `platzierung` für Motive mit festem
  Platz auf einer Live-Seite (Emons über der Logo-Wand). Vorher klebte der Dank
  als leere Fläche unten an einem Anzeigen-Bild
- Cover einer Sonderausgabe: das Fest als Titelgeschichte statt einer der drei
  Begegnungen, dazu das Hauptplakat schräg gelegt an Stelle des Spielerfotos

Ausgabe 2026-09-04-ats-wartenfels als ENTWURF angelegt, 48 Seiten (12 Bögen),
Tabellen auf gerader Seite, längster Anzeigenblock zwei. Veröffentlicht wird auf
dem Server, dort liegt der frische Matchcenter-Stand.

Nebenbei behoben: bin/anzeige-add.php räumte beim Anlegen alle Motive weg, deren
Slug mit demselben Text beginnt (`emons` löschte `emons-partnerdank` und
`emons-stuebinger`). Muster jetzt auf die Breiten-Endung eingeschränkt.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KubsajzuV6N6QsSd3xKNjC
This commit is contained in:
2026-09-03 10:57:52 +02:00
parent b4d2cde149
commit f2f193b223
40 changed files with 2273 additions and 77 deletions

View File

@@ -1,5 +1,847 @@
{
"issues": [
{
"slug": "2026-09-04-ats-wartenfels",
"opponent": "ATS Wartenfels",
"date": "2026-09-04",
"team_key": "erste-mannschaft",
"status": "entwurf",
"pages": 48,
"player_image": {
"base": "img/stadionzeitung/2026-09-04-ats-wartenfels/spieler",
"widths": [
320,
640,
1000
],
"ext": "png",
"alt": ""
},
"qr_image": "img/stadionzeitung/2026-09-04-ats-wartenfels/qr.png",
"vorwort": {
"heading": "Drei Tage Fußball im Katzbachtal",
"paragraphs": [
"Liebe Fußballfreunde,",
"herzlich willkommen zu unserem Sportfest. Ein besonderer Gruß gilt dem Schiedsrichtergespann und unseren Gästen vom ATS Wartenfels.",
"Bis Sonntag ist bei uns durchgehend Betrieb: am Samstag unsere Zweite, am Sonntag unsere Frauen, dazwischen die Turniere unserer Jugend. Danke an alle, die dieses Wochenende möglich machen.",
"Der 7:3-Heimsieg gegen Marktschorgast gibt uns Rückenwind. Leidenschaft, Wille, Heimsieg. Los geht's!"
],
"closing": "Rot-schwarze Grüße",
"signee_name": "Benedikt Höfner",
"signee_role": "Sportlicher Leiter"
},
"interview": null,
"aufruf": null,
"veranstaltung": "sportfest-2026",
"cover": {
"teaser": "Das komplette Programm zum Sportfest und die Spielpläne aller vier Jugendturniere."
},
"verfasser_photo": {
"base": "img/stadionzeitung/2026-09-04-ats-wartenfels/verfasser",
"widths": [
120,
222
],
"alt": ""
},
"termine_snapshot": [
{
"date": "2026-09-04",
"date_end": "2026-09-06",
"title": "Sportfest 2026",
"department": "verein",
"type": "event",
"meta": "16:30 Uhr · Hans-Rausch-Sportanlage",
"href": "/veranstaltungen/sportfest-2026",
"time": "16:30",
"location": "Hans-Rausch-Sportanlage",
"raw": {
"slug": "sportfest-2026",
"title": "Sportfest 2026",
"date_start": "2026-09-04",
"date_end": "2026-09-06",
"time": "16:30",
"location": "Hans-Rausch-Sportanlage",
"department": "verein",
"status": "veroeffentlicht",
"text": "Drei Tage Fußball, Essen, Trinken, Kaffee und Kuchen: bei uns ist für groß und klein alles dabei, für die Kinder steht eine Hüpfburg.",
"ankuendigung": null,
"rueckblick": null,
"karte": "club",
"anfahrt": [],
"programm": [
{
"tag": "2026-09-04",
"punkte": [
{
"zeit": "16:30",
"titel": "Spiel unserer E2-Jugend"
},
{
"zeit": "18:00",
"titel": "Unsere erste Mannschaft gegen ATS Wartenfels",
"text": "Kreisklasse"
}
]
},
{
"tag": "2026-09-05",
"punkte": [
{
"zeit": "09:00",
"titel": "Turnier der G-Jugend"
},
{
"zeit": "12:00",
"titel": "Turnier der F1-Jugend"
},
{
"zeit": "12:00",
"titel": "Turnier der F2-Jugend"
},
{
"zeit": "14:30",
"titel": "Kinderolympiade",
"text": "bis 16:30 Uhr in der Turnhalle Maximum Gym"
},
{
"zeit": "15:00",
"titel": "Turnier der D1-Jugend"
},
{
"zeit": "18:00",
"titel": "Unsere zweite Mannschaft gegen SV Weidenberg III/SSV Warmensteinach II",
"text": "Reserve"
}
]
},
{
"tag": "2026-09-06",
"punkte": [
{
"zeit": "11:00",
"titel": "Unsere Frauenmannschaft gegen 1. FC 1928 Schwarzenbach/Saale",
"text": "Kreisliga Ost"
},
{
"zeit": "13:00",
"titel": "Turnier der E1-Jugend"
},
{
"zeit": "15:00",
"titel": "Spiel unserer D2-Jugend"
},
{
"zeit": "16:30",
"titel": "Spiel unserer C/B-Jugend"
}
]
}
],
"turniere": [
{
"key": "f1",
"title": "F1-Jugend",
"date": "2026-09-05",
"start": "12:00",
"spieldauer": 10,
"modus": "Jeder gegen jeden mit Hin und Rückspiel",
"teams": [
"VfR Katschenreuth 1",
"SV Motschenbach 1",
"TSV Neudrossenfeld 1"
],
"spiele": [
{
"nr": 1,
"zeit": "12:00",
"heim": "SV Motschenbach 1",
"gast": "TSV Neudrossenfeld 1"
},
{
"nr": 2,
"zeit": "12:15",
"heim": "VfR Katschenreuth 1",
"gast": "SV Motschenbach 1"
},
{
"nr": 3,
"zeit": "12:30",
"heim": "TSV Neudrossenfeld 1",
"gast": "VfR Katschenreuth 1"
},
{
"nr": 4,
"zeit": "12:45",
"heim": "TSV Neudrossenfeld 1",
"gast": "SV Motschenbach 1"
},
{
"nr": 5,
"zeit": "13:00",
"heim": "SV Motschenbach 1",
"gast": "VfR Katschenreuth 1"
},
{
"nr": 6,
"zeit": "13:15",
"heim": "VfR Katschenreuth 1",
"gast": "TSV Neudrossenfeld 1"
}
]
},
{
"key": "f2",
"title": "F2-Jugend",
"date": "2026-09-05",
"start": "12:00",
"spieldauer": 15,
"modus": "Jeder gegen jeden",
"teams": [
"TSV 08 Kulmbach",
"SG Neuenmarkt",
"VfR Katschenreuth 2",
"SV Motschenbach 2"
],
"spiele": [
{
"nr": 1,
"zeit": "12:00",
"heim": "SG Neuenmarkt",
"gast": "SV Motschenbach 2"
},
{
"nr": 2,
"zeit": "12:16",
"heim": "TSV 08 Kulmbach",
"gast": "VfR Katschenreuth 2"
},
{
"nr": 3,
"zeit": "12:32",
"heim": "SG Neuenmarkt",
"gast": "TSV 08 Kulmbach"
},
{
"nr": 4,
"zeit": "12:48",
"heim": "VfR Katschenreuth 2",
"gast": "SV Motschenbach 2"
},
{
"nr": 5,
"zeit": "13:04",
"heim": "SV Motschenbach 2",
"gast": "TSV 08 Kulmbach"
},
{
"nr": 6,
"zeit": "13:20",
"heim": "VfR Katschenreuth 2",
"gast": "SG Neuenmarkt"
}
]
},
{
"key": "d1",
"title": "D1-Jugend",
"date": "2026-09-05",
"start": "15:00",
"spieldauer": 35,
"modus": "Jeder gegen jeden",
"teams": [
"TSV 08 Kulmbach",
"JFG Maintal/Friesenbachtal",
"VfB Kulmbach"
],
"spiele": [
{
"nr": 1,
"zeit": "15:00",
"heim": "TSV 08 Kulmbach",
"gast": "JFG Maintal/Friesenbachtal"
},
{
"nr": 2,
"zeit": "15:45",
"heim": "JFG Maintal/Friesenbachtal",
"gast": "VfB Kulmbach"
},
{
"nr": 3,
"zeit": "16:30",
"heim": "VfB Kulmbach",
"gast": "TSV 08 Kulmbach"
}
]
},
{
"key": "e1",
"title": "E1-Jugend",
"date": "2026-09-06",
"start": "13:00",
"spieldauer": 12,
"felder": 2,
"modus": "Jeder gegen jeden",
"teams": [
"TSV 08 Kulmbach",
"SV Motschenbach 2",
"VfB Kulmbach 2",
"VfR Katschenreuth 2",
"SG Wirsberg"
],
"spiele": [
{
"nr": 1,
"zeit": "13:00",
"feld": 1,
"heim": "TSV 08 Kulmbach",
"gast": "SG Wirsberg"
},
{
"nr": 2,
"zeit": "13:00",
"feld": 2,
"heim": "SV Motschenbach 2",
"gast": "VfB Kulmbach 2"
},
{
"nr": 3,
"zeit": "13:16",
"feld": 1,
"heim": "VfR Katschenreuth 2",
"gast": "TSV 08 Kulmbach"
},
{
"nr": 4,
"zeit": "13:16",
"feld": 2,
"heim": "VfB Kulmbach 2",
"gast": "SG Wirsberg"
},
{
"nr": 5,
"zeit": "13:32",
"feld": 1,
"heim": "VfR Katschenreuth 2",
"gast": "SV Motschenbach 2"
},
{
"nr": 6,
"zeit": "13:32",
"feld": 2,
"heim": "VfB Kulmbach 2",
"gast": "TSV 08 Kulmbach"
},
{
"nr": 7,
"zeit": "13:48",
"feld": 1,
"heim": "SG Wirsberg",
"gast": "VfR Katschenreuth 2"
},
{
"nr": 8,
"zeit": "13:48",
"feld": 2,
"heim": "TSV 08 Kulmbach",
"gast": "SV Motschenbach 2"
},
{
"nr": 9,
"zeit": "14:04",
"feld": 1,
"heim": "VfR Katschenreuth 2",
"gast": "VfB Kulmbach 2"
},
{
"nr": 10,
"zeit": "14:04",
"feld": 2,
"heim": "SV Motschenbach 2",
"gast": "SG Wirsberg"
}
]
}
],
"plakate": [
{
"base": "img/veranstaltungen/sportfest-2026/plakat-01",
"widths": [
640,
1000,
1587
],
"alt": "Plakat zum Sportfest 2026 mit Luftbild unserer Sportanlage und den Terminen vom 4. bis 6. September",
"source": "1-ankuendigung.png"
},
{
"base": "img/veranstaltungen/sportfest-2026/plakat-02",
"widths": [
640,
1000,
1587
],
"alt": "Programmplakat zum Sportfest 2026 mit allen Spielen, Turnieren und der Kinderolympiade am Samstag",
"source": "2-programm.png"
}
],
"galerie": []
}
},
{
"date": "2026-09-05",
"date_end": null,
"title": "(SG1) TSV Melkendorf III/ TSV 08 Kulmbach II (SG 2) SV Weidenberg III/SSV Warmensteinach II (flex)",
"department": "fussball",
"type": "spiel",
"meta": "Heimspiel · Reserve BK 5 BT-KU",
"href": "/matchcenter",
"kickoff": "2026-09-05T18:00",
"team_name": "2. Mannschaft",
"league": "Reserve BK 5 BT-KU",
"raw": {
"kickoff": "2026-09-05T18:00",
"date_display": "Sa, 05.09.",
"time_display": "18:00 Uhr",
"competition": "Liga",
"home": "(SG1) TSV Melkendorf III/ TSV 08 Kulmbach II",
"away": "(SG 2) SV Weidenberg III/SSV Warmensteinach II (flex)",
"home_crest": "img/crests/00ES8GNK4O000002VV0AG08LVUPGND5I.png",
"away_crest": "img/crests/00ES8GNK4O000013VV0AG08LVUPGND5I.png",
"is_home": true,
"team_key": "zweite-mannschaft",
"team_name": "2. Mannschaft"
}
},
{
"date": "2026-09-06",
"date_end": null,
"title": "TSV 08 Kulmbach 1. FC 1928 Schwarzenbach/Saale",
"department": "fussball",
"type": "spiel",
"meta": "Heimspiel · Frauen KL Ost",
"href": "/matchcenter",
"kickoff": "2026-09-06T11:00",
"team_name": "Frauenmannschaft",
"league": "Frauen KL Ost",
"raw": {
"kickoff": "2026-09-06T11:00",
"date_display": "So, 06.09.",
"time_display": "11:00 Uhr",
"competition": "Liga",
"home": "TSV 08 Kulmbach",
"away": "1. FC 1928 Schwarzenbach/Saale",
"home_crest": "img/crests/00ES8GNK3G000012VV0AG08LVUPGND5I.png",
"away_crest": "img/crests/00ES8GNK9O00000QVV0AG08LVUPGND5I.png",
"is_home": true,
"team_key": "damen",
"team_name": "Frauenmannschaft"
}
},
{
"date": "2026-09-13",
"date_end": null,
"title": "TSV 08 Kulmbach TSV Engelmannsreuth",
"department": "fussball",
"type": "spiel",
"meta": "Heimspiel · Frauen KL Ost",
"href": "/matchcenter",
"kickoff": "2026-09-13T10:30",
"team_name": "Frauenmannschaft",
"league": "Frauen KL Ost",
"raw": {
"kickoff": "2026-09-13T10:30",
"date_display": "So, 13.09.",
"time_display": "10:30 Uhr",
"competition": "Liga",
"home": "TSV 08 Kulmbach",
"away": "TSV Engelmannsreuth",
"home_crest": "img/crests/00ES8GNK3G000012VV0AG08LVUPGND5I.png",
"away_crest": "img/crests/00ES8GNK3G000009VV0AG08LVUPGND5I.png",
"is_home": true,
"team_key": "damen",
"team_name": "Frauenmannschaft"
}
},
{
"date": "2026-09-13",
"date_end": null,
"title": "SV Lindenhardt II flex (SG1) TSV Melkendorf III/ TSV 08 Kulmbach II",
"department": "fussball",
"type": "spiel",
"meta": "Auswärtsspiel · Reserve BK 5 BT-KU",
"href": "/matchcenter",
"kickoff": "2026-09-13T13:00",
"team_name": "2. Mannschaft",
"league": "Reserve BK 5 BT-KU",
"raw": {
"kickoff": "2026-09-13T13:00",
"date_display": "So, 13.09.",
"time_display": "13:00 Uhr",
"competition": "Liga",
"home": "SV Lindenhardt II flex",
"away": "(SG1) TSV Melkendorf III/ TSV 08 Kulmbach II",
"home_crest": "img/crests/00ES8GNK3G00001AVV0AG08LVUPGND5I.png",
"away_crest": "img/crests/00ES8GNK4O000002VV0AG08LVUPGND5I.png",
"is_home": false,
"team_key": "zweite-mannschaft",
"team_name": "2. Mannschaft"
}
}
],
"images": [
{
"type": "live",
"page": "cover"
},
{
"type": "live",
"page": "vorwort"
},
{
"type": "live",
"page": "programm"
},
{
"type": "image",
"base": "img/anzeigen/eldorado",
"widths": [
480,
960,
1440
],
"alt": "Anzeige: eldorado Radsporttechnik Kulmbach"
},
{
"type": "live",
"page": "turnier",
"turnier": "f1"
},
{
"type": "live",
"page": "turnier",
"turnier": "f2"
},
{
"type": "live",
"page": "turnier",
"turnier": "d1"
},
{
"type": "live",
"page": "turnier",
"turnier": "e1"
},
{
"type": "image",
"base": "img/anzeigen/egu",
"widths": [
480,
960,
1440
],
"alt": "Anzeige: Erfrischungsgetränke-Union Kulmbacher Gruppe GmbH"
},
{
"type": "image",
"base": "img/anzeigen/hofmann-graef",
"widths": [
480,
960,
1440
],
"alt": "Anzeige: Buchhandlung Hofmann, Kulmbach, und Automobilwerkstatt Gräf, Thurnau"
},
{
"type": "live",
"page": "ergebnisse"
},
{
"type": "image",
"base": "img/anzeigen/muench-richterstegner",
"widths": [
480,
960,
1440
],
"alt": "Anzeige: Planungsbüro Münch und Richter & Stegner Steuerungstechnik"
},
{
"type": "live",
"page": "gegner",
"team": "erste-mannschaft"
},
{
"type": "live",
"page": "gegner",
"team": "zweite-mannschaft"
},
{
"type": "live",
"page": "gegner",
"team": "damen"
},
{
"type": "image",
"base": "img/anzeigen/malteser-herrmann",
"widths": [
480,
960,
1440
],
"alt": "Anzeige: Malteser-Hilfsdienst und Schlosserei Herrmann, Kulmbach"
},
{
"type": "image",
"base": "img/anzeigen/apotheken-wenkel",
"widths": [
480,
960,
1440
],
"alt": "Anzeige: Apotheke im Fritz, Stadtpark Apotheke und Schlüsseldienst Wenkel, Kulmbach"
},
{
"type": "live",
"page": "tabelle",
"team": "erste-mannschaft"
},
{
"type": "live",
"page": "tabelle",
"team": "zweite-mannschaft"
},
{
"type": "live",
"page": "tabelle",
"team": "damen"
},
{
"type": "image",
"base": "img/anzeigen/karl-geyer",
"widths": [
480,
960,
1440
],
"alt": "Anzeige: Geyer Farbe + Raum, Kulmbach, Starthilfe Boden"
},
{
"type": "live",
"page": "vorschau"
},
{
"type": "image",
"base": "img/anzeigen/gsb",
"widths": [
480,
960,
1440
],
"alt": "Anzeige: GSB Security und GSB Gebäude Service, Bindlach"
},
{
"type": "image",
"base": "img/anzeigen/physiofit-wohlfart",
"widths": [
480,
960,
1440
],
"alt": "Anzeige: Physio Fit Neudrossenfeld und Textilpflege Wohlfart, Kulmbach"
},
{
"type": "live",
"page": "termine"
},
{
"type": "image",
"base": "img/anzeigen/sport2000-pizza",
"widths": [
480,
960,
1440
],
"alt": "Anzeige: Sport 2000 Downstairs und Kulmbacher Pizza-Service"
},
{
"type": "image",
"base": "img/anzeigen/schulz-csu",
"widths": [
480,
960,
1440
],
"alt": "Anzeige: Schreinerei Schulz, Mainleus, und CSU Stadtverband Kulmbach"
},
{
"type": "live",
"page": "news"
},
{
"type": "image",
"base": "img/anzeigen/mattis-ka2",
"widths": [
480,
960,
1440
],
"alt": "Anzeige: Karl Mattis Flaschnerei und KA2 Fitness, Kulmbach"
},
{
"type": "live",
"page": "kontakt"
},
{
"type": "image",
"base": "img/anzeigen/motor-nuetzel",
"widths": [
480,
960,
1440
],
"alt": "Anzeige: Motor-Nützel Vertriebs-GmbH, Bayreuth"
},
{
"type": "image",
"base": "img/anzeigen/vereinskarte-edeka",
"widths": [
480,
960,
1410
],
"alt": "Eigenanzeige: So funktioniert die Vereinskarte beim E center Seidl Kulmbach"
},
{
"type": "live",
"page": "mitglied"
},
{
"type": "image",
"base": "img/anzeigen/trapper-verkehrsakademie",
"widths": [
480,
960,
1440
],
"alt": "Anzeige: Trapper GmbH Entsorgungsfachbetrieb und Verkehrsakademie, Kulmbach"
},
{
"type": "live",
"page": "historie"
},
{
"type": "image",
"base": "img/anzeigen/ohnemueller-dippold",
"widths": [
480,
960,
1440
],
"alt": "Anzeige: Gaststätte und Metzgerei Ohne-Müller, Kulmbach-Weiher, und Bäckerei Dippold, Melkendorf"
},
{
"type": "image",
"base": "img/anzeigen/hanft",
"widths": [
480,
960,
1440
],
"alt": "Anzeige: Hanft Bürotechnik GmbH, Kulmbach"
},
{
"type": "live",
"page": "sportheim"
},
{
"type": "image",
"base": "img/anzeigen/elma-kleinheinz",
"widths": [
480,
960,
1440
],
"alt": "Anzeige: elma GmbH Bayreuth und Metzgerei Kleinheinz, Kulmbach"
},
{
"type": "live",
"page": "partner"
},
{
"type": "live",
"page": "danke",
"anzeige": {
"base": "img/anzeigen/emons",
"widths": [
480,
960,
1141
],
"alt": "Anzeige: Emons Spedition Himmelkron, Ihr Partner für nationale und internationale Transporte"
}
},
{
"type": "image",
"base": "img/anzeigen/stadionzeitung-digital",
"widths": [
480,
960,
1440
],
"alt": "Eigenanzeige: Unsere Stadionzeitung gibt es jetzt auch online, mit QR-Code zum Scannen"
},
{
"type": "image",
"base": "img/anzeigen/gagel-pickelmann",
"widths": [
480,
960,
1440
],
"alt": "Anzeige: Gagel Bäder und Mineralölhandel Pickelmann"
},
{
"type": "live",
"page": "momente"
},
{
"type": "image",
"base": "img/anzeigen/schramm",
"widths": [
480,
960,
1440
],
"alt": "Anzeige: Landgasthof und Metzgerei Schramm, Forstlahm"
},
{
"type": "image",
"base": "img/anzeigen/tagesskifahrt-2027",
"widths": [
480,
960,
1440
],
"alt": "Eigenanzeige: Unsere Tagesskifahrt ins Hochzillertal am 20. Februar 2027"
},
{
"type": "live",
"page": "impressum"
},
{
"type": "image",
"base": "img/stadionzeitung/2026-09-04-ats-wartenfels/rueckseite",
"widths": [
480,
960,
1410
],
"alt": "Rückseite der Stadionzeitung gegen ATS Wartenfels"
}
]
},
{
"slug": "2026-08-29-asv-marktschorgast",
"opponent": "ASV Marktschorgast",