From 99f040cfb0c49ae1f212630eea93d6f17970941e Mon Sep 17 00:00:00 2001 From: Marc Mintel Date: Sun, 22 Feb 2026 17:55:09 +0100 Subject: [PATCH] feat(ai): forcefully randomize meme templates and expand B2B YouTube channels --- packages/content-engine/src/orchestrator.ts | 33 +++++++++++++++++-- packages/journaling/src/agent.ts | 2 +- packages/thumbnail-generator/src/generator.ts | 2 +- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/packages/content-engine/src/orchestrator.ts b/packages/content-engine/src/orchestrator.ts index 8c1f453..bb9a63c 100644 --- a/packages/content-engine/src/orchestrator.ts +++ b/packages/content-engine/src/orchestrator.ts @@ -145,7 +145,9 @@ export class AiBlogPostOrchestrator { } } } else if (newFmMatch && newFmMatch[1]) { - console.log(`ℹ️ Rename skipped (permalink stability active). If you want to rename, use --rename.`); + console.log( + `ℹ️ Rename skipped (permalink stability active). If you want to rename, use --rename.`, + ); } // Idea 5: Automatic Thumbnails @@ -177,7 +179,9 @@ export class AiBlogPostOrchestrator { } if (physicalFileExists) { - console.log(`⏭️ Thumbnail already exists on disk, skipping generation: ${thumbnailAbsPath}`); + console.log( + `⏭️ Thumbnail already exists on disk, skipping generation: ${thumbnailAbsPath}`, + ); } else { const visualPrompt = await this.generateVisualPrompt(finalContent); await this.thumbnailGenerator.generateImage( @@ -400,6 +404,29 @@ Return ONLY the JSON.`, }) .join("\n\n"); + const memeTemplates = [ + "distracted", + "gb", + "fine", + "ds", + "gru", + "cmm", + "ahb", + "uno", + "disastergirl", + "pigeon", + "rollsafe", + "pikachu", + "slap", + "exit", + "mordor", + "panik-kalm-panik", + "womanyellingcat", + "grumpycat", + ]; + const forcedMeme = + memeTemplates[Math.floor(Math.random() * memeTemplates.length)]; + const response = await this.openai.chat.completions.create({ model: this.model, messages: [ @@ -438,7 +465,7 @@ BLOG POST BEST PRACTICES (MANDATORY): - DEVIL'S ADVOCATE: Füge zwingend eine kurze kritische Sektion ein (z.B. mit \`\` oder \`\`), in der du offen die Nachteile/Kosten/Haken deiner eigenen Lösung ansprichst ("Der Haken an der Sache..."). Das baut Vertrauen bei B2B Entscheidenden auf. - FAQ GENERATOR: Am absoluten Ende des Artikels erstellst du zwingend eine Markdown-Liste mit den 3 wichtigsten Fragen (FAQ) und Antworten (jeweils 2 Sätze) für Google Rich Snippets. Nutze dazu das FAQSection Component oder normales Markdown. - SUBTLE CTAs: Webe 1-2 subtile CTAs für High-End Website Entwicklung ein. Nutze ZWINGEND die Komponente [LeadMagnet] für diese Zwecke anstelle von einfachen Buttons. [LeadMagnet] bietet mehr Kontext und Vertrauen. Beispiel: . Die Texte im LeadMagnet müssen absolut überzeugend, hochprofessionell und B2B-fokussiert sein (KEIN Robotik-Marketing-Sprech). -- MEME DIVERSITY: Nutze abwechslungsreiche Templates für Memes (distracted, gb, fine, ds, gru, cmm, ahb, uno, disastergirl, pigeon, rollsafe, pikachu, slap, exit, mordor, panik-kalm-panik). Wiederhole NIEMALS das gleiche Template in verschiedenen Artikeln, wenn du kannst. Wähle basierend auf dem Kontext des Artikels das passendste und sarkastischste Template. +- MEME DIVERSITY: Du MUSST ZWINGEND für jedes Meme (sofern passend) abwechslungsreiche Templates nutzen. Um dies zu garantieren, wurde für diesen Artikel das folgende Template ausgewählt: '${forcedMeme}'. Du MUSST EXAKT DIESES TEMPLATE NUTZEN. Versuche nicht, es durch ein Standard-Template wie 'drake' zu ersetzen! - Zitat-Varianten: Wenn du Organisationen oder Studien zitierst, nutze ArticleQuote (mit isCompany=true für Firmen). Für Personen lass isCompany weg. - Füge zwingend ein prägnantes 'TL;DR' ganz am Anfang ein. - Füge ein sauberes TableOfContents ein. diff --git a/packages/journaling/src/agent.ts b/packages/journaling/src/agent.ts index 40782b7..dcf4eaa 100644 --- a/packages/journaling/src/agent.ts +++ b/packages/journaling/src/agent.ts @@ -250,7 +250,7 @@ ${ytVideos.map((v, i) => `[ID: ${i}] Title: "${v.title}" | Channel: "${v.channel RULES: 1. The video MUST be highly relevant to the context. -2. The channel SHOULD be a tech, development, or professional business channel (avoid gaming, vlogs, unrelated topics). +2. The channel SHOULD be a high-quality tech, development, or professional B2B channel (e.g., Google Developers, Vercel, Theo - t3.gg, Fireship, Syntax, ByteByteGo, IBM Technology, McKinsey, Gartner, Deloitte). AVOID gaming, generic vlogs, clickbait, or unrelated topics. 3. If none are truly relevant, return -1. 4. If one is highly relevant, return its ID number. diff --git a/packages/thumbnail-generator/src/generator.ts b/packages/thumbnail-generator/src/generator.ts index add51e7..a34c0fe 100644 --- a/packages/thumbnail-generator/src/generator.ts +++ b/packages/thumbnail-generator/src/generator.ts @@ -33,7 +33,7 @@ export class ThumbnailGenerator { console.log(`🎨 Generating thumbnail for topic: "${topic}"...`); - let inputPayload: any = { + const inputPayload: any = { prompt, aspect_ratio: "16:9", output_format: "png",