00dffc59eb
- 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>
159 lines
14 KiB
XML
159 lines
14 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="995.887" height="667.258" viewBox="0 0 995.887 667.258">
|
|
<rect width="100%" height="100%" fill="white"/>
|
|
<circle cx="744.415" cy="251.472" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
|
|
<text x="744.415" y="192.979" text-anchor="middle" font-size="10" fill="black">Tisch 6</text>
|
|
<circle cx="87.1573" cy="415.786" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
|
|
<text x="87.1573" y="357.293" text-anchor="middle" font-size="10" fill="black">Tisch 7</text>
|
|
<circle cx="251.472" cy="251.472" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
|
|
<text x="251.472" y="192.979" text-anchor="middle" font-size="10" fill="black">Tisch 3</text>
|
|
<circle cx="251.472" cy="216.979" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
|
|
<circle cx="281.344" cy="268.718" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
|
|
<circle cx="221.6" cy="268.718" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
|
|
<circle cx="908.73" cy="415.786" r="48.4" fill="white" stroke="black" stroke-width="1.5"/>
|
|
<text x="908.73" y="365.386" text-anchor="middle" font-size="10" fill="black">Tisch 17</text>
|
|
<circle cx="908.73" cy="389.386" r="12" fill="#888888" stroke="black" stroke-width="1"/>
|
|
<circle cx="931.593" cy="402.586" r="12" fill="#888888" stroke="black" stroke-width="1"/>
|
|
<circle cx="931.593" cy="428.986" r="12" fill="#888888" stroke="black" stroke-width="1"/>
|
|
<circle cx="908.73" cy="442.186" r="12" fill="#888888" stroke="black" stroke-width="1"/>
|
|
<circle cx="885.867" cy="428.986" r="12" fill="#888888" stroke="black" stroke-width="1"/>
|
|
<circle cx="885.867" cy="402.586" r="12" fill="#888888" stroke="black" stroke-width="1"/>
|
|
<circle cx="580.101" cy="251.472" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
|
|
<text x="580.101" y="192.979" text-anchor="middle" font-size="10" fill="black">Tisch 5</text>
|
|
<circle cx="580.101" cy="216.979" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
|
|
<circle cx="607.069" cy="229.966" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
|
|
<circle cx="613.729" cy="259.147" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
|
|
<circle cx="595.067" cy="282.549" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
|
|
<circle cx="565.135" cy="282.549" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
|
|
<circle cx="546.472" cy="259.147" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
|
|
<circle cx="553.133" cy="229.966" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
|
|
<circle cx="415.786" cy="580.101" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
|
|
<text x="415.786" y="521.608" text-anchor="middle" font-size="10" fill="black">Tisch 14</text>
|
|
<circle cx="415.786" cy="545.608" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
|
|
<circle cx="442.754" cy="558.595" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
|
|
<circle cx="449.415" cy="587.776" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
|
|
<circle cx="430.752" cy="611.178" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
|
|
<circle cx="400.82" cy="611.178" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
|
|
<circle cx="382.158" cy="587.776" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
|
|
<circle cx="388.818" cy="558.595" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
|
|
<circle cx="87.1573" cy="251.472" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
|
|
<text x="87.1573" y="192.979" text-anchor="middle" font-size="10" fill="black">Tisch 2</text>
|
|
<circle cx="87.1573" cy="216.979" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
|
|
<circle cx="111.548" cy="227.081" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
|
|
<circle cx="121.651" cy="251.472" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
|
|
<circle cx="111.548" cy="275.862" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
|
|
<circle cx="87.1573" cy="285.965" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
|
|
<circle cx="62.7669" cy="275.862" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
|
|
<circle cx="52.664" cy="251.472" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
|
|
<circle cx="62.7669" cy="227.081" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
|
|
<circle cx="415.786" cy="251.472" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
|
|
<text x="415.786" y="192.979" text-anchor="middle" font-size="10" fill="black">Tisch 4</text>
|
|
<circle cx="415.786" cy="216.979" r="12" fill="#bfef45" stroke="black" stroke-width="1"/>
|
|
<circle cx="440.177" cy="227.081" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
|
|
<circle cx="450.28" cy="251.472" r="12" fill="#bfef45" stroke="black" stroke-width="1"/>
|
|
<circle cx="440.177" cy="275.862" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
|
|
<circle cx="415.786" cy="285.965" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
|
|
<circle cx="391.396" cy="275.862" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
|
|
<circle cx="381.293" cy="251.472" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
|
|
<circle cx="391.396" cy="227.081" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
|
|
<circle cx="251.472" cy="415.786" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
|
|
<text x="251.472" y="357.293" text-anchor="middle" font-size="10" fill="black">Tisch 8</text>
|
|
<circle cx="251.472" cy="381.293" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
|
|
<circle cx="275.862" cy="391.396" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
|
|
<circle cx="285.965" cy="415.786" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
|
|
<circle cx="275.862" cy="440.177" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
|
|
<circle cx="251.472" cy="450.28" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
|
|
<circle cx="227.081" cy="440.177" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
|
|
<circle cx="216.979" cy="415.786" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
|
|
<circle cx="227.081" cy="391.396" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
|
|
<circle cx="415.786" cy="415.786" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
|
|
<text x="415.786" y="357.293" text-anchor="middle" font-size="10" fill="black">Tisch 9</text>
|
|
<circle cx="415.786" cy="381.293" r="12" fill="#469990" stroke="black" stroke-width="1"/>
|
|
<circle cx="440.177" cy="391.396" r="12" fill="#469990" stroke="black" stroke-width="1"/>
|
|
<circle cx="450.28" cy="415.786" r="12" fill="#469990" stroke="black" stroke-width="1"/>
|
|
<circle cx="440.177" cy="440.177" r="12" fill="#469990" stroke="black" stroke-width="1"/>
|
|
<circle cx="415.786" cy="450.28" r="12" fill="#469990" stroke="black" stroke-width="1"/>
|
|
<circle cx="391.396" cy="440.177" r="12" fill="#469990" stroke="black" stroke-width="1"/>
|
|
<circle cx="381.293" cy="415.786" r="12" fill="#469990" stroke="black" stroke-width="1"/>
|
|
<circle cx="391.396" cy="391.396" r="12" fill="#469990" stroke="black" stroke-width="1"/>
|
|
<circle cx="580.101" cy="415.786" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
|
|
<text x="580.101" y="357.293" text-anchor="middle" font-size="10" fill="black">Tisch 10</text>
|
|
<circle cx="580.101" cy="381.293" r="12" fill="#dcbeff" stroke="black" stroke-width="1"/>
|
|
<circle cx="604.491" cy="391.396" r="12" fill="#9a6324" stroke="black" stroke-width="1"/>
|
|
<circle cx="614.594" cy="415.786" r="12" fill="#dcbeff" stroke="black" stroke-width="1"/>
|
|
<circle cx="604.491" cy="440.177" r="12" fill="#dcbeff" stroke="black" stroke-width="1"/>
|
|
<circle cx="580.101" cy="450.28" r="12" fill="#dcbeff" stroke="black" stroke-width="1"/>
|
|
<circle cx="555.711" cy="440.177" r="12" fill="#dcbeff" stroke="black" stroke-width="1"/>
|
|
<circle cx="545.608" cy="415.786" r="12" fill="#dcbeff" stroke="black" stroke-width="1"/>
|
|
<circle cx="555.711" cy="391.396" r="12" fill="#dcbeff" stroke="black" stroke-width="1"/>
|
|
<circle cx="744.415" cy="415.786" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
|
|
<text x="744.415" y="357.293" text-anchor="middle" font-size="10" fill="black">Tisch 11</text>
|
|
<circle cx="744.415" cy="381.293" r="12" fill="#800000" stroke="black" stroke-width="1"/>
|
|
<circle cx="768.806" cy="391.396" r="12" fill="#800000" stroke="black" stroke-width="1"/>
|
|
<circle cx="778.909" cy="415.786" r="12" fill="#aaffc3" stroke="black" stroke-width="1"/>
|
|
<circle cx="768.806" cy="440.177" r="12" fill="#800000" stroke="black" stroke-width="1"/>
|
|
<circle cx="744.415" cy="450.28" r="12" fill="#800000" stroke="black" stroke-width="1"/>
|
|
<circle cx="720.025" cy="440.177" r="12" fill="#aaffc3" stroke="black" stroke-width="1"/>
|
|
<circle cx="709.922" cy="415.786" r="12" fill="#800000" stroke="black" stroke-width="1"/>
|
|
<circle cx="720.025" cy="391.396" r="12" fill="#800000" stroke="black" stroke-width="1"/>
|
|
<circle cx="87.1573" cy="580.101" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
|
|
<text x="87.1573" y="521.608" text-anchor="middle" font-size="10" fill="black">Tisch 12</text>
|
|
<circle cx="87.1573" cy="545.608" r="12" fill="#000075" stroke="black" stroke-width="1"/>
|
|
<circle cx="111.548" cy="555.711" r="12" fill="#000075" stroke="black" stroke-width="1"/>
|
|
<circle cx="121.651" cy="580.101" r="12" fill="#000075" stroke="black" stroke-width="1"/>
|
|
<circle cx="111.548" cy="604.491" r="12" fill="#000075" stroke="black" stroke-width="1"/>
|
|
<circle cx="87.1573" cy="614.594" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
|
|
<circle cx="62.7669" cy="604.491" r="12" fill="#000075" stroke="black" stroke-width="1"/>
|
|
<circle cx="52.664" cy="580.101" r="12" fill="#000075" stroke="black" stroke-width="1"/>
|
|
<circle cx="62.7669" cy="555.711" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
|
|
<circle cx="251.472" cy="580.101" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
|
|
<text x="251.472" y="521.608" text-anchor="middle" font-size="10" fill="black">Tisch 13</text>
|
|
<circle cx="251.472" cy="545.608" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
|
|
<circle cx="275.862" cy="555.711" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
|
|
<circle cx="285.965" cy="580.101" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
|
|
<circle cx="275.862" cy="604.491" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
|
|
<circle cx="251.472" cy="614.594" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
|
|
<circle cx="227.081" cy="604.491" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
|
|
<circle cx="216.979" cy="580.101" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
|
|
<circle cx="227.081" cy="555.711" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
|
|
<circle cx="580.101" cy="580.101" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
|
|
<text x="580.101" y="521.608" text-anchor="middle" font-size="10" fill="black">Tisch 15</text>
|
|
<circle cx="580.101" cy="545.608" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
|
|
<circle cx="604.491" cy="555.711" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
|
|
<circle cx="614.594" cy="580.101" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
|
|
<circle cx="604.491" cy="604.491" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
|
|
<circle cx="580.101" cy="614.594" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
|
|
<circle cx="555.711" cy="604.491" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
|
|
<circle cx="545.608" cy="580.101" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
|
|
<circle cx="555.711" cy="555.711" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
|
|
<circle cx="415.786" cy="87.1573" r="73.0009" fill="white" stroke="black" stroke-width="1.5"/>
|
|
<text x="415.786" y="12.1564" text-anchor="middle" font-size="10" fill="black">Tisch 1</text>
|
|
<circle cx="415.786" cy="36.1564" r="12" fill="#888888" stroke="black" stroke-width="1"/>
|
|
<circle cx="441.287" cy="42.9892" r="12" fill="#888888" stroke="black" stroke-width="1"/>
|
|
<circle cx="459.954" cy="61.6568" r="12" fill="#888888" stroke="black" stroke-width="1"/>
|
|
<circle cx="466.787" cy="87.1573" r="12" fill="#bfef45" stroke="black" stroke-width="1"/>
|
|
<circle cx="459.954" cy="112.658" r="12" fill="#888888" stroke="black" stroke-width="1"/>
|
|
<circle cx="441.287" cy="131.325" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
|
|
<circle cx="415.786" cy="138.158" r="12" fill="#bfef45" stroke="black" stroke-width="1"/>
|
|
<circle cx="390.286" cy="131.325" r="12" fill="#888888" stroke="black" stroke-width="1"/>
|
|
<circle cx="371.618" cy="112.658" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
|
|
<circle cx="364.785" cy="87.1573" r="12" fill="#888888" stroke="black" stroke-width="1"/>
|
|
<circle cx="371.618" cy="61.6568" r="12" fill="#888888" stroke="black" stroke-width="1"/>
|
|
<circle cx="390.286" cy="42.9892" r="12" fill="#888888" stroke="black" stroke-width="1"/>
|
|
<circle cx="908.73" cy="251.472" r="77.1573" fill="white" stroke="black" stroke-width="1.5"/>
|
|
<text x="908.73" y="172.315" text-anchor="middle" font-size="10" fill="black">Tisch 16</text>
|
|
<circle cx="908.73" cy="196.315" r="12" fill="#888888" stroke="black" stroke-width="1"/>
|
|
<circle cx="934.363" cy="202.632" r="12" fill="#888888" stroke="black" stroke-width="1"/>
|
|
<circle cx="954.124" cy="220.139" r="12" fill="#888888" stroke="black" stroke-width="1"/>
|
|
<circle cx="963.485" cy="244.823" r="12" fill="#888888" stroke="black" stroke-width="1"/>
|
|
<circle cx="960.303" cy="271.031" r="12" fill="#888888" stroke="black" stroke-width="1"/>
|
|
<circle cx="945.306" cy="292.758" r="12" fill="#888888" stroke="black" stroke-width="1"/>
|
|
<circle cx="921.93" cy="305.026" r="12" fill="#888888" stroke="black" stroke-width="1"/>
|
|
<circle cx="895.53" cy="305.026" r="12" fill="#888888" stroke="black" stroke-width="1"/>
|
|
<circle cx="872.154" cy="292.758" r="12" fill="#888888" stroke="black" stroke-width="1"/>
|
|
<circle cx="857.157" cy="271.031" r="12" fill="#888888" stroke="black" stroke-width="1"/>
|
|
<circle cx="853.975" cy="244.823" r="12" fill="#888888" stroke="black" stroke-width="1"/>
|
|
<circle cx="863.336" cy="220.139" r="12" fill="#888888" stroke="black" stroke-width="1"/>
|
|
<circle cx="883.097" cy="202.632" r="12" fill="#888888" stroke="black" stroke-width="1"/>
|
|
</svg>
|