Anfuehrungszeichen: 199 falsche Schlusszeichen im sichtbaren Text

Deutsch oeffnet mit „ und schliesst mit “. An 199 Stellen, die ein
Mensch liest, stand als Schlusszeichen ein GERADES " -- „Nächstes"
statt „Nächstes“. Auf sechzehn oeffentlichen Seiten, in vierzig
Dateien des Workspace und in zwoelf Servermodulen, die Texte
verschicken.

Auf dem Bildschirm sieht man den Unterschied sofort. Beim Schreiben
nicht: Das gerade " liegt auf der Tastatur, die anderen nicht.

WARUM EIN ERSTER ANLAUF ZURUECKGENOMMEN WURDE

Ein gerades " ist an vielen Stellen SYNTAX und kein Schriftzeichen --
Grenze einer Zeichenkette, Grenze eines HTML-Attributs, Zeichen in
einem regulaeren Ausdruck. Wer stumpf ersetzt, macht aus

    „<a href="https://…                  ein kaputtes Attribut
    /^["'„»\s]+|["'“«.\s]+$/              einen kaputten Ausdruck
    "… nichts „mal " + "eben …"          eine kaputte Zeichenkette

DIE UNTERSCHEIDUNG LAEUFT AN MERKMALEN, NICHT AN EINER LISTE

  < > = dazwischen        -> HTML-Marke oder Attribut
  endet auf Leerzeichen   -> die Zeichenkette hoert hier auf, der
                             Satz geht in der naechsten Zeile weiter.
                             Ein deutsches Schlusszeichen steht NIE
                             hinter einem Leerzeichen.
  Rueckstrich mittendrin  -> regulaerer Ausdruck
  ${ ohne }               -> mitten in einem Ausdruck

Eine Liste erlaubter Ausnahmen waere die naechste, die niemand
pflegt. Zwoelf Stellen bleiben dadurch stehen, alle zwoelf einzeln
angesehen und alle zwoelf zu Recht -- dort steht das richtige
Schlusszeichen ohnehin weiter unten im Satz.

Fuenf davon waren allerdings ECHTE Fehler HINTER dem Link
(`…>HasiDog</a>".`) -- die erste Regel hatte nur das Attribut
gesehen, nicht den Satz danach. Gezielt nachgezogen.

Ein maskiertes `\"` in workspace-vorlagen.js (28 Hooks) wird zu “ --
ohne Rueckstrich, denn “ begrenzt nichts.

KOMMENTARE BLEIBEN, WIE SIE SIND. Dort liest es niemand ausser mir;
eine Wache, die auch Kosmetik anmahnt, wird weggeklickt. Beim ersten
Messen fielen ausserdem acht Stellen aus buehne.html faelschlich an,
weil `/* */` in HTML (in <style> und <script>) nicht ausgeblendet
war -- jetzt schon.

DIE WACHE DAZU

pruef-struktur prueft es ab sofort mit derselben Regel: 322 Dateien
mit sichtbarem Text, 0 Funde, und die zwoelf bewussten Ausnahmen
werden GEZAEHLT und genannt (erlaubt: 12). Eine Ausnahme, die niemand
sieht, waechst -- und irgendwann steht der echte Fall darin.

GEPRUEFT

  pruef-struktur   59 -> 68 Pruefungen, 0 Fehler
  node --check auf allen geaenderten JS-Dateien
  nachgemessen: 199 geaendert, 12 mit Grund stehen geblieben

  gruen geblieben: bewerbung-aufgaben 163, nachwuchs 262,
  reaktion 421, support 63, content 45, terminregel 35, treff 85

  Und nachgesehen, ob eine Pruefung noch die alte Schreibweise
  ERWARTET: 13 Fundstellen, alle dreizehn nur Text in ihrer eigenen
  Ausgabe, keine einzige ein Vergleich mit dem Seitentext.

GEGENPROBE: In reaktion.html ein Schlusszeichen zurueckgedreht ->
„workspace/reaktion.html:546 „Nächstes"", mit Datei und Zeile. Und
die Erkennung einzeln gegen HTML-Attribut, fortgesetzte
Zeichenkette, regulaeren Ausdruck und eingesetzten Wert geprueft.

Stempel gesetzt: workspace 670 Verweise in 45 Dateien, oeffentlich
554 in 48 Seiten.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-10-01 01:56:15 +02:00
co-authored by Claude Opus 5
parent 7dc5356c80
commit 95c4599baa
138 changed files with 1510 additions and 1390 deletions
+28 -28
View File
@@ -86,65 +86,65 @@ const BEREICH_PUNKTE = {};
export const CONTENT_IDEEN = [
/* ---- Wert (70 %) ---------------------------------------------------- */
{ schluessel: "das-haette-ich-am-anfang-gern-gewusst", titel: "Das hätte ich am Anfang gern gewusst",
hook: "„Ich hab drei Monate gebraucht, um das zu kapieren – du brauchst 30 Sekunden.\"",
hook: "„Ich hab drei Monate gebraucht, um das zu kapieren – du brauchst 30 Sekunden.“",
format: "Talking Head", saeule: "Wert", stufe: "anfaenger",
text: "Ein Fehler, den du selbst gemacht hast, und was du heute anders machst. "
+ "Konkret bleiben: ein Fehler, eine Lösung. Wer drei Dinge sagt, sagt nichts." },
{ schluessel: "mein-setup-fuer-unter-100", titel: "Mein Setup für unter 100 €",
hook: "„Alle sagen, du brauchst teure Technik. Hier ist meins für 87 Euro.\"",
hook: "„Alle sagen, du brauchst teure Technik. Hier ist meins für 87 Euro.“",
format: "Zeigen & Erklären", saeule: "Wert", stufe: "anfaenger",
text: "Was du wirklich benutzt, mit Preisen. Ehrlich sein, wo es hakt – "
+ "das ist der Teil, den niemand sonst zeigt." },
{ schluessel: "drei-einstellungen-die-sofort-was-bringe", titel: "Drei Einstellungen, die sofort was bringen",
hook: "„Wenn dein Stream unscharf aussieht, liegt es an einer davon.\"",
hook: "„Wenn dein Stream unscharf aussieht, liegt es an einer davon.“",
format: "Bildschirmaufnahme", saeule: "Wert", stufe: "fort",
text: "Nicht mehr als drei. Jede in unter 15 Sekunden erklärt, mit Vorher/Nachher." },
{ schluessel: "was-ich-in-einer-woche-gelernt-habe", titel: "Was ich in einer Woche gelernt habe",
hook: "„Sieben Tage, eine Erkenntnis – die hier hat alles verändert.\"",
hook: "„Sieben Tage, eine Erkenntnis – die hier hat alles verändert.“",
format: "Talking Head", saeule: "Wert", stufe: "anfaenger",
text: "Rückblick auf eine echte Woche. Funktioniert nur mit einer konkreten Zahl "
+ "oder einem konkreten Moment." },
{ schluessel: "antwort-auf-die-frage-die-immer-kommt", titel: "Antwort auf die Frage, die immer kommt",
hook: "„Das werde ich jeden Tag gefragt – hier einmal in Ruhe.\"",
hook: "„Das werde ich jeden Tag gefragt – hier einmal in Ruhe.“",
format: "Talking Head", saeule: "Wert", stufe: "fort",
text: "Aus dem Chat sammeln, welche Frage sich wiederholt. Die Antwort einmal "
+ "gut aufnehmen und immer wieder verwenden." },
{ schluessel: "so-bereite-ich-einen-stream-vor", titel: "So bereite ich einen Stream vor",
hook: "„Zwei Stunden vor LIVE mache ich immer dasselbe.\"",
hook: "„Zwei Stunden vor LIVE mache ich immer dasselbe.“",
format: "Vlog", saeule: "Wert", stufe: "fort",
text: "Der Ablauf hinter der Sendung. Zeigt Verlässlichkeit und gibt Anfängern "
+ "eine Vorlage." },
{ schluessel: "fehler-die-ich-bei-anderen-sehe", titel: "Fehler, die ich bei anderen sehe",
hook: "„Bitte mach das nicht – ich sehe es jeden Tag.\"",
hook: "„Bitte mach das nicht – ich sehe es jeden Tag.“",
format: "Talking Head", saeule: "Wert", stufe: "profi",
text: "Niemanden bloßstellen. Das Verhalten beschreiben, nicht die Person." },
/* ---- Community (20 %) ------------------------------------------------ */
{ schluessel: "der-beste-moment-aus-dem-letzten-live", titel: "Der beste Moment aus dem letzten LIVE",
hook: "„Das ist gestern passiert, und ich rede immer noch davon.\"",
hook: "„Das ist gestern passiert, und ich rede immer noch davon.“",
format: "Zusammenschnitt", saeule: "Community", stufe: "anfaenger",
text: "Ein Ausschnitt, keine Zusammenfassung. Wer alles zeigt, zeigt nichts." },
{ schluessel: "ich-beantworte-eure-kommentare", titel: "Ich beantworte eure Kommentare",
hook: "„Ihr habt gefragt – jetzt rede ich.\"",
hook: "„Ihr habt gefragt – jetzt rede ich.“",
format: "Talking Head", saeule: "Community", stufe: "anfaenger",
text: "Drei bis fünf echte Kommentare, sichtbar eingeblendet. Auch die kritischen." },
{ schluessel: "danke-an-die-die-immer-da-sind", titel: "Danke an die, die immer da sind",
hook: "„Ihr seid seit dem ersten Stream dabei. Das hier ist für euch.\"",
hook: "„Ihr seid seit dem ersten Stream dabei. Das hier ist für euch.“",
format: "Talking Head", saeule: "Community", stufe: "fort",
text: "Namen nennen, wenn die Leute einverstanden sind. Sonst allgemein bleiben – "
+ "aber ehrlich." },
{ schluessel: "eine-entscheidung-bei-der-ihr-mitredet", titel: "Eine Entscheidung, bei der ihr mitredet",
hook: "„Ich kann mich nicht entscheiden. Ihr habt 24 Stunden.\"",
hook: "„Ich kann mich nicht entscheiden. Ihr habt 24 Stunden.“",
format: "Umfrage", saeule: "Community", stufe: "fort",
text: "Echte Wahl, keine Scheinfrage. Das Ergebnis danach auch wirklich umsetzen." },
/* ---- Eigenwerbung (10 %) --------------------------------------------- */
{ schluessel: "wann-und-wo-ich-streame", titel: "Wann und wo ich streame",
hook: "„Immer dienstags und donnerstags – und ich fange pünktlich an.\"",
hook: "„Immer dienstags und donnerstags – und ich fange pünktlich an.“",
format: "Kurzclip", saeule: "Eigenwerbung", stufe: "anfaenger",
text: "Fester Sendeplan als eigener Clip. Wiederholbar, sobald sich etwas ändert." },
{ schluessel: "was-diese-woche-ansteht", titel: "Was diese Woche ansteht",
hook: "„Drei Sachen, und eine davon habe ich noch nie gemacht.\"",
hook: "„Drei Sachen, und eine davon habe ich noch nie gemacht.“",
format: "Kurzclip", saeule: "Eigenwerbung", stufe: "anfaenger",
text: "Vorschau auf die Woche. Kurz halten, sonst wird es eine Ankündigung "
+ "statt einer Einladung." },
@@ -168,81 +168,81 @@ export const CONTENT_IDEEN = [
/* ---- Wert (70 %) ---- */
{ schluessel: "vorher-nachher-an-meinem-kanal", titel: "Vorher / Nachher an meinem Kanal",
hook: "„So sah mein Stream vor drei Monaten aus. Und so heute.\"",
hook: "„So sah mein Stream vor drei Monaten aus. Und so heute.“",
format: "Vorher / Nachher", saeule: "Wert", stufe: "anfaenger",
text: "Zwei Ausschnitte nebeneinander, dazwischen die eine Sache, die du geändert hast. "
+ "Das Format funktioniert, weil der Zuschauer den Unterschied SIEHT und nicht glauben muss." },
{ schluessel: "drei-sachen-die-dir-keiner-sagt", titel: "Drei Sachen, die dir keiner sagt",
hook: "„Drei Sachen über Streaming, die dir keiner sagt – die dritte hat mich am meisten gekostet.\"",
hook: "„Drei Sachen über Streaming, die dir keiner sagt – die dritte hat mich am meisten gekostet.“",
format: "Nummerierte Liste", saeule: "Wert", stufe: "fort",
text: "Eine Zahl im Aufhänger verspricht ein Ende – deshalb bleiben Leute dran. "
+ "Die stärkste Nummer kommt zuletzt, und sie wird im Aufhänger angekündigt." },
{ schluessel: "ich-teste-was-alle-empfehlen", titel: "Ich teste, was alle empfehlen",
hook: "„Jeder empfiehlt das. Ich habe es zwei Wochen gemacht – hier ist das Ergebnis.\"",
hook: "„Jeder empfiehlt das. Ich habe es zwei Wochen gemacht – hier ist das Ergebnis.“",
format: "Selbstversuch", saeule: "Wert", stufe: "fort",
text: "Ein verbreiteter Ratschlag, von dir selbst überprüft, mit Zahlen davor und danach. "
+ "Widerspruch zieht Aufmerksamkeit – aber nur, wenn du wirklich getestet hast." },
{ schluessel: "so-lese-ich-meine-zahlen", titel: "So lese ich meine Zahlen",
hook: "„Diese eine Zahl sagt mir mehr als die Zuschauerzahl.\"",
hook: "„Diese eine Zahl sagt mir mehr als die Zuschauerzahl.“",
format: "Bildschirm & Erklären", saeule: "Wert", stufe: "profi",
text: "Zeig deine eigene Auswertung: durchschnittliche Verweildauer, Anteil neuer Zuschauer, "
+ "Wiederkehrer. Erklär, was du daraufhin geändert hast. Wenige machen das – deshalb wirkt es." },
{ schluessel: "die-erste-sekunde-entscheidet", titel: "Die erste Sekunde entscheidet",
hook: "„Sag das in Sekunde eins – oder der Zuschauer ist weg.\"",
hook: "„Sag das in Sekunde eins – oder der Zuschauer ist weg.“",
format: "Zerlegung", saeule: "Wert", stufe: "profi",
text: "Nimm ein eigenes Video auseinander: Was hast du in Sekunde eins gesagt, was würdest du "
+ "heute sagen? Über 70 Prozent entscheiden in den ersten drei Sekunden. Zeig beides." },
{ schluessel: "mein-ablauf-als-vorlage", titel: "Mein Ablauf als Vorlage zum Mitnehmen",
hook: "„Hier ist der Ablauf, nach dem ich jeden Stream fahre. Nimm ihn.\"",
hook: "„Hier ist der Ablauf, nach dem ich jeden Stream fahre. Nimm ihn.“",
format: "Zeigen & Weitergeben", saeule: "Wert", stufe: "meister",
text: "Etwas herzugeben, das bei dir funktioniert, kostet nichts und bringt Vertrauen. "
+ "Meisterschaft zeigt sich daran, dass es auch ohne dich funktioniert." },
{ schluessel: "was-hundert-streams-mir-beigebracht-h", titel: "Was hundert Streams mir beigebracht haben",
hook: "„Hundert Streams. Drei Sachen sind übrig geblieben.\"",
hook: "„Hundert Streams. Drei Sachen sind übrig geblieben.“",
format: "Rückblick", saeule: "Wert", stufe: "meister",
text: "Kein Best-of, sondern das, was du heute anders machst als am Anfang. "
+ "Wer lange dabei ist, hat den einen Vorteil, den niemand abkürzen kann." },
/* ---- Community (20 %) ---- */
{ schluessel: "ein-insider-den-nur-ihr-versteht", titel: "Ein Insider, den nur ihr versteht",
hook: "„Wenn du weißt, was das bedeutet, bist du schon länger dabei.\"",
hook: "„Wenn du weißt, was das bedeutet, bist du schon länger dabei.“",
format: "Kurzclip", saeule: "Community", stufe: "anfaenger",
text: "Ein Spruch, ein Emote, ein Moment aus dem Stream. Wer ihn versteht, fühlt sich zugehörig – "
+ "und wer nicht, will dazugehören. Beides hilft." },
{ schluessel: "eure-clips-mein-kommentar", titel: "Eure Clips, mein Kommentar",
hook: "„Ihr habt das aufgenommen. Ich sag euch, was da wirklich los war.\"",
hook: "„Ihr habt das aufgenommen. Ich sag euch, was da wirklich los war.“",
format: "Reaction", saeule: "Community", stufe: "fort",
text: "Clips, die Zuschauer selbst geschnitten haben, mit deinem Kommentar. "
+ "Das belohnt die, die mitmachen – und wer belohnt wird, macht weiter." },
{ schluessel: "die-regel-die-ihr-euch-gewuenscht-hab", titel: "Die Regel, die ihr euch gewünscht habt",
hook: "„Ihr habt gefragt, ich habe es geändert. Ab heute gilt:\"",
hook: "„Ihr habt gefragt, ich habe es geändert. Ab heute gilt:“",
format: "Talking Head", saeule: "Community", stufe: "profi",
text: "Eine Änderung, die aus der Community kam, mit Nennung derer, die sie angestoßen haben. "
+ "Mitreden zu dürfen ist der stärkste Grund zu bleiben." },
{ schluessel: "wir-machen-das-zusammen", titel: "Wir machen das zusammen",
hook: "„Wenn wir das diese Woche schaffen, mache ich Folgendes:\"",
hook: "„Wenn wir das diese Woche schaffen, mache ich Folgendes:“",
format: "Gemeinsames Ziel", saeule: "Community", stufe: "profi",
text: "Ein Ziel mit Frist und einer Belohnung, die du wirklich einlöst. "
+ "Ein Versprechen, das nicht gehalten wird, kostet mehr als es gebracht hat." },
{ schluessel: "mein-moderator-stellt-sich-vor", titel: "Mein Moderator stellt sich vor",
hook: "„Ihr kennt den Namen. Hier ist der Mensch dahinter.\"",
hook: "„Ihr kennt den Namen. Hier ist der Mensch dahinter.“",
format: "Interview", saeule: "Community", stufe: "meister",
text: "Wer im Chat für Ordnung sorgt, bekommt ein Gesicht. Das schützt ihn – "
+ "gegen einen Namen schimpft man leichter als gegen einen Menschen." },
/* ---- Eigenwerbung (10 %) ---- */
{ schluessel: "dreissig-minuten-vorher", titel: "30 Minuten vorher",
hook: "„In einer halben Stunde geht es los – und heute passiert Folgendes:\"",
hook: "„In einer halben Stunde geht es los – und heute passiert Folgendes:“",
format: "Ankündigung", saeule: "Eigenwerbung", stufe: "anfaenger",
text: "Ein kurzes Video 30 bis 60 Minuten vor dem Start. Es bündelt die, die ohnehin kommen "
+ "wollten – und ein voller Start zieht neue Zuschauer nach. Eine Sache nennen, nicht drei." },
{ schluessel: "warum-ich-heute-live-gehe", titel: "Warum ich heute live gehe",
hook: "„Heute ist ein Grund da, und der ist nicht ‚weil Dienstag ist‘.\"",
hook: "„Heute ist ein Grund da, und der ist nicht ‚weil Dienstag ist‘.“",
format: "Talking Head", saeule: "Eigenwerbung", stufe: "fort",
text: "Ein Anlass macht aus einem Termin ein Ereignis. Auch ein kleiner reicht: "
+ "ein neues Spiel, ein Gast, eine offene Frage von letzter Woche." },
{ schluessel: "mein-kanal-in-fuenfzehn-sekunden", titel: "Mein Kanal in fünfzehn Sekunden",
hook: "„Fünfzehn Sekunden, dann weißt du, ob das hier für dich ist.\"",
hook: "„Fünfzehn Sekunden, dann weißt du, ob das hier für dich ist.“",
format: "Kurzvorstellung", saeule: "Eigenwerbung", stufe: "profi",
text: "Für wen, worum, wann. Fest angeheftet, damit neue Zuschauer nicht raten müssen. "
+ "Alle paar Monate neu drehen – ein Kanal von vor einem Jahr bist du nicht mehr." },