Files
platz/work/innenhoefe/Umfeld.svg
T
Michael Stangl 00dffc59eb Web-MVP (M1): FastAPI-API, Testoberflaeche, tische.ini-Upload, zwei neue Beispiele
- web/main.py: Session-basierte REST-API um den GA-Kern (POST /sitzung,
  .../tische, .../tische-datei, .../personen, .../berechnen,
  GET .../ergebnis[.svg]); Sessions in-memory mit 24h-TTL
- web/static/index.html: einfache Browser-Testoberflaeche (Tisch-Tabelle
  mit Presets, tische.ini-Upload, CSV-Gaesteliste, Kennzahlen, SVG)
- bin/run_web.bat/.sh + run_web_helper.ps1: start/stop/status inkl.
  Aufraeumen verwaister uvicorn-Reload-Kindprozesse (Zombie-Sockets)
- work/hochzeit: 120 Hochzeitsgaeste, Ehrentafel, Kindertisch/Teenager-
  Tisch fest gesetzt, Kinderalter normalverteilt, ~85% Auslastung
- work/innenhoefe: 300 Gaeste in zwei trapezfoermigen Innenhoefen mit
  4er-Tischen, 12 VIPs vor der Buehne, Umfeld.svg mit Tanzflaeche/Band
- Roadmap: Konzeptentscheidungen 1-11 (Zielgruppe, Einmalzahlung, MoR,
  Hetzner, Zwei-Marken-Strategie Sitz&Platz/SeatWonder), Namensrecherche
  im Anhang, M1-Fortschritt und GA-Lasttest-Datenpunkt dokumentiert

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 10:21:45 +02:00

111 lines
9.1 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="1240" height="420" viewBox="0 0 1240 420" font-family="sans-serif">
<rect width="100%" height="100%" fill="white"/>
<text x="620" y="26" text-anchor="middle" font-size="18" fill="#333">Sommerfest — Umfeld/Grundriss: zwei trapezfoermige Innenhoefe (88 Vierertische, 300 Gaeste)</text>
<polygon points="48,96 512,96 432,320 128,320" fill="#f5f0e6" stroke="#7a6a50" stroke-width="2"/>
<text x="280" y="342" text-anchor="middle" font-size="14" fill="#7a6a50">Hof 1 (Tische 1-45)</text>
<polygon points="688,96 1152,96 1032,320 808,320" fill="#f5f0e6" stroke="#7a6a50" stroke-width="2"/>
<text x="920" y="342" text-anchor="middle" font-size="14" fill="#7a6a50">Hof 2 (Tische 46-88)</text>
<rect x="536" y="24" width="168" height="48" fill="#d9c9e8" stroke="#6b4d8a" stroke-width="2"/>
<text x="620" y="50" text-anchor="middle" font-size="13" fill="#4a3465">Buehne — Band</text>
<rect x="536" y="92" width="168" height="176" fill="#cfe3f0" stroke="#4a7ba0" stroke-width="2" stroke-dasharray="8 4"/>
<text x="620" y="180" text-anchor="middle" font-size="13" fill="#2d566f">Tanzflaeche</text>
<text x="16" y="208" text-anchor="start" font-size="12" fill="#a03030">Eingang West</text>
<text x="1184" y="208" text-anchor="end" font-size="12" fill="#a03030">Eingang Ost</text>
<text x="620" y="328" text-anchor="middle" font-size="12" fill="#a03030">Eingang Sued</text>
<polygon points="42,192 42,224 66,208" fill="#a03030"/>
<polygon points="1158,192 1158,224 1134,208" fill="#a03030"/>
<polygon points="604,318 636,318 620,294" fill="#a03030"/>
<circle cx="80" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="120" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="160" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="200" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="240" cy="128" r="12" fill="white" stroke="#c0392b" stroke-width="2.5"/>
<text x="240" y="131" text-anchor="middle" font-size="9" fill="#c0392b">VIP</text>
<circle cx="280" cy="128" r="12" fill="white" stroke="#c0392b" stroke-width="2.5"/>
<text x="280" y="131" text-anchor="middle" font-size="9" fill="#c0392b">VIP</text>
<circle cx="320" cy="128" r="12" fill="white" stroke="#c0392b" stroke-width="2.5"/>
<text x="320" y="131" text-anchor="middle" font-size="9" fill="#c0392b">VIP</text>
<circle cx="360" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="400" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="440" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="480" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="100" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="140" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="180" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="220" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="260" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="300" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="340" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="380" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="420" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="460" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="120" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="160" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="200" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="240" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="280" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="320" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="360" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="400" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="440" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="140" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="180" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="220" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="260" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="300" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="340" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="380" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="420" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="160" cy="288" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="200" cy="288" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="240" cy="288" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="280" cy="288" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="320" cy="288" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="360" cy="288" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="400" cy="288" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="720" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="760" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="800" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="840" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="880" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="920" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="960" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="1000" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="1040" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="1080" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="1120" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="740" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="780" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="820" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="860" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="900" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="940" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="980" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="1020" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="1060" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="1100" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="760" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="800" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="840" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="880" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="920" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="960" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="1000" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="1040" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="1080" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="780" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="820" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="860" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="900" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="940" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="980" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="1020" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="1060" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="840" cy="288" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="880" cy="288" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="920" cy="288" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="960" cy="288" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="1000" cy="288" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<text x="620" y="408" text-anchor="middle" font-size="11" fill="#888">Umfeld.svg — Grundriss-Elemente (Buehne, Band, Tanzflaeche, Eingaenge) werden nicht mitoptimiert; VIP-Tische 5/6/7 vor der Buehne</text>
</svg>