Initial commit: WrestleDesk full project

- Django backend with DRF (clubs, wrestlers, trainers, exercises, templates, trainings, homework, locations, leistungstest)
- Next.js 16 frontend with React, Shadcn UI, Tailwind
- JWT authentication
- Full CRUD for all entities
- Calendar view for trainings
- Homework management system
- Leistungstest tracking
This commit is contained in:
Andrej Spielmann
2026-03-26 13:24:57 +01:00
commit 3fefc550fe
256 changed files with 38295 additions and 0 deletions
@@ -0,0 +1,130 @@
<h2>Timer start → alle beginnen Übung 1 automatisch</h2>
<p class="subtitle">Soll = Reps (z.B. "3x10"). Trainer klickt "Erledigt" pro Ringer wenn fertig.</p>
<!-- Header: Timer + Start -->
<div style="background:#1B1A55;border-radius:12px;padding:16px 20px;display:flex;align-items:center;justify-content:space-between;margin-bottom:16px">
<div style="display:flex;align-items:center;gap:24px">
<span style="font-size:13px;font-weight:600;color:#9290C3;text-transform:uppercase;letter-spacing:1px">Gemeinsame Zeit</span>
<div style="font-size:36px;font-weight:bold;color:white;font-family:monospace;letter-spacing:2px">00:00</div>
</div>
<button style="background:#22c55e;color:white;padding:10px 24px;border-radius:8px;border:none;font-size:14px;font-weight:600;cursor:pointer">▶ Training starten</button>
</div>
<!-- WRESTLER ROWS -->
<div style="display:flex;flex-direction:column;gap:12px">
<!-- RINGER 1: Max — Übung 1 läuft gerade -->
<div style="border:2px solid #eab308;border-radius:12px;overflow:hidden;background:#fff">
<div style="display:flex;align-items:center;padding:12px 16px;background:#fef9c3;border-bottom:1px solid #fde047">
<div style="width:12px;height:12px;border-radius:50%;background:#eab308;margin-right:10px;flex-shrink:0"></div>
<div style="flex:1">
<div style="font-weight:700;font-size:16px;color:#a16207">Max Mustermann</div>
<div style="font-size:11px;color:#a16207;margin-top:1px">Übung 1 läuft...</div>
</div>
<div style="font-size:11px;color:#a16207;background:#fef3c7;padding:3px 10px;border-radius:10px;font-weight:600">0/3</div>
</div>
<div style="padding:14px 16px;display:flex;gap:10px;flex-wrap:wrap">
<!-- Übung 1: Aktiv -->
<div style="flex:1;min-width:160px;background:#fef9c3;border-radius:8px;padding:12px 14px;border:2px solid #eab308">
<div style="font-size:11px;color:#a16207;font-weight:600;margin-bottom:6px">▶ Liegestütze</div>
<div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:8px">
<span style="font-size:11px;color:#a16207;font-weight:500">Soll: <strong>3×10</strong></span>
<span style="font-size:20px;font-weight:700;color:#a16207;font-family:monospace">0:28</span>
</div>
<button style="width:100%;background:#166534;color:white;padding:8px;border-radius:6px;border:none;font-size:13px;font-weight:600;cursor:pointer">✓ Erledigt</button>
</div>
<!-- Übung 2+3: Wartend -->
<div style="flex:1;min-width:120px;background:#f8fafc;border-radius:8px;padding:10px 12px;border:1px solid #e2e8f0;opacity:0.6">
<div style="font-size:11px;color:#94a3b8;font-weight:600;margin-bottom:4px">Kniebeugen</div>
<div style="display:flex;justify-content:space-between;align-items:center">
<span style="font-size:11px;color:#94a3b8">Soll: 3×15</span>
<span style="font-size:11px;color:#94a3b8"></span>
</div>
</div>
<div style="flex:1;min-width:120px;background:#f8fafc;border-radius:8px;padding:10px 12px;border:1px solid #e2e8f0;opacity:0.6">
<div style="font-size:11px;color:#94a3b8;font-weight:600;margin-bottom:4px">Burpees</div>
<div style="display:flex;justify-content:space-between;align-items:center">
<span style="font-size:11px;color:#94a3b8">Soll: 3×20</span>
<span style="font-size:11px;color:#94a3b8"></span>
</div>
</div>
</div>
</div>
<!-- RINGER 2: Anna — Übung 1 läuft -->
<div style="border:2px solid #eab308;border-radius:12px;overflow:hidden;background:#fff">
<div style="display:flex;align-items:center;padding:12px 16px;background:#fef9c3;border-bottom:1px solid #fde047">
<div style="width:12px;height:12px;border-radius:50%;background:#eab308;margin-right:10px;flex-shrink:0"></div>
<div style="flex:1">
<div style="font-weight:700;font-size:16px;color:#a16207">Anna Schmidt</div>
<div style="font-size:11px;color:#a16207;margin-top:1px">Übung 1 läuft...</div>
</div>
<div style="font-size:11px;color:#a16207;background:#fef3c7;padding:3px 10px;border-radius:10px;font-weight:600">0/3</div>
</div>
<div style="padding:14px 16px;display:flex;gap:10px;flex-wrap:wrap">
<div style="flex:1;min-width:160px;background:#fef9c3;border-radius:8px;padding:12px 14px;border:2px solid #eab308">
<div style="font-size:11px;color:#a16207;font-weight:600;margin-bottom:6px">▶ Liegestütze</div>
<div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:8px">
<span style="font-size:11px;color:#a16207;font-weight:500">Soll: <strong>3×10</strong></span>
<span style="font-size:20px;font-weight:700;color:#a16207;font-family:monospace">0:31</span>
</div>
<button style="width:100%;background:#166534;color:white;padding:8px;border-radius:6px;border:none;font-size:13px;font-weight:600;cursor:pointer">✓ Erledigt</button>
</div>
<div style="flex:1;min-width:120px;background:#f8fafc;border-radius:8px;padding:10px 12px;border:1px solid #e2e8f0;opacity:0.6">
<div style="font-size:11px;color:#94a3b8;font-weight:600;margin-bottom:4px">Kniebeugen</div>
<div style="display:flex;justify-content:space-between;align-items:center">
<span style="font-size:11px;color:#94a3b8">Soll: 3×15</span>
<span style="font-size:11px;color:#94a3b8"></span>
</div>
</div>
<div style="flex:1;min-width:120px;background:#f8fafc;border-radius:8px;padding:10px 12px;border:1px solid #e2e8f0;opacity:0.6">
<div style="font-size:11px;color:#94a3b8;font-weight:600;margin-bottom:4px">Burpees</div>
<div style="display:flex;justify-content:space-between;align-items:center">
<span style="font-size:11px;color:#94a3b8">Soll: 3×20</span>
<span style="font-size:11px;color:#94a3b8"></span>
</div>
</div>
</div>
</div>
<!-- RINGER 3: Tom — Übung 1 läuft -->
<div style="border:2px solid #eab308;border-radius:12px;overflow:hidden;background:#fff">
<div style="display:flex;align-items:center;padding:12px 16px;background:#fef9c3;border-bottom:1px solid #fde047">
<div style="width:12px;height:12px;border-radius:50%;background:#eab308;margin-right:10px;flex-shrink:0"></div>
<div style="flex:1">
<div style="font-weight:700;font-size:16px;color:#a16207">Tom Klein</div>
<div style="font-size:11px;color:#a16207;margin-top:1px">Übung 1 läuft...</div>
</div>
<div style="font-size:11px;color:#a16207;background:#fef3c7;padding:3px 10px;border-radius:10px;font-weight:600">0/3</div>
</div>
<div style="padding:14px 16px;display:flex;gap:10px;flex-wrap:wrap">
<div style="flex:1;min-width:160px;background:#fef9c3;border-radius:8px;padding:12px 14px;border:2px solid #eab308">
<div style="font-size:11px;color:#a16207;font-weight:600;margin-bottom:6px">▶ Liegestütze</div>
<div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:8px">
<span style="font-size:11px;color:#a16207;font-weight:500">Soll: <strong>3×10</strong></span>
<span style="font-size:20px;font-weight:700;color:#a16207;font-family:monospace">0:22</span>
</div>
<button style="width:100%;background:#166534;color:white;padding:8px;border-radius:6px;border:none;font-size:13px;font-weight:600;cursor:pointer">✓ Erledigt</button>
</div>
<div style="flex:1;min-width:120px;background:#f8fafc;border-radius:8px;padding:10px 12px;border:1px solid #e2e8f0;opacity:0.6">
<div style="font-size:11px;color:#94a3b8;font-weight:600;margin-bottom:4px">Kniebeugen</div>
<div style="display:flex;justify-content;between;align-items:center">
<span style="font-size:11px;color:#94a3b8">Soll: 3×15</span>
<span style="font-size:11px;color:#94a3b8"></span>
</div>
</div>
<div style="flex:1;min-width:120px;background:#f8fafc;border-radius:8px;padding:10px 12px;border:1px solid #e2e8f0;opacity:0.6">
<div style="font-size:11px;color:#94a3b8;font-weight:600;margin-bottom:4px">Burpees</div>
<div style="display:flex;justify-content:space-between;align-items:center">
<span style="font-size:11px;color:#94a3b8">Soll: 3×20</span>
<span style="font-size:11px;color:#94a3b8"></span>
</div>
</div>
</div>
</div>
</div>
<div style="margin-top:14px;padding:12px;background:#eff6ff;border:1px solid #bfdbfe;border-radius:8px;font-size:12px;color:#1e40af">
<strong>Flow:</strong> Trainer klickt "▶ Training starten" → ALLE 3 Ringer beginnen gleichzeitig Übung 1 ("Liegestütze 3×10"). Der Timer läuft. Trainer klickt bei Max auf "✓ Erledigt" → Zeit wird gespeichert (0:28), Max's nächste Übung (Kniebeugen) startet automatisch. Anna und Tom sind noch bei Übung 1.
</div>