VIER DINGE AUS DEN BILDSCHIRMFOTOS, jedes ein echter Fehler:
1. SPICY MEDIA SAH DOGFATHERS DATEN. Beim ersten Anlauf bekam die Rolle
dieselbe Regel wie DogFather (`1=1`) -- damit stimmte der Ueberblick
ueber Manager, Scouts und Creator, und nebenbei standen seine eigenen
Termine, Aufgaben, Dateien und Eintraege mit drin. Jetzt gibt es
ohneDogFather() als EINE Stelle dafuer: Zwei Spalten werden geprueft,
`creator_id` (um wen geht es) und `erstellt_von` (wer hat es
geschrieben) -- ein Termin, den er sich selbst anlegt, haengt nur an
der zweiten. `IS NULL OR NOT IN` und nicht bloss `NOT IN`: In SQL ist
`NULL NOT IN (...)` weder wahr noch falsch, die Zeile fiele
stillschweigend heraus.
2. "PERSOENLICHER ZUGANGSCODE · undefined" auf der Anmeldeseite. Eine
zweite Namensliste im Browser, die beim Hinzufuegen der Rolle
niemand gepflegt hat. Ein unbekannter Schluessel faellt jetzt auf
sich selbst zurueck statt auf `undefined` -- haesslich, aber
sichtbar.
3. SPICY KAM NICHT IN DIE PERSONENVERWALTUNG. Der Server liess sie
herein, das Skript warf sie wieder hinaus: zwei Listen fuer dieselbe
Frage, gepflegt wurde nur die erste.
4. DIE ANMELDEKARTE WAR ZU KLEIN FUER FUENF ROLLEN. Der Kommentar an
genau dieser Stelle warnt woertlich davor -- und ich habe getan,
wovor er warnt: eine Rolle eingefuegt und die Zahl daneben nicht
angefasst. Gemessen: Inhalt 573 px in einer 526 px hohen Tafel, die
Fusszeile stand unter dem Rahmen. Schrift kleiner half nicht (sie lag
schon auf dem Anschlag), also sind die Abstaende an neun Stellen
enger. Nachgemessen auf fuenf Groessen: passt ueberall.
DIE ZEIT WAR WIRKLICH FALSCH. Nicht nur in meinem Satz: `datum()` in
personen.js schnitt die ISO-Zeichenkette ab -- und die ist UTC. Im
Protokoll stand 03:00, wo 05:00 war. Das Tueckische daran ist, dass es
nie kaputt aussieht: Eine Uhrzeit ist immer plausibel.
PROFILBILDER WERDEN JETZT GEZEICHNET. Der Server lieferte sie seit
gestern mit, gezeichnet wurden sie nirgends -- deshalb aenderte sich
nichts. Jetzt in der Personenauswahl (Aufgaben, Termine, Dateien,
Bereiche), in der Gespraechsliste und an jeder Nachricht. Der
Anfangsbuchstabe bleibt als Unterlage LIEGEN: Faellt das Bild aus, steht
dort weiter etwas Sinnvolles.
DER CHAT: Gesichter mit Rollenfarbe, Blasen mit Richtung (die erste
einer Folge eckig, die naechsten rund -- so sieht man, wo ein Gedanke
anfaengt), das offene Gespraech mit Schiene, Ungelesenes hervorgehoben,
und das Eingabefeld in einer eigenen Leiste, die sich beim Schreiben
hebt.
ZWEI EIGENE PATZER, beide von Pruefungen gefunden:
- `o is not defined`: Mein Suchmuster hat die zwei Zeilen fuer das
Bild ans DATEIENDE gesetzt statt in die Schleife -- und in
kalender.js an einen <span> statt ans <option>. Gemeldet von
pruef-sicht, das die Browserkonsole mitliest.
- Ein Kommentar mit `bild` in schraegen Anfuehrungszeichen stand INNEN
in einer Vorlagenzeichenkette und hat sie geschlossen. Die halbe SQL
wurde zu Programmtext.
Dazu: `.chat-neu` gibt es nicht (heisst `.chat__eingabe`), und der
Rollenknopf hatte fuer den Manager keinen sichtbaren Fokus -- ein
box-shadow wird von `overflow: hidden` abgeschnitten, ein outline nicht.
Gruen: spicy (43), creator-anlegen (29), personen-liste (33), sicht (48),
chat (48), chat-optik (24), buehne (38), struktur (32), css-klassen (15),
handy (59), breiten (23), formulare (19), start-ansicht (136),
lesbarkeit (14), barrierefrei (18), tempo (8), kopf-messen (3),
glocke (26), haerte (20), manager-sicht (43), alle-wege (19),
aufgabenbrett (44), kalender (84).
Co-Authored-By: Claude Opus 5 <[email protected]>
136 lines
5.8 KiB
HTML
136 lines
5.8 KiB
HTML
<!doctype html>
|
||
<html lang="de">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
||
<title>Scouting · Creator Workspace</title>
|
||
<meta name="robots" content="noindex, nofollow" />
|
||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||
<meta name="theme-color" content="#0674b9" />
|
||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png" />
|
||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png" />
|
||
<link rel="stylesheet" href="assets/css/gate.css?v=202609070539" />
|
||
<link rel="stylesheet" href="assets/css/start.css?v=202609070539" />
|
||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070539" />
|
||
<link rel="stylesheet" href="assets/css/scouting.css?v=202609070539" />
|
||
</head>
|
||
|
||
<body class="start">
|
||
|
||
<header class="kopfleiste">
|
||
<button type="button" class="zurueck-knopf" id="zurueck" hidden>
|
||
<svg class="zurueck-knopf__pfeil" viewBox="0 0 24 24" aria-hidden="true">
|
||
<path d="M14.5 5.5 8 12l6.5 6.5" />
|
||
</svg>
|
||
<span class="zurueck-knopf__text">Zurück</span>
|
||
</button>
|
||
<p class="marke"><span class="marke__text"><a class="zurueck" href="start.html">Creator Workspace</a> · Scouting</span></p>
|
||
<div class="kopfleiste__rechts">
|
||
<span class="wer" id="wer">…</span>
|
||
<button type="button" class="abmelden" id="abmelden">Abmelden</button>
|
||
</div>
|
||
</header>
|
||
|
||
<main class="inhalt inhalt--breit">
|
||
|
||
<section class="kopf-zeile">
|
||
<div>
|
||
<p class="marke">Scout-CRM</p>
|
||
<h1 class="titel">Pipeline</h1>
|
||
<p class="unterzeile" id="unterzeile">Vom ersten Fund bis zur Übergabe – nachvollziehbar statt im Kopf.</p>
|
||
</div>
|
||
<div class="steuerung">
|
||
<div id="scoutwahl-block" hidden>
|
||
<label class="feld-schild" for="f-scout">Scout</label>
|
||
<select id="f-scout"><option value="">Alle Scouts</option></select>
|
||
</div>
|
||
<button type="button" class="knopf knopf--klein" id="neu-auf">Neuer Kontakt</button>
|
||
</div>
|
||
</section>
|
||
|
||
<p class="fehler" id="fehler" role="alert" aria-live="polite"></p>
|
||
|
||
<!-- Follow-ups: der Teil, der ohne System am ehesten untergeht. -->
|
||
<section class="faellig" id="faellig" hidden>
|
||
<p class="faellig__titel">Follow-up fällig</p>
|
||
<ul class="faellig__liste" id="faellig-liste"></ul>
|
||
</section>
|
||
|
||
<section class="neu" id="neu-block" hidden>
|
||
<h2 class="neu__titel">Neuer Kontakt</h2>
|
||
<form id="neu-form">
|
||
<div class="neu__raster">
|
||
<div class="feld feld--breit">
|
||
<label class="feld-schild" for="n-name">Name</label>
|
||
<input id="n-name" maxlength="120" required placeholder="Wie heißt die Person?" />
|
||
</div>
|
||
<div class="feld">
|
||
<label class="feld-schild" for="n-plattform">Plattform</label>
|
||
<input id="n-plattform" maxlength="60" placeholder="z. B. TikTok" />
|
||
</div>
|
||
<div class="feld">
|
||
<label class="feld-schild" for="n-handle">Profil / Handle</label>
|
||
<input id="n-handle" maxlength="120" placeholder="@…" />
|
||
</div>
|
||
<div class="feld">
|
||
<label class="feld-schild" for="n-prio">Priorität</label>
|
||
<select id="n-prio">
|
||
<option value="hoch">Hoch</option>
|
||
<option value="mittel" selected>Mittel</option>
|
||
<option value="niedrig">Niedrig</option>
|
||
</select>
|
||
</div>
|
||
<div class="feld" id="n-scout-block" hidden>
|
||
<label class="feld-schild" for="n-scout">Scout</label>
|
||
<select id="n-scout"><option value="">– niemandem zugeordnet –</option></select>
|
||
</div>
|
||
<div class="feld feld--breit">
|
||
<label class="feld-schild" for="n-aktivitaet">Aktivität & LIVE-Fokus</label>
|
||
<input id="n-aktivitaet" maxlength="3000" placeholder="Wie oft LIVE? Welche Zeiten? Welches Format?" />
|
||
</div>
|
||
<div class="feld feld--breit">
|
||
<label class="feld-schild" for="n-potenzial">Potenzial & Stil</label>
|
||
<input id="n-potenzial" maxlength="3000" placeholder="Was macht die Person besonders?" />
|
||
</div>
|
||
<div class="feld">
|
||
<label class="feld-schild" for="n-followup">Nächster Follow-up</label>
|
||
<input id="n-followup" type="date" />
|
||
</div>
|
||
</div>
|
||
<p class="fehler" id="n-fehler" role="alert" aria-live="polite"></p>
|
||
<div class="neu__knoepfe">
|
||
<button type="submit" class="knopf knopf--klein" id="n-speichern">Aufnehmen</button>
|
||
<button type="button" class="knopf-still" id="neu-zu">Abbrechen</button>
|
||
</div>
|
||
</form>
|
||
</section>
|
||
|
||
<div id="pipeline" aria-busy="true"><p class="leise">Pipeline wird geladen …</p></div>
|
||
|
||
</main>
|
||
|
||
<!-- Zugangscode nach dem Onboarding: genau einmal sichtbar. -->
|
||
<div class="schleier" id="code-schleier" hidden>
|
||
<div class="code-fenster" role="dialog" aria-modal="true" aria-labelledby="code-titel">
|
||
<p class="marke">Onboarding gestartet</p>
|
||
<h2 class="code-fenster__titel" id="code-titel">Zugangscode</h2>
|
||
<p class="code-fenster__text">
|
||
Dieser Code wird <strong>genau einmal</strong> angezeigt und ist danach nicht mehr
|
||
abrufbar. Gib ihn persönlich weiter, nicht über einen offenen Kanal.
|
||
</p>
|
||
<p class="code-fenster__code" id="code-wert">—</p>
|
||
<div class="neu__knoepfe">
|
||
<button type="button" class="knopf knopf--klein" id="code-kopieren">Kopieren</button>
|
||
<button type="button" class="knopf-still" id="code-zu">Habe ich notiert</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<script src="assets/js/wahl.js?v=202609070539" defer></script>
|
||
<script src="assets/js/bereiche.js?v=202609070539" defer></script>
|
||
<script src="assets/js/kopf.js?v=202609070539" defer></script>
|
||
<script src="assets/js/glocke.js?v=202609070539" defer></script>
|
||
<script src="assets/js/scouting.js?v=202609070539" defer></script>
|
||
</body>
|
||
</html>
|