/* ===================================================================== DIE ANLEITUNG — Tabellen und Inhalte Bauplan: "Kachel Anleitung — Bauplan fuer die Einweisung neuer Leute", Stand 06.10.2026. Geprueft und ergaenzt in `02 Projekte/Anleitung-Kachel – Bauplan.md` (Obsidian). --------------------------------------------------------------------- WAS HIER *NICHT* STEHT, UND WARUM DAS DER KERN IST Eine Karte der Anleitung zeigt Symbol, Farbe, Name und Ziel der echten Kachel. Nichts davon steht in dieser Datenbank. Es steht in `workspace/assets/js/bereiche.js`, und zwar genau einmal. Wuerde man es hier noch einmal hinschreiben, haette man zwei Listen: Die eine wird gepflegt, wenn eine Kachel umbenannt wird, die andere nicht — und ab da erklaert die Anleitung eine Kachel, die es so nicht mehr gibt. Das ist derselbe Fehler, der am 11.09.2026 beim Spaltenumbau drei Spalten gekostet hat: eine abgeschriebene Liste. Gespeichert wird deshalb nur, was der Bauplan NEU hinzufuegt: die Stufe und die drei Saetze (Wozu / Was du hier tust / Merke). Verbunden wird ueber den Kachel-Schluessel. --------------------------------------------------------------------- DER KACHEL-SCHLUESSEL wird aus dem Ziel ABGELEITET, nicht vergeben: uebersicht.html -> uebersicht bereich.html?b=live -> bereich:live Das muss sein, weil zwei Faelle sonst zusammenfallen: * `bereich.html` ist FUENF Kacheln (live, community, technik, schutz, agentur). Ueber die Seite allein waeren sie eine. * `profil.html` heisst beim Creator "Mein Profil" und beim Manager "Creator-Profile" — zwei Karten, eine Adresse. Hier trennt sie die Rolle im Schluessel (haus, rolle, kachel). --------------------------------------------------------------------- DIE HAUS-SPALTE ist leer gelaufene Vorsorge und soll es bleiben. Entscheidung Filipe, 06.10.2026: "Jetzt nur Agentur, aber vorbereitet." Team Dogi bekommt heute keine Anleitung. Die Spalte kostet jetzt ein Feld; sie spaeter nachzuruesten hiesse, jede Zeile und jeden Schluessel anzufassen. ===================================================================== */ /** Die drei Stufen. Reihenfolge ist die Anzeigereihenfolge. */ import { INHALTE_CREW, FASSUNGEN_CREW } from "./anleitung-inhalte-crew.js"; export const STUFEN = [ { schluessel: "muss", name: "Muss", titel: "Das brauchst du sofort", unter: "Ohne das laeuft der Alltag nicht.", offen: true }, { schluessel: "regelmaessig", name: "Regelmäßig", titel: "Das kommt regelmäßig", unter: "Woechentlich, monatlich oder bei jedem neuen Creator.", offen: false }, { schluessel: "bedarf", name: "Bei Bedarf", titel: "Das brauchst du nur bei Bedarf", unter: "Nur oeffnen, wenn es einen Anlass gibt.", offen: false }, ]; export const STUFEN_SCHLUESSEL = STUFEN.map((s) => s.schluessel); /** Die Rollen, die eine eigene Fassung bekommen. * * OHNE 'admin'. DogFather bekommt keine Einweisung (Bauplan, * Kapitel 11) — bei ihm oeffnet dieselbe Adresse ab Etappe 4 die * Pflege-Ansicht. */ export const FASSUNGEN = ["creator", "scout", "manager", "spicy"]; /** Welche Fassungen gibt es in DIESEM Haus? * * DAS HAUS ENTSCHEIDET, NICHT DIE ROLLE (06.10.2026). Die Agentur * hat vier Fassungen, die Crew hat vier andere -- und keine Rolle * kommt in beiden vor. Vorher stand `FASSUNGEN` an zehn Stellen * fest; jede davon haette die Crew stillschweigend abgewiesen. * * EINE FUNKTION STATT ZWEIER LISTEN AN ZEHN STELLEN: Wer eine * Fassung ergaenzt, traegt sie an einer Stelle ein. */ export function fassungenFuer(haus) { return haus === "crew" ? FASSUNGEN_CREW : FASSUNGEN; } /** Wer die Texte aendern darf. * * DogFather UND Spicy — Entscheidung Filipe am 06.10.2026, und zwar * ausdruecklich dieselbe Regel wie bei den Manager-Zielen am * 02.10.2026 ("dogfather und spicy rolle sollen gleichzeitig es immer * aendern koennen fuer alle"). Der Bauplan hatte hier "nur DogFather" * stehen; zwei verschiedene Regeln fuer dieselbe Frage sind eine * Regel, die man sich nicht merken kann. */ export const PFLEGE_ROLLEN = ["admin", "spicy"]; /** Die Arten von Listenzeilen in `anl_zeile`. * * EINE TABELLE STATT FUENF. Satz, Schritt, Nicht-deins, Takt und Frage * sind alle dasselbe: eine geordnete Zeile mit hoechstens zwei Texten * und manchmal einem Ziel. Fuenf Tabellen waeren fuenfmal dieselbe * Spaltenliste, fuenf Indizes und fuenf Stellen, an denen die * Haus-Spalte vergessen werden kann. */ export const ZEILEN_ARTEN = { /* "In 60 Sekunden" — drei Saetze. Nur `text`. */ satz: { titel: false, ziel: false }, /* "Erste Schritte" — `titel` ist die Kachel, `ziel` der Sprung. */ schritt: { titel: true, ziel: true }, /* "Das kannst du liegen lassen" — `titel` die Taetigkeit, `text` wer sie erledigt. */ nicht: { titel: true, ziel: false }, /* "Dein Rhythmus" — `titel` ist das Wann, `text` das Was. */ takt: { titel: true, ziel: false }, /* "Haeufige Fragen" — `titel` die Frage, `text` die Antwort. */ frage: { titel: true, ziel: false }, /* "Drei Dinge vorweg" — NUR die Community (Bauplan, Kapitel 04). `titel` die Regel in drei Worten, `text` was sie bedeutet. Sie steht VOR allem anderen, weil sie nichts erklaert, sondern sagt, woran sich alle halten. */ vorweg: { titel: true, ziel: false }, }; export const ARTEN_SCHLUESSEL = Object.keys(ZEILEN_ARTEN); /* ===================================================================== WO DIE UMRECHNUNG "Ziel -> Schluessel" STEHT NICHT hier. Der Server bildet nie einen Schluessel: Die Schluessel stehen woertlich in INHALTE weiter unten, er schreibt sie nur weg. Gebraucht wird die Rechnung ausschliesslich im Browser, wo die Kachelliste liegt — also steht sie dort, als `window.Bereiche.schluesselVonZiel`. Ich hatte sie zuerst hier gebaut und exportiert. Benutzt haette sie niemand. Eine Funktion, die nur dasteht, liest sich beim naechsten Mal wie eine Zusage ("der Server kennt die Kacheln") und ist keine. Wenn die Pflege-Ansicht in Etappe 4 Schreibzugriffe pruefen muss, kommt sie zurueck — dann aber mit einem Aufrufer. ===================================================================== */ const TABELLEN = ` CREATE TABLE IF NOT EXISTS anl_karte ( id INTEGER PRIMARY KEY AUTOINCREMENT, haus TEXT NOT NULL DEFAULT 'agentur', rolle TEXT NOT NULL, kachel TEXT NOT NULL, stufe TEXT NOT NULL, wozu TEXT NOT NULL DEFAULT '', tust TEXT NOT NULL DEFAULT '', merke TEXT NOT NULL DEFAULT '', reihe INTEGER NOT NULL DEFAULT 0, geaendert TEXT NOT NULL, geaendert_von INTEGER REFERENCES personen(id) ON DELETE SET NULL, UNIQUE (haus, rolle, kachel) ); CREATE INDEX IF NOT EXISTS idx_anl_karte_sicht ON anl_karte (haus, rolle, stufe, reihe); CREATE TABLE IF NOT EXISTS anl_zeile ( id INTEGER PRIMARY KEY AUTOINCREMENT, haus TEXT NOT NULL DEFAULT 'agentur', rolle TEXT NOT NULL, art TEXT NOT NULL, reihe INTEGER NOT NULL DEFAULT 0, titel TEXT NOT NULL DEFAULT '', text TEXT NOT NULL DEFAULT '', ziel TEXT, geaendert TEXT NOT NULL, geaendert_von INTEGER REFERENCES personen(id) ON DELETE SET NULL ); CREATE INDEX IF NOT EXISTS idx_anl_zeile_sicht ON anl_zeile (haus, rolle, art, reihe); CREATE TABLE IF NOT EXISTS anl_rolle ( haus TEXT NOT NULL DEFAULT 'agentur', rolle TEXT NOT NULL, leitgedanke TEXT NOT NULL DEFAULT '', geaendert TEXT NOT NULL, geaendert_von INTEGER REFERENCES personen(id) ON DELETE SET NULL, PRIMARY KEY (haus, rolle) ); /* ====================================================================== DER STAND JE PERSON (Etappe 2) NUR ERLEDIGTES WIRD GESPEICHERT. Eine Zeile heisst "abgehakt", keine Zeile heisst "offen". Die Alternative waere, fuer jede Person jeden Schritt mit einem Ja/Nein anzulegen -- dann muesste jemand beim Anlegen einer Person an die Anleitung denken, und beim Hinzufuegen eines Schrittes an alle Personen. Beides vergisst man. zeile_id UND NICHT EIN EIGENER SCHLUESSEL. Aendert DogFather in Etappe 4 den Text eines Schrittes, behaelt die Zeile ihre Nummer und der Haken bleibt stehen -- richtig, es ist derselbe Schritt. Loescht er ihn und legt einen neuen an, ist der Haken weg -- auch richtig, es ist ein anderer Schritt. ON DELETE CASCADE sorgt dafuer, dass keine Haken auf geloeschte Schritte zeigen. KEINE SPALTE erledigt. Ein Haken, den man wegnimmt, loescht die Zeile. Ein Feld mit 0 und 1 waere eine zweite Art, "offen" zu sagen, und dann gaebe es zwei -- fehlende Zeile und Zeile mit 0. ====================================================================== */ CREATE TABLE IF NOT EXISTS anl_stand ( person_id INTEGER NOT NULL REFERENCES personen(id) ON DELETE CASCADE, zeile_id INTEGER NOT NULL REFERENCES anl_zeile(id) ON DELETE CASCADE, erledigt_am TEXT NOT NULL, PRIMARY KEY (person_id, zeile_id) ); CREATE INDEX IF NOT EXISTS idx_anl_stand_person ON anl_stand (person_id); /* ====================================================================== WANN JEMAND ZULETZT HINEINGESEHEN HAT (Etappe 4) Einzig fuer die Marke "Neu": Sie soll verschwinden, sobald die Person die geaenderte Stelle gesehen hat. Dafuer reicht ein Zeitstempel je Person -- NICHT je Eintrag. Wer eine Seite oeffnet, sieht sie ganz; Buch zu fuehren, welche Karte wie lange im Bild war, waere Ueberwachung und nicht Pflege. ====================================================================== */ CREATE TABLE IF NOT EXISTS anl_besuch ( person_id INTEGER PRIMARY KEY REFERENCES personen(id) ON DELETE CASCADE, gesehen_am TEXT NOT NULL ); /* ====================================================================== DIE EINWEISUNG BEIM ERSTEN ANMELDEN (Etappe 6) Der Bauplan: "Nur einmal automatisch. Gespeichert pro Person, nicht pro Geraet." -- deshalb hier und nicht im Browserspeicher. Wer sich am Telefon anmeldet und spaeter am Rechner, hat sie schon gesehen. DER SCHLUESSEL IST (Person, ROLLE) UND NICHT NUR DIE PERSON. Damit erledigt sich die Sonderregel aus dem Bauplan ("Bekommt jemand eine neue Rolle, startet die Einweisung fuer die neue Rolle beim naechsten Login einmal neu") von selbst: Die neue Rolle hat schlicht noch keine Zeile. Eine Spalte "zuruecksetzen", die beim Rollenwechsel jemand anfassen muesste, waere die Stelle, an der es vergessen wird. ====================================================================== */ CREATE TABLE IF NOT EXISTS anl_einweisung ( person_id INTEGER NOT NULL REFERENCES personen(id) ON DELETE CASCADE, rolle TEXT NOT NULL, gezeigt_am TEXT NOT NULL, PRIMARY KEY (person_id, rolle) ); `; /* ===================================================================== DIE INHALTE Woertlich aus dem Bauplan vom 06.10.2026, Kapitel 06. Gewonnen mit `pdftotext -raw`, NICHT mit `-layout`: Der Layout-Auszug verschiebt Tabellenzellen. Dort stand "Schulung und Community-Call laufen woechentlich von allein" beim Eintrag *Mein Profil* statt bei *Kalender* — eine Zeile, die man ohne Verdacht uebernommen und nie wiedergefunden haette. Die Stufen stammen aus Kapitel 05. Sie sind ab Etappe 4 in der Pflege-Ansicht aenderbar, ohne dass hier jemand etwas anfasst — deshalb ist diese Liste eine ERSTBEFUELLUNG und keine Wahrheit. ===================================================================== */ export const INHALTE = { creator: { leitgedanke: "Das ist dein eigener Bereich. Du siehst nur, was zu dir gehört. " + "Deine Betreuung trägt ein, du liest mit, antwortest und hakst ab.", saetze: [ "Du musst nicht alles kennen. Fünf Kacheln reichen für den Anfang.", "Was heute dran ist, steht immer auf der Zentrale unter „Was ist dran“.", "Fast alles andere füllt deine Betreuung für dich. Du liest und antwortest.", ], schritte: [ { titel: "Mein Profil", ziel: "profil.html", text: "Bild wählen, einen Satz über dich schreiben, TikTok-Namen eintragen, speichern." }, { titel: "Schutz & Regeln", ziel: "bereich.html?b=schutz", text: "Unterweisungen lesen und zusammen mit deiner Betreuung bestätigen." }, { titel: "Aufgaben", ziel: "aufgaben.html", text: "Nachsehen, ob schon etwas für dich offen ist." }, { titel: "Kalender", ziel: "kalender.html", text: "Termine in deinen eigenen Kalender holen (Google, Apple, Outlook)." }, /* KEIN ZIEL. "Installieren" ist keine Kachel, sondern der Knopf in der Kopfleiste. Ein Sprung auf eine Seite waere hier falsch -- und ein Sprung ins Leere erst recht. */ { titel: "Installieren", ziel: null, text: "Oben antippen, dann hast du den Workspace als App auf dem Handy." }, ], karten: [ { kachel: "aufgaben", stufe: "muss", wozu: "Was du zu tun hast.", tust: "Annehmen, bearbeiten, zur Freigabe geben, Rückmeldung schreiben.", merke: "„Zur Freigabe“ heißt: Jemand schaut noch drauf." }, { kachel: "chat", stufe: "muss", wozu: "Nachrichten mit deinem Team.", tust: "Mit „Neu“ ein Gespräch beginnen.", merke: "Fehler an der Seite gehören in Support, nicht in den Chat." }, { kachel: "kalender", stufe: "muss", wozu: "Termine und Calls.", tust: "Termine ansehen, eigene anlegen.", merke: "Schulung und Community-Call laufen wöchentlich von allein." }, { kachel: "profil", stufe: "muss", wozu: "Wer du bist und wohin du willst.", tust: "Einmal ausfüllen: Bild, Kanäle, Stammdaten, Ziele, 90-Tage-Plan.", merke: "Nur du schreibst deinen Eintrag." }, { kachel: "bereich:schutz", stufe: "muss", wozu: "Regeln, die du kennen musst.", tust: "Einmal: Dokument öffnen, durchgehen, bestätigen.", merke: "Nach der Bestätigung von beiden Seiten nicht mehr änderbar." }, { kachel: "bereich:live", stufe: "regelmaessig", wozu: "Dein LIVE besser machen.", tust: "Vor und nach dem LIVE: Bewertungen und Notizen lesen, an jedem Punkt antworten.", merke: "Geordnet nach vor, während, nach der Sendung." }, { kachel: "leistung", stufe: "regelmaessig", wozu: "Diamanten, LIVE-Tage, Verweildauer.", tust: "Wochenzahlen und Ziele ansehen.", merke: "Kommen aus Backstage und werden eingetragen, nicht automatisch geholt." }, { kachel: "calls", stufe: "regelmaessig", wozu: "Gespräche mit To-dos.", tust: "Nachlesen, was besprochen wurde. Der Call-Raum ist verlinkt.", merke: "To-dos landen direkt bei deinen Aufgaben." }, { kachel: "bereich:agentur", stufe: "regelmaessig", wozu: "Events und offizielle Wege.", tust: "Event-Aufgaben ansehen, Rückmeldung geben, Anliegen an die Agentur stellen.", merke: "Teilnahmebedingungen stehen beim Event." }, { kachel: "content", stufe: "regelmaessig", wozu: "Von der Idee bis zum Upload.", tust: "Sehen, was geplant ist, und antworten.", merke: "Fünf Stufen: Idee, Hook & Skript, Gedreht, Fertig & geplant, Veröffentlicht." }, { kachel: "report", stufe: "regelmaessig", wozu: "Rückblick und nächste Schritte.", tust: "Einmal im Monat: Zeitraum wählen (7, 30 oder 90 Tage).", merke: "Ein Review endet mit einer Entscheidung." }, { kachel: "uebersicht", stufe: "bedarf", wozu: "Dein Stand auf einen Blick.", tust: "Nachsehen: nächster Termin, offene Aufgaben, Start-Check.", merke: "Was dran ist, zeigt dir schon die Zentrale." }, { kachel: "startcheck", stufe: "bedarf", wozu: "Erstanalyse deines Kanals.", tust: "Ansehen, was passt und was nicht, in 16 Punkten.", merke: "Grundlage für deinen 90-Tage-Plan." }, { kachel: "bereich:community", stufe: "bedarf", wozu: "Moderation und Konflikte.", tust: "Nachlesen, wenn es im Chat unruhig wird.", merke: "Ruhig statt Drama." }, { kachel: "bereich:technik", stufe: "bedarf", wozu: "Setup, Fehler, Lösungen.", tust: "Nachschlagen, wenn etwas klemmt.", merke: "Erst hier schauen, dann fragen." }, { kachel: "dateien", stufe: "bedarf", wozu: "Ablage für dich.", tust: "Dateien öffnen, die für dich abgelegt wurden.", merke: "Du kannst hier nichts hochladen." }, { kachel: "wissen", stufe: "bedarf", wozu: "Anleitungen zu TikTok und Technik.", tust: "Nach Stufe, Gerät oder Tag filtern.", merke: "Hier geht es um Streaming, nicht um den Workspace." }, { kachel: "support", stufe: "bedarf", wozu: "Etwas ist kaputt.", tust: "Kurz beschreiben, bis zu drei Bilder anhängen, abschicken.", merke: "DogFather und die rechte Hand kümmern sich." }, ], nicht: [ { titel: "Zahlen eintragen.", text: "Das macht deine Betreuung." }, { titel: "Start-Check und LIVE-Analyse bewerten.", text: "Du liest und antwortest nur." }, { titel: "Protokolle schreiben.", text: "Du liest sie nach." }, { titel: "Dateien hochladen.", text: "Geht in deiner Ansicht nicht." }, { titel: "Jede Kachel täglich öffnen.", text: "Die Zentrale sagt dir, was dran ist." }, ], takt: [ { titel: "Täglich", text: "Zentrale („Was ist dran“), Aufgaben, Chat." }, { titel: "Vor und nach dem LIVE", text: "LIVE-Analyse und Zahlen." }, { titel: "Wöchentlich", text: "Kalender, Calls & Protokolle, Agentur." }, { titel: "Monatlich", text: "Reports & Review und dein 90-Tage-Plan in Mein Profil." }, ], fragen: [ { titel: "Muss ich jede Kachel kennen?", text: "Nein. Fang mit den fünf Muss-Kacheln an. Der Rest kommt, wenn du ihn brauchst." }, { titel: "Ich habe meinen Code verloren.", text: "Sag deiner Betreuung oder DogFather Bescheid. Du bekommst einen neuen, " + "der alte gilt dann nicht mehr." }, { titel: "Warum sehe ich keine Zahlen?", text: "Für die Woche wurde noch kein Tag eingetragen. Sprich deine Betreuung an." }, { titel: "Wer sieht mein Profil?", text: "Dein Team: Bild, Name und was du über dich geschrieben hast." }, ], }, scout: { leitgedanke: "Finden, begleiten, übergeben. Du hast deine eigene Pipeline und betreust " + "die Creator, die du gebracht hast, bis ein Manager übernimmt.", saetze: [ "Dein Platz ist die Scout-Pipeline. Dort beginnt und endet dein Tag.", "Die Manager-Ziele sind Pflicht und starten jeden Monat neu.", "Die Betreuungs-Kacheln brauchst du nur für Creator, die noch bei dir sind.", ], schritte: [ { titel: "Mein Steckbrief", ziel: "steckbrief.html", text: "Bild, ein Satz über dich, deine Kanäle." }, { titel: "Scout-Pipeline", ziel: "scouting.html", text: "Mit „Neuer Kontakt“ den ersten anlegen, mit Datum für den nächsten Schritt." }, { titel: "Manager-Ziele", ziel: "manager-ziele.html", text: "Ansehen: deine vier festen Monatsaufgaben." }, { titel: "Dashboard", ziel: "uebersicht.html", text: "Unter „Wo ich diese Woche nachfassen würde“ steht, wer dich braucht." }, { titel: "Installieren", ziel: null, text: "Oben antippen." }, ], karten: [ { kachel: "scouting", stufe: "muss", wozu: "Dein Kontakt-Verzeichnis.", tust: "Kontakte durch fünf Stufen führen: Neu, Angesprochen, Gespräch, Interessiert, Übergeben.", merke: "Immer ein Datum setzen. Nur du und DogFather sehen deine Pipeline." }, { kachel: "manager-ziele", stufe: "muss", wozu: "Deine Pflichtaufgaben im Monat.", tust: "Eintragen: 3 Creator rekrutiert, 2 Manager-Meetings, 2 Schulungen oder Community Talks, 1 Werbevideo.", merke: "Acht Einträge pro Monat. Am besten bis Monatsmitte." }, { kachel: "aufgaben", stufe: "muss", wozu: "Wer macht was.", tust: "Aufgaben anlegen und zuteilen, aus der Vorlage mit 80 Aufgaben übernehmen.", merke: "Vier Spalten: Offen, In Arbeit, Zur Freigabe, Erledigt." }, { kachel: "chat", stufe: "muss", wozu: "Nachrichten mit dem Team.", tust: "Personen, Gruppen und Kanäle.", merke: "Vereinbarungen gehören ins Protokoll, nicht nur in den Chat." }, { kachel: "steckbrief", stufe: "muss", wozu: "So sehen dich die anderen.", tust: "Einmal ausfüllen: Bild, Satz, Kanäle.", merke: "Dein Bild erscheint überall neben deinem Namen." }, { kachel: "uebersicht", stufe: "regelmaessig", wozu: "Deine Creator auf einen Blick.", tust: "Sehen, wer lange nicht da war und wo ein Gespräch fehlt.", merke: "Mit „Schreiben“ direkt in den Chat." }, { kachel: "kalender", stufe: "regelmaessig", wozu: "Termine und Calls.", tust: "Termine anlegen, Wiederholungen einrichten.", merke: "Vier Ansichten: Monat, Woche, Liste, Zeitstrahl." }, { kachel: "calls", stufe: "regelmaessig", wozu: "Gespräche festhalten.", tust: "Call planen, danach „Protokoll schreiben“.", merke: "To-dos aus dem Protokoll werden Aufgaben." }, { kachel: "profil", stufe: "regelmaessig", wozu: "Akte je Creator.", tust: "Bei jedem neuen Creator: Stammdaten, Ziele und 90-Tage-Plan füllen.", merke: "Leere Profile erscheinen bei „Was ist dran“." }, { kachel: "startcheck", stufe: "regelmaessig", wozu: "Erstanalyse neuer Creator.", tust: "Bei jedem neuen Creator: 16 Punkte in vier Blöcken bewerten.", merke: "Jeder neue Creator braucht einen." }, { kachel: "bereich:schutz", stufe: "regelmaessig", wozu: "Unterweisungen.", tust: "Bei jedem neuen Creator: Dokumente durchgehen und bestätigen.", merke: "Die abgeschlossene Bestätigung ist der Nachweis." }, { kachel: "report", stufe: "regelmaessig", wozu: "Rückblick je Creator.", tust: "Einmal im Monat: Zeitraum wählen, Entscheidung festhalten.", merke: "Erledigt, blockiert, funktioniert, als Nächstes." }, { kachel: "leistung", stufe: "bedarf", wozu: "Was wirklich passiert ist.", tust: "Tage eintragen oder Backstage-Datei einlesen, Ziele setzen.", merke: "In Backstage den Zeitraum auf einen Tag stellen, sonst fehlen Tageswerte." }, { kachel: "bereich:live", stufe: "bedarf", wozu: "LIVEs systematisch verbessern.", tust: "Je Punkt setzen: passt, zu verbessern, passt nicht, kommt nicht vor.", merke: "Der Creator sieht es sofort." }, { kachel: "content", stufe: "bedarf", wozu: "Content planen.", tust: "Ideen anlegen und durch die fünf Stufen schieben.", merke: "Fertige Vorschläge lassen sich übernehmen." }, { kachel: "bereich:community", stufe: "bedarf", wozu: "Moderation und Konflikte.", tust: "Festhalten, was vorbereitet ist und was geholfen hat.", merke: "Drei Blöcke: vorbereiten, aufbauen, wenn es kippt." }, { kachel: "bereich:technik", stufe: "bedarf", wozu: "Setup und Fehler je Creator.", tust: "Aufbau, aktuelles Problem und Lösung dokumentieren.", merke: "Spart beim nächsten Ausfall Zeit." }, { kachel: "bereich:agentur", stufe: "bedarf", wozu: "Events, Schulungen, Anliegen.", tust: "Einträge anlegen, Rückmeldungen der Creator sehen.", merke: "DogFather entscheidet am Ende über Vorschläge." }, { kachel: "dateien", stufe: "bedarf", wozu: "Ablage und Freigaben.", tust: "Datei hochladen (bis 25 MB) und wählen, wer sie sehen darf.", merke: "Niemand ausgewählt heißt: nur DogFather sieht sie." }, { kachel: "wissen", stufe: "bedarf", wozu: "Anleitungen zu TikTok und Technik.", tust: "Nachschlagen und an Creator weitergeben.", merke: "15 Themenbereiche mit Filtern." }, { kachel: "support", stufe: "bedarf", wozu: "Etwas ist kaputt.", tust: "Beschreiben, Bilder anhängen, abschicken.", merke: "Geht an DogFather und die rechte Hand." }, ], nicht: [ { titel: "Die volle Betreuungsakte bei jedem Kontakt.", text: "Sie beginnt erst, wenn aus dem Kontakt ein Creator geworden ist." }, { titel: "Creator nach der Übergabe.", text: "Ab „Übergeben“ ist der Manager zuständig." }, { titel: "Personen anlegen und Codes vergeben.", text: "Das macht ein Manager. Sag ihm Bescheid." }, { titel: "Die Pipeline der anderen Scouts.", text: "Du siehst nur deine eigene." }, ], takt: [ { titel: "Täglich", text: "Zentrale, Scout-Pipeline (fällige Kontakte), Chat, Aufgaben." }, { titel: "Wöchentlich", text: "Dashboard, Calls & Protokolle schreiben, Start-Check und Creator-Profile neuer Creator." }, { titel: "Monatlich", text: "Manager-Ziele bis Monatsmitte erledigen, Reports & Review je Creator." }, ], fragen: [ { titel: "Wann zählt ein Kontakt als übergeben?", text: "Wenn ein Manager übernimmt. Ab da ist es Betreuung, kein Scouting mehr." }, { titel: "Wer sieht meine Pipeline?", text: "Du und DogFather. Manager und Spicy Media sehen die Gesamtübersicht." }, { titel: "Bis wann müssen die Manager-Ziele erledigt sein?", text: "Jeden Monat neu. Am besten bis Monatsmitte." }, ], }, manager: { leitgedanke: "Betreuung und Freigaben. Du hast dieselben Rechte wie die Leitung, nur ohne " + "Personenverwaltung. Du legst Creator an und hältst die Betreuung am Laufen.", saetze: [ "Dein Tag: Dashboard ansehen, Aufgaben freigeben, im Chat antworten.", "Die Manager-Ziele sind Pflicht und starten jeden Monat neu.", "Die Fach-Kacheln (LIVE-Analyse bis Technik) öffnest du je Creator, nicht täglich.", ], schritte: [ { titel: "Mein Steckbrief", ziel: "steckbrief.html", text: "Ausfüllen." }, { titel: "Personen & Zugänge", ziel: "personen.html", text: "Ansehen: So legst du einen neuen Creator an und gibst den Code weiter." }, { titel: "Dashboard", ziel: "uebersicht.html", text: "Hier siehst du alle Creator und wo es hakt." }, { titel: "Manager-Ziele", ziel: "manager-ziele.html", text: "Ansehen: deine vier festen Monatsaufgaben." }, { titel: "Aufgaben", ziel: "aufgaben.html", text: "Unter „Wer hat gerade was“ siehst du die Verteilung." }, ], karten: [ { kachel: "uebersicht", stufe: "muss", wozu: "Alle Creator auf einen Blick.", tust: "Nachfassen, wo jemand lange nicht da war.", merke: "Je Creator: Termine, Aufgaben, Zahlen, Start-Check." }, { kachel: "aufgaben", stufe: "muss", wozu: "Wer macht was.", tust: "Zuteilen, freigeben, Rückmeldung geben. Täglich die Spalte „Zur Freigabe“.", merke: "Tippe eine Person an, um nur ihre Aufgaben zu sehen." }, { kachel: "chat", stufe: "muss", wozu: "Nachrichten mit dem Team.", tust: "Personen, Gruppen, Kanäle.", merke: "Entscheidungen ins Protokoll übernehmen." }, { kachel: "manager-ziele", stufe: "muss", wozu: "Deine Pflichtaufgaben im Monat.", tust: "Rekrutierungen, Meetings, Schulungen, Werbevideo eintragen.", merke: "Acht Einträge pro Monat." }, { kachel: "personen", stufe: "muss", wozu: "Neue Leute anlegen.", tust: "Name und Rolle wählen, Code sofort weitergeben.", merke: "Der Code wird nur einmal gezeigt." }, { kachel: "steckbrief", stufe: "muss", wozu: "So sehen dich die anderen.", tust: "Einmal ausfüllen: Bild, Satz, Kanäle.", merke: "Jeder pflegt nur seinen eigenen." }, { kachel: "kalender", stufe: "regelmaessig", wozu: "Termine und Calls.", tust: "Termine und Wiederholungen anlegen.", merke: "Reviews und Fristen haben eigene Farben." }, { kachel: "calls", stufe: "regelmaessig", wozu: "Gespräche festhalten.", tust: "Call planen, Protokoll schreiben, To-dos vergeben.", merke: "Kein Call ohne Protokoll." }, { kachel: "profil", stufe: "regelmaessig", wozu: "Akte je Creator.", tust: "Stammdaten, Ziele, 90-Tage-Plan.", merke: "Die Zahl an der Kachel zeigt leere Profile." }, { kachel: "startcheck", stufe: "regelmaessig", wozu: "Erstanalyse.", tust: "16 Punkte bewerten.", merke: "Die Zahl an der Kachel zeigt Creator ohne Start-Check." }, { kachel: "bereich:schutz", stufe: "regelmaessig", wozu: "Unterweisungen.", tust: "Mit jedem neuen Creator durchgehen und bestätigen.", merke: "Danach unveränderlich." }, { kachel: "scouting", stufe: "regelmaessig", wozu: "Alle Scouts im Überblick.", tust: "Nach Scout filtern, Übergaben annehmen.", merke: "Ab „Übergeben“ bist du zuständig." }, { kachel: "leistung", stufe: "regelmaessig", wozu: "Diamanten, LIVE-Tage, Verweildauer.", tust: "Tage eintragen oder Datei einlesen, Ziele setzen.", merke: "Quelle ist Backstage." }, { kachel: "report", stufe: "regelmaessig", wozu: "Rückblick und Entscheidung.", tust: "Einmal im Monat: Zeitraum wählen, Entscheidung festhalten.", merke: "Vergleich mit dem Zeitraum davor." }, { kachel: "bereich:agentur", stufe: "regelmaessig", wozu: "Events, Schulungen, Anliegen.", tust: "Einträge anlegen, vorbereitete Vorschläge übernehmen.", merke: "Was hier nicht steht, wird vergessen." }, { kachel: "bereich:live", stufe: "bedarf", wozu: "LIVEs verbessern.", tust: "Feste Punkte bewerten, Notizen schreiben.", merke: "Vier Stufen von Anfänger bis Meister." }, { kachel: "content", stufe: "bedarf", wozu: "Content planen.", tust: "Ideen durch fünf Stufen führen.", merke: "61 feste Punkte als Leitfaden." }, { kachel: "bereich:community", stufe: "bedarf", wozu: "Moderation und Konflikte.", tust: "Vorbereitung und Vorfälle dokumentieren.", merke: "58 feste Punkte." }, { kachel: "bereich:technik", stufe: "bedarf", wozu: "Setup und Fehler.", tust: "Dokumentieren, was klemmt und was geholfen hat.", merke: "51 feste Punkte." }, { kachel: "dateien", stufe: "bedarf", wozu: "Ablage und Freigaben.", tust: "Hochladen, Sichtbarkeit wählen, freigeben.", merke: "Entwurf, Zur Freigabe, Freigegeben." }, { kachel: "wissen", stufe: "bedarf", wozu: "Anleitungen zu TikTok und Technik.", tust: "Nachschlagen und weitergeben.", merke: "Filter nach Stufe, Gerät, Tag." }, { kachel: "support", stufe: "bedarf", wozu: "Etwas ist kaputt.", tust: "Beschreiben, Bilder anhängen.", merke: "Geht an DogFather und die rechte Hand." }, ], nicht: [ { titel: "Personen sperren, Codes verwalten, Protokoll einsehen.", text: "Das liegt bei DogFather." }, { titel: "Kontakte suchen und ansprechen.", text: "Das machen die Scouts. Du übernimmst ab „Übergeben“." }, { titel: "Alle Fach-Kacheln für jeden Creator täglich öffnen.", text: "Die Zentrale und das Dashboard zeigen, wo etwas fehlt." }, ], takt: [ { titel: "Täglich", text: "Zentrale, Dashboard, Aufgaben (Spalte „Zur Freigabe“), Chat." }, { titel: "Wöchentlich", text: "Calls & Protokolle, Creator-Profile, Start-Check, Scout-Pipeline (Übergaben)." }, { titel: "Monatlich", text: "Manager-Ziele, Reports & Review, Agentur-Events." }, ], fragen: [ { titel: "Ein Creator hat seinen Code verloren.", text: "Unter Personen & Zugänge bei der Person „Neuer Code“. Der alte gilt dann nicht mehr." }, { titel: "Kann ich Personen sperren?", text: "Nein. Codes verwalten, sperren und das Protokoll einsehen kann nur DogFather." }, { titel: "Was passiert bei einer Rollenänderung?", text: "Der Code bleibt, offene Sitzungen enden, die Person meldet sich neu an." }, { titel: "Woran erkenne ich, wo es brennt?", text: "Zentrale: der Satz unter „Zentrale“ und die Liste „Was ist dran“." }, ], }, spicy: { leitgedanke: "Überblick über alle, ohne Automationen. Du siehst das ganze Haus und zusätzlich " + "die Team-Lage: wer wen betreut und wo sich etwas staut.", saetze: [ "Du brauchst den Überblick, nicht die Einzelheiten jedes Creators.", "Team-Lage und Dashboard zeigen dir, wo sich etwas staut.", "In der Kachel Agentur kommen die Anliegen der Creator direkt bei dir an.", ], schritte: [ { titel: "Mein Steckbrief", ziel: "steckbrief.html", text: "Ausfüllen: Bild, Satz, Kanäle." }, { titel: "Team-Lage", ziel: "team.html", text: "Auslastung von Managern und Scouts, Creator ohne Betreuung." }, { titel: "Dashboard", ziel: "uebersicht.html", text: "Alle Creator mit Terminen, Aufgaben und Start-Check." }, { titel: "Agentur", ziel: "bereich.html?b=agentur", text: "Events, Schulungen und Anliegen an die Agentur." }, { titel: "Kopfleiste", ziel: null, text: "Oben findest du Teilen, Chat und Suchen." }, ], karten: [ { kachel: "team", stufe: "muss", wozu: "Manager und Scouts im Blick.", tust: "Sehen, wer wen betreut, wo jemand fehlt, wer ohne Creator ist.", merke: "Arbeitslage, keine Überwachung: keine Inhalte aus Terminen, Chats oder Dateien." }, { kachel: "uebersicht", stufe: "muss", wozu: "Alle Creator.", tust: "Je Creator den Stand prüfen.", merke: "Zeigt auch, wer lange nicht da war." }, { kachel: "bereich:agentur", stufe: "muss", wozu: "Offizieller Weg zur Agentur.", tust: "Events mit Aufgaben anlegen, Schulungen eintragen, Anliegen beantworten.", merke: "Hier schreiben Creator direkt an die Agentur." }, { kachel: "chat", stufe: "muss", wozu: "Nachrichten.", tust: "Personen, Gruppen, Kanäle.", merke: "Kanäle für Ankündigungen nutzen." }, { kachel: "steckbrief", stufe: "muss", wozu: "So sehen dich die anderen.", tust: "Einmal ausfüllen: Bild, Satz, Kanäle.", merke: "Steht unter „Leitung“ in der Teamliste." }, { kachel: "aufgaben", stufe: "regelmaessig", wozu: "Wer macht was.", tust: "Verteilung sehen, freigeben.", merke: "Filter nach Person." }, { kachel: "manager-ziele", stufe: "regelmaessig", wozu: "Feste Monatsaufgaben.", tust: "Eigene Einträge machen, Stand des Teams verfolgen.", merke: "Vorgabe der Agentur, jeden Monat neu." }, { kachel: "scouting", stufe: "regelmaessig", wozu: "Alle Scouts.", tust: "Nach Scout filtern, liegengebliebene Kontakte erkennen.", merke: "Fünf Stufen bis zur Übergabe." }, { kachel: "kalender", stufe: "regelmaessig", wozu: "Termine und Calls.", tust: "Schulungen und Events eintragen.", merke: "Wiederholungen laufen von allein." }, { kachel: "report", stufe: "regelmaessig", wozu: "Rückblick und Entscheidung.", tust: "Einmal im Monat: Zeitraum wählen, Entwicklung prüfen.", merke: "7, 30 oder 90 Tage." }, { kachel: "calls", stufe: "bedarf", wozu: "Gespräche festhalten.", tust: "Protokolle lesen und schreiben.", merke: "To-dos werden Aufgaben." }, { kachel: "dateien", stufe: "bedarf", wozu: "Ablage und Freigaben.", tust: "Hochladen, Sichtbarkeit wählen, freigeben.", merke: "Aktuelle Version ist immer erkennbar." }, { kachel: "profil", stufe: "bedarf", wozu: "Akte je Creator.", tust: "Ziele und 90-Tage-Plan einsehen.", merke: "Leere Profile werden gezählt." }, { kachel: "leistung", stufe: "bedarf", wozu: "Leistung je Creator.", tust: "Wochenzahlen und Zeiträume ansehen.", merke: "Quelle ist Backstage." }, { kachel: "startcheck", stufe: "bedarf", wozu: "Erstanalyse.", tust: "Stand der Bewertung einsehen, bei Bedarf eintragen.", merke: "Teil der Betreuungsakte." }, { kachel: "bereich:live", stufe: "bedarf", wozu: "LIVEs verbessern.", tust: "Stand der Bewertung einsehen, bei Bedarf eintragen.", merke: "Teil der Betreuungsakte." }, { kachel: "content", stufe: "bedarf", wozu: "Content planen.", tust: "Stand einsehen, bei Bedarf eintragen.", merke: "Teil der Betreuungsakte." }, { kachel: "bereich:community", stufe: "bedarf", wozu: "Moderation und Konflikte.", tust: "Stand einsehen, bei Bedarf eintragen.", merke: "Teil der Betreuungsakte." }, { kachel: "bereich:technik", stufe: "bedarf", wozu: "Setup und Fehler.", tust: "Stand einsehen, bei Bedarf eintragen.", merke: "Teil der Betreuungsakte." }, { kachel: "bereich:schutz", stufe: "bedarf", wozu: "Unterweisungen.", tust: "Sehen, wer welche Dokumente bestätigt hat.", merke: "Bestätigungen sind der Nachweis." }, { kachel: "personen", stufe: "bedarf", wozu: "Neue Leute anlegen.", tust: "Person anlegen, Rolle wählen, Code weitergeben.", merke: "Codes, Sperren und Protokoll bleiben bei DogFather." }, { kachel: "wissen", stufe: "bedarf", wozu: "Anleitungen und PDFs.", tust: "Nachschlagen.", merke: "Schulungs-PDFs der Agentur gehören hierher." }, { kachel: "support", stufe: "bedarf", wozu: "Etwas ist kaputt.", tust: "Beschreiben, Bilder anhängen.", merke: "Geht an DogFather und die rechte Hand." }, ], nicht: [ { titel: "Die tägliche Betreuung einzelner Creator.", text: "Das machen Manager und Scouts." }, { titel: "Die Betreuungsakte selbst füllen.", text: "Du schaust rein, wenn es einen Anlass gibt." }, { titel: "Automationen (Sicherungen, lokale KI, Hintergrunddienste).", text: "Die verwaltet nur DogFather." }, { titel: "Codes sperren und Protokoll.", text: "Bleibt bei DogFather." }, ], takt: [ { titel: "Täglich", text: "Zentrale, Team-Lage, Chat." }, { titel: "Wöchentlich", text: "Dashboard, Scout-Pipeline, Agentur (Anliegen beantworten), Aufgaben zur Freigabe." }, { titel: "Monatlich", text: "Manager-Ziele des Teams, Reports & Review, neue Events eintragen." }, ], fragen: [ { titel: "Was heißt „ohne Automationen“?", text: "Sicherungen, lokale KI und Hintergrunddienste verwaltet nur DogFather." }, { titel: "Sehe ich private Chats oder Termine?", text: "Nein. Die Team-Lage zeigt nur die Arbeitslage." }, { titel: "Wo beantworte ich Anliegen der Creator?", text: "In der Kachel Agentur unter „Anliegen an die Agentur“." }, { titel: "Wo trage ich ein neues Event ein?", text: "Agentur, „Neuer Eintrag“, Art „Agentur-Events“, mit Aufgaben und Frist." }, ], }, }; /* ===================================================================== ANLEGEN UND ERSTBEFUELLEN ===================================================================== */ /** Spielt eine Rolle ein — aber nur, wenn fuer sie noch GAR NICHTS da ist. * * DAS IST DIE WICHTIGSTE ZEILE DIESER DATEI. Ein Einspielen bei jedem * Serverstart wuerde jede Aenderung aus der Pflege-Ansicht beim * naechsten Neustart ueberschreiben — lautlos, und man wuerde es erst * Wochen spaeter merken, wenn jemand fragt, warum sein Text wieder * der alte ist. * * Gepruefte Bedingung ist "keine einzige Karte dieser Rolle", nicht * "Tabelle leer": Sonst bekaeme Rolle zwei nichts mehr, sobald Rolle * eins drin ist. */ function rolleEinspielen(d, haus, rolle, inhalt, jetzt) { const schon = d.prepare( "SELECT COUNT(*) n FROM anl_karte WHERE haus = ? AND rolle = ?").get(haus, rolle)?.n ?? 0; if (schon > 0) return 0; const karte = d.prepare( `INSERT INTO anl_karte (haus, rolle, kachel, stufe, wozu, tust, merke, reihe, geaendert) VALUES (?,?,?,?,?,?,?,?,?)`); const zeile = d.prepare( `INSERT INTO anl_zeile (haus, rolle, art, reihe, titel, text, ziel, geaendert) VALUES (?,?,?,?,?,?,?,?)`); let n = 0; inhalt.karten.forEach((k, i) => { karte.run(haus, rolle, k.kachel, k.stufe, k.wozu, k.tust, k.merke, i, jetzt); n++; }); const listen = [ ["satz", inhalt.saetze.map((t) => ({ titel: "", text: t, ziel: null }))], ["schritt", inhalt.schritte], ["nicht", inhalt.nicht], ["takt", inhalt.takt], ["frage", inhalt.fragen], /* Nur die Community bringt "Drei Dinge vorweg" mit. Fehlt die Liste, wird nichts eingetragen -- kein Sonderfall noetig. */ ["vorweg", inhalt.vorweg || []], ]; for (const [art, liste] of listen) { liste.forEach((z, i) => { zeile.run(haus, rolle, art, i, z.titel ?? "", z.text ?? "", z.ziel ?? null, jetzt); n++; }); } d.prepare( `INSERT INTO anl_rolle (haus, rolle, leitgedanke, geaendert) VALUES (?,?,?,?) ON CONFLICT(haus, rolle) DO NOTHING`).run(haus, rolle, inhalt.leitgedanke, jetzt); return n; } export function anleitungTabellen(d) { d.exec(TABELLEN); const jetzt = new Date().toISOString(); let gesamt = 0; const neu = []; for (const [haus, rollen, quelle] of [ ["agentur", FASSUNGEN, INHALTE], ["crew", FASSUNGEN_CREW, INHALTE_CREW], ]) { for (const rolle of rollen) { const inhalt = quelle[rolle]; /* Eine Rolle ohne Inhalte ist kein Fehler, sondern der Stand der Arbeit: Etappe 1 bringt nur den Creator, die drei anderen kommen in Etappe 3. Still uebergehen — aber die Zuordnungspruefung weiss davon und meldet es als offen, nicht als in Ordnung. */ if (!inhalt) continue; const n = rolleEinspielen(d, haus, rolle, inhalt, jetzt); if (n) { gesamt += n; neu.push(`${haus}/${rolle} ${n}`); } } } if (gesamt) { console.log(`[workspace] Anleitung: ${gesamt} Zeilen erstbefuellt (${neu.join(", ")}).`); } }