feat(ai): forcefully randomize meme templates and expand B2B YouTube channels
All checks were successful
Monorepo Pipeline / ⚡ Prioritize Release (push) Successful in 2s
Monorepo Pipeline / 🧪 Test (push) Successful in 1m3s
Monorepo Pipeline / 🧹 Lint (push) Successful in 2m38s
Monorepo Pipeline / 🏗️ Build (push) Successful in 6m23s
Monorepo Pipeline / 🚀 Release (push) Has been skipped
Monorepo Pipeline / 🐳 Build Directus (Base) (push) Has been skipped
Monorepo Pipeline / 🐳 Build Gatekeeper (Product) (push) Has been skipped
Monorepo Pipeline / 🐳 Build Build-Base (push) Has been skipped
Monorepo Pipeline / 🐳 Build Production Runtime (push) Has been skipped

This commit is contained in:
2026-02-22 17:55:09 +01:00
parent 02bffbc67f
commit 99f040cfb0
3 changed files with 32 additions and 5 deletions

View File

@@ -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 \`<ComparisonRow>\` oder \`<IconList>\`), 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: <LeadMagnet title="Performance-Check anfragen" description="Wir analysieren Ihre Core Web Vitals und decken Umsatzpotenziale auf." buttonText="Jetzt analysieren lassen" href="/contact" variant="performance" />. 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.

View File

@@ -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.

View File

@@ -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",