{
  "$description": "as.if.records – Sprachsystem, maschinenlesbar. Ergänzt tokens.json (Design) um die Sprache. Wer Text für diese Marke schreibt oder prüft, liest zusätzlich /brand.md Abschnitt 11–12. Diese Datei ist für Linter, Skills und Pipelines gedacht.",
  "version": "1.0.0",
  "updated": "2026-08-03",
  "core": {
    "oneLine": "Lakonisch, konkret, per Du, lokal verankert, klug ohne klugzuscheißen – nie cheesy, nie KI-Sprech.",
    "laws": [
      "Konkret schlägt kategorial. Zahl, Ort, Jahr, Name statt Kategorie.",
      "Ein Gedanke, eine Landung. Nicht jeder Satz will pointen.",
      "Runter vom Register. Gesprochen statt literarisch.",
      "Zeig die Arbeit. Handwerk benennen, Nichtwissen zugeben.",
      "Nie erklären, was schon dasteht. Wer den Gag erklärt, hat ihn getötet."
    ],
    "gagPattern": "Setup (banale Alltagswahrheit) → Umkehr (die Drehung) → Landung (trockener Wink, unaufgelöst)"
  },
  "influences": {
    "bbc6music": "Wissen ohne Angeberei, Selbstironie, Präzision als Pointe. Referenz: 'reduced me to the kind of person that cries at traffic lights ... and sleep past 5.13am' – die exakte Uhrzeit ist der Witz.",
    "fm4": "Denglisch ohne Scham, direkte Ansprache (du/ihr), gesprochene Ellipse ('Und eure Serienempfehlungen so?'), Wortspiel in der Headline, Kategorie-Kicker über dem Titel.",
    "threadheads": "Absurdität mit Augenzwinkern, die sich selbst auffliegen lässt ('You probably wouldn't believe us. And you're right not to.'), plus schnörkellose Ehrlichkeit im Fehlerfall. WARNUNG: deren SEO-Sammelseiten sind KI-Slop und ausdrücklich kein Vorbild.",
    "asif": "Setup→Umkehr, der bodenständig-konkrete Ort schlägt die clevere Abstraktion, Wiederholung als Rhythmus statt zwanghafter Variation."
  },
  "address": {
    "default": "du",
    "duContexts": [
      "social",
      "journal",
      "website",
      "produkt",
      "newsletter",
      "buchung",
      "events",
      "spirits",
      "support",
      "chat",
      "microcopy"
    ],
    "sieContexts": [
      "mietverhaeltnisse",
      "behoerden",
      "vertraege",
      "mahnwesen",
      "erstkontakt-b2b-formell"
    ],
    "rule": "Du ist der Default. Sie nur wo rechtlich/geschäftlich geboten. Dazwischen entscheidet der Kontext, nicht die Vorsicht."
  },
  "punctuation": {
    "dash": {
      "de": {
        "allowed": "–",
        "name": "Halbgeviertstrich mit Leerzeichen davor und danach",
        "forbidden": [
          "—"
        ],
        "maxPerText": 1,
        "note": "Der Geviertstrich – ist im Deutschen typografisch falsch und der auffälligste KI-Marker. Im Zweifel Punkt, Komma, Doppelpunkt oder Klammer. Ein Einschub in Gedankenstrichen nutzt zwei Striche und gilt als ein Konstrukt."
      },
      "en": {
        "allowed": "—",
        "maxPerText": 1,
        "note": "Erlaubt, aber rationiert. Nie als Rhythmus-Krücke ('X – and that's the point')."
      },
      "neverPattern": "Gedankenstrich als dramatische Pause vor der Pointe. Das ist Verkaufsprosa, kein Sprechen."
    },
    "quotes": {
      "de": "„…\"",
      "en": "\"…\"",
      "note": "Gerade Anführungszeichen in Code-Kontexten."
    },
    "ellipsis": {
      "max": 1,
      "note": "Auslassungspunkte wirken schnell schwerfällig."
    },
    "exclamation": {
      "max": 1,
      "note": "Ausnahme: Veedel-Opener als Ausruf (NIPPES!)."
    },
    "emoji": {
      "social": "0–2, nie als Aufzählungszeichen",
      "everywhereElse": "keine"
    }
  },
  "banned": {
    "aiVocabDe": [
      "nahtlos",
      "ganzheitlich",
      "maßgeschneidert",
      "innovativ",
      "revolutionär",
      "bahnbrechend",
      "wegweisend",
      "einzigartig",
      "hochwertig",
      "vielfältig",
      "spannend",
      "Mehrwert",
      "Synergie",
      "Ökosystem",
      "Reise",
      "Landschaft",
      "eintauchen",
      "beleuchten",
      "unterstreichen",
      "widerspiegeln"
    ],
    "aiVocabEn": [
      "delve",
      "landscape",
      "tapestry",
      "journey",
      "elevate",
      "embark",
      "leverage",
      "harness",
      "realm",
      "myriad",
      "plethora",
      "multifaceted",
      "groundbreaking",
      "revolutionize",
      "synergy",
      "resonate",
      "streamline",
      "seamless",
      "robust",
      "cutting-edge",
      "transformative",
      "curated",
      "handpicked",
      "unlock",
      "empower",
      "level up",
      "game-changer"
    ],
    "hypeAdjectives": [
      "perfekt",
      "premium",
      "exklusiv",
      "feinster",
      "exquisit",
      "magisch",
      "unvergleichlich",
      "stunning",
      "must-have",
      "limitiert",
      "epic",
      "killer"
    ],
    "inflation": [
      "ist ein Beweis für",
      "spielt eine entscheidende Rolle",
      "markiert einen Wendepunkt",
      "unterstreicht die Bedeutung",
      "is a testament to",
      "pivotal moment",
      "underscores its importance"
    ],
    "copulaAvoidance": {
      "de": {
        "fungiert als": "ist",
        "dient als": "ist",
        "bietet": "hat",
        "verfügt über": "hat",
        "präsentiert": "zeigt"
      },
      "en": {
        "serves as": "is",
        "stands as": "is",
        "boasts": "has",
        "features": "has"
      }
    },
    "closers": [
      "Stay tuned",
      "Folgt uns für mehr",
      "Cheers from Cologne",
      "Wir freuen uns auf euch",
      "Bleibt gespannt",
      "Only time will tell",
      "The future looks bright"
    ],
    "hooks": [
      "Wir freuen uns",
      "Heute zeigen wir euch",
      "Hi Leute",
      "Es ist soweit",
      "Aufgepasst"
    ],
    "chatbotArtifacts": [
      "Gerne!",
      "Sehr gute Frage",
      "Ich hoffe, das hilft",
      "Lass mich wissen, ob",
      "Great question",
      "I hope this helps",
      "Let me know if"
    ],
    "structureTells": [
      "Das bedeutet für dich:",
      "Fazit:",
      "Kurz gesagt:",
      "Das Wichtigste in Kürze:",
      "Zusammenfassend",
      "Abschließend lässt sich sagen",
      "The takeaway:",
      "Why it matters:"
    ],
    "emailPhrases": [
      "Ich hoffe, diese E-Mail findet Sie wohlauf",
      "Vielen Dank für Ihre geschätzte Anfrage",
      "Gerne möchte ich Ihnen mitteilen",
      "Zögern Sie nicht, uns zu kontaktieren",
      "stehen wir Ihnen selbstverständlich gerne zur Verfügung",
      "Wir freuen uns auf eine erfolgreiche Zusammenarbeit",
      "Im Hinblick auf",
      "Bezüglich der von Ihnen angesprochenen Thematik",
      "Für Rückfragen stehe ich jederzeit zur Verfügung",
      "in Kürze melden wir uns bei Ihnen"
    ]
  },
  "structure": {
    "sentenceRhythm": {
      "rule": "Länge variieren. Mindestens ein Satz unter 8 Wörtern pro Absatz-Block.",
      "flag": "Drei Sätze in Folge mit 15–25 Wörtern ist KI-Metronom."
    },
    "negativeParallelism": {
      "maxPerText": 1,
      "examples": [
        "nicht nur … sondern auch",
        "es geht nicht um X, es geht um Y",
        "not just X, it's Y"
      ]
    },
    "ruleOfThree": {
      "note": "Nicht erzwingen. Zwei ist okay, vier ist okay."
    },
    "synonymCycling": {
      "note": "Ein Begriff, dann dabei bleiben. Wiederholung baut Rhythmus."
    },
    "boldface": {
      "note": "Sparsam. Keine Listen aus fetten Kopfzeilen mit Doppelpunkt."
    },
    "headings": {
      "case": "Satzform, keine Title Case, keine Emojis"
    }
  },
  "channels": {
    "social": {
      "length": "A ~250 Zeichen (kurz/spitz), B ~600 Zeichen (szenisch)",
      "structure": "Hook Zeile 1 → Szene → Landung → Brand-Anker",
      "hookTypes": [
        "Beobachtung",
        "Statement",
        "Wortspiel/Setup",
        "Quote"
      ],
      "cta": "echte Frage oder keine",
      "hashtags": {
        "default": "0–3",
        "event": "max 5",
        "placement": "erster Kommentar"
      },
      "closer": "URL, Adresse oder Tag – nie Marketing-Schluss",
      "oneGoal": "Schickt der Post Leute physisch wohin, gehört keine URL dran."
    },
    "journal": {
      "language": "de",
      "person": "erste Person erlaubt und erwünscht",
      "opening": "Ort, Jahr, Szene – nicht These",
      "detail": "exakte Zahlen, echte Namen, benannte Arbeit",
      "example": "Dockland, Münster, 2005. Ich war 17 … 45 Songs in 80 Minuten",
      "length": "Lesebreite 68 Zeichen, keine Zwischenüberschrift alle drei Absätze"
    },
    "radioEditorial": {
      "language": "en",
      "case": "durchgehend klein",
      "structure": "Aufforderung → Fakten dicht (Namen, Jahre, Orte) → Urteilssatz als Fragment",
      "example": "if you missed luiz melodia … go dig. … between malandro swagger and blues ache. nobody in mpb sounds like him.",
      "closer": "as-if-radio.com"
    },
    "website": {
      "rule": "Sagen was es ist, dann was man davon hat. Keine Vorrede.",
      "productCopy": "konkrete Optionen statt Adjektive: 'ein Shot im Espresso, auf Eis als Carajillo, oder pur'",
      "seoWarning": "Sammelseiten sind die häufigste KI-Slop-Falle. Lieber kurz und echt als lang und generisch."
    },
    "email": {
      "pillars": [
        "Direkt und ehrlich: wenn etwas nicht klappte, steht das da",
        "Proaktiv: gleich mitliefern was als Naechstes passiert",
        "Warm ohne Kitsch: persoenliches Detail wo es passt, keine Floskeln"
      ],
      "senders": {
        "hello@as-if-records.com": "Marke: Buchungen Spaces/Spirits/Studio, kreative Anfragen, Kooperationen",
        "mail@fokses.com": "Geschaeft: Immobilien, Nebenkosten, Vertraege, Behoerden, Banken, Dienstleister",
        "pierre.severin@gmail.com": "privat"
      },
      "senderRule": "An welche Adresse ging die urspruengliche Mail? Ueber dieselbe antworten.",
      "salutation": {
        "vertraut": "Hey Vorname,",
        "buchung": "Hallo liebe Vorname, / Hi Vorname,",
        "geschaeftlich": "Hallo Frau/Herr Nachname,",
        "gruppe": "Hallo zusammen,",
        "formell": "Sehr geehrte Damen und Herren,"
      },
      "signoff": {
        "vertraut": "Liebe Gruesse (+ persoenlicher Zusatz)",
        "buchung": "Viele Gruesse aus Koeln Nippes & bis ganz bald",
        "geschaeftlich": "Beste Gruesse",
        "formell": "Viele Gruesse / Mit freundlichen Gruessen + Nachname"
      },
      "duSie": "Buchungskontext ist fast immer Du, auch bei foermlichem Absender. Sie nur bei Mietern, Behoerden, Banken, Fach-Dienstleistern.",
      "lateReply": "Aelter als 7 Tage: ein Satz Entschuldigung, konkret, ohne Unterwuerfigkeit. Ueber 14 Tage deutlicher. Nie mehr als ein Satz.",
      "edgeCase": "Anfrage passt nicht ganz? Kluge Rueckfrage statt Ja oder Nein.",
      "subject": "Konkret und benennend, kein Clickbait, kein Ausrufezeichen. Bei Antworten Betreff stehen lassen.",
      "length": "ein Anliegen pro Mail, erster Satz ist die Sache"
    },
    "support": {
      "principle": "Fehler schnörkellos benennen, Verantwortung übernehmen, konkret sagen was passiert",
      "never": [
        "Bedauern ohne Zuständigkeit",
        "Passivkonstruktionen",
        "Textbausteine",
        "Schuld beim Kunden"
      ],
      "example": "Das hat viel zu lange gedauert, und dich die Zollgebühr vorstrecken zu lassen war unser Fehler. Ist erledigt, das Paket ist unterwegs."
    },
    "chat": {
      "length": "1–3 Sätze",
      "rule": "antworten, nicht moderieren. Keine Begrüßungsformel vor jeder Nachricht."
    },
    "newsletter": {
      "opening": "wie ein Brief, nicht wie eine Kampagne",
      "rule": "ein Thema trägt den Newsletter, der Rest ist Anhang"
    },
    "microcopy": {
      "buttons": "Verb + Objekt, kleingeschrieben okay: 'Platte ansehen', 'Termin buchen'",
      "never": [
        "Jetzt entdecken",
        "Mehr erfahren",
        "Hier klicken"
      ],
      "errors": "sagen was passiert ist und was jetzt hilft, keine Entschuldigungsfloskel",
      "empty": "kurz und trocken, kein Aufmunterungs-Sprech"
    },
    "formal": {
      "contexts": [
        "Mietverhältnisse",
        "Behörden",
        "Verträge",
        "Mahnwesen"
      ],
      "rule": "Sie, sachlich, vollständig – aber trotzdem ohne Floskeln und ohne Amtsdeutsch"
    }
  },
  "checks": [
    {
      "id": "em-dash-de",
      "severity": "error",
      "lang": "de",
      "pattern": "—",
      "flags": "u",
      "message": "Geviertstrich im deutschen Text. Nutze – mit Leerzeichen.",
      "fix": "replace ' — ' with ' – '"
    },
    {
      "id": "dash-count",
      "severity": "warn",
      "pattern": "[–—]",
      "flags": "gu",
      "maxMatches": 2,
      "message": "Mehr als ein Gedankenstrich-Konstrukt pro Text. Ein Einschub nutzt zwei Striche und zaehlt als eins."
    },
    {
      "id": "dash-as-drumroll",
      "severity": "error",
      "pattern": "[ ][–—][ ](und genau das|and that's|das ist der Punkt|genau darum)",
      "flags": "giu",
      "message": "Gedankenstrich als dramatische Pause vor der Pointe. Verkaufsprosa."
    },
    {
      "id": "banned-vocab",
      "severity": "error",
      "wordlist": [
        "banned.aiVocabDe",
        "banned.aiVocabEn",
        "banned.hypeAdjectives",
        "banned.emailPhrases"
      ],
      "patternTemplate": "\\b{word}\\b",
      "flags": "giu",
      "message": "Verbranntes Wort. Streichen und durch ein konkretes Detail ersetzen."
    },
    {
      "id": "banned-hook",
      "severity": "error",
      "wordlist": [
        "banned.hooks"
      ],
      "patternTemplate": "^\\s*{word}",
      "flags": "iu",
      "message": "Verbrannter Einstieg. Hook muss ziehen: Beobachtung, Statement, Wortspiel oder Quote."
    },
    {
      "id": "banned-closer",
      "severity": "error",
      "wordlist": [
        "banned.closers"
      ],
      "patternTemplate": "{word}[\\s!.]*$",
      "flags": "iu",
      "message": "Floskel-Schluss. Closer ist ein Brand-Anker: URL, Adresse oder Tag."
    },
    {
      "id": "structure-tell",
      "severity": "error",
      "wordlist": [
        "banned.structureTells"
      ],
      "patternTemplate": "{word}",
      "flags": "giu",
      "message": "Struktur-Verräter. Aussage in den Fließtext holen."
    },
    {
      "id": "chatbot-artifact",
      "severity": "error",
      "wordlist": [
        "banned.chatbotArtifacts"
      ],
      "patternTemplate": "{word}",
      "flags": "giu",
      "message": "Chatbot-Rest. Ersatzlos streichen."
    },
    {
      "id": "copula-avoidance",
      "severity": "warn",
      "mapping": "banned.copulaAvoidance",
      "patternTemplate": "\\b{key}\\b",
      "flags": "giu",
      "message": "Umständliche Konstruktion. Sag 'ist' oder 'hat'."
    },
    {
      "id": "negative-parallelism",
      "severity": "warn",
      "pattern": "(nicht nur[^.]{0,60}sondern auch|es geht nicht um[^.]{0,40}es geht um|not just[^.]{0,40}it's)",
      "flags": "giu",
      "maxMatches": 1,
      "message": "Negative Parallele mehr als einmal. Einmal okay, fünfmal ist KI."
    },
    {
      "id": "rhythm-metronome",
      "severity": "warn",
      "algorithm": "sentenceLengths",
      "condition": "3 aufeinanderfolgende Saetze mit 15-25 Woertern",
      "message": "KI-Metronom. Mindestens ein kurzer Satz pro Block."
    },
    {
      "id": "bold-header-list",
      "severity": "warn",
      "pattern": "(^|\\n)\\s*[-*]\\s*\\*\\*[^*]{1,40}\\*\\*\\s*:",
      "flags": "gu",
      "maxMatches": 2,
      "message": "Liste aus fetten Kopfzeilen mit Doppelpunkt. In Prosa aufloesen."
    },
    {
      "id": "hashtag-wall",
      "severity": "error",
      "pattern": "#\\w+",
      "flags": "gu",
      "maxMatches": 5,
      "message": "Zu viele Hashtags. Default 0-3, Event max 5, im ersten Kommentar."
    },
    {
      "id": "emoji-bullet",
      "severity": "error",
      "pattern": "(^|\\n)\\s*[\\u2600-\\u27BF\\u{1F300}-\\u{1F9FF}]\\s+",
      "flags": "gu",
      "message": "Emoji als Aufzaehlungszeichen."
    },
    {
      "id": "exclamation-flood",
      "severity": "warn",
      "pattern": "!",
      "flags": "gu",
      "maxMatches": 1,
      "message": "Mehr als ein Ausrufezeichen. Ausnahme: Veedel-Opener (NIPPES!)."
    }
  ],
  "readAloudTest": "Zum Schluss laut lesen. Raus muss alles, was klingt wie Pressemitteilung, was niemand so sagen würde, was sich zu klug vorkommt, oder was man mit ausgetauschten Substantiven über jedes andere Thema schreiben könnte.",
  "checksUsage": {
    "note": "Jeder Check ist ausfuehrbar. 'pattern' ist ein direkter Regex. 'wordlist' verweist auf Felder unter banned.* – pro Wort wird patternTemplate mit {word} befuellt. 'mapping' nutzt die Keys eines Objekts als {key}. 'maxMatches' heisst: erst ab MEHR als n Treffern melden.",
    "example": "const re = new RegExp(check.pattern, check.flags); const hits = [...text.matchAll(re)]; if (hits.length > (check.maxMatches ?? 0)) report(check);"
  }
}
