133 lines
5.4 KiB
TypeScript
133 lines
5.4 KiB
TypeScript
import { ContentGenerator, ComponentDefinition } from "../src/index";
|
||
import dotenv from "dotenv";
|
||
import path from "path";
|
||
import fs from "fs";
|
||
import { fileURLToPath } from "url";
|
||
|
||
// Fix __dirname for ESM
|
||
const __filename = fileURLToPath(import.meta.url);
|
||
const __dirname = path.dirname(__filename);
|
||
|
||
// Load .env from mintel.me
|
||
dotenv.config({
|
||
path: path.resolve(__dirname, "../../../../mintel.me/apps/web/.env"),
|
||
});
|
||
|
||
async function main() {
|
||
const apiKey = process.env.OPENROUTER_API_KEY || process.env.OPENROUTER_KEY;
|
||
if (!apiKey) {
|
||
console.error("❌ OPENROUTER_API_KEY not found");
|
||
process.exit(1);
|
||
}
|
||
|
||
const generator = new ContentGenerator(apiKey);
|
||
|
||
const contentToOptimize = `
|
||
"Wir können nicht wechseln, das wäre zu teuer."
|
||
In meiner Arbeit als Digital Architect ist das der Anfang vom Ende jeder technologischen Innovation.
|
||
Vendor Lock-In ist die digitale Version einer Geiselnahme.
|
||
Ich zeige Ihnen, wie wir Systeme bauen, die Ihnen jederzeit die volle Freiheit lassen – technologisch und wirtschaftlich.
|
||
|
||
Die unsichtbaren Ketten proprietärer Systeme
|
||
Viele Unternehmen lassen sich von der Bequemlichkeit großer SaaS-Plattformen oder Baukästen blenden.
|
||
Man bekommt ein schnelles Feature, gibt aber dafür die Kontrolle über seine Daten und seine Codebasis ab.
|
||
Nach zwei Jahren sind Sie so tief im Ökosystem eines Anbieters verstrickt, dass ein Auszug unmöglich scheint.
|
||
Der Anbieter weiß das – und diktiert fortan die Preise und das Tempo Ihrer Entwicklung.
|
||
Ich nenne das technologische Erpressbarkeit.
|
||
Wahre Unabhängigkeit beginnt bei der strategischen Wahl der Architektur.
|
||
|
||
Technologische Souveränität als Asset
|
||
Software sollte für Sie arbeiten, nicht umgekehrt.
|
||
Indem wir auf offene Standards und portable Architekturen setzen, verwandeln wir Code in ein echtes Firmen-Asset.
|
||
Sie können den Cloud-Anbieter wechseln, die Agentur tauschen oder das Team skalieren – ohne jemals bei Null anfangen zu müssen.
|
||
Das ist das Privileg der technologischen Elite.
|
||
Portabilität ist kein technisches Gimmick, sondern eine unternehmerische Notwendigkeit.
|
||
|
||
Meine Architektur der Ungebundenheit
|
||
Ich baue keine "Käfige" aus fertigen Plugins.
|
||
Mein Framework basiert auf Modularität und Klarheit.
|
||
|
||
Standard-basiertes Engineering: Wir nutzen Technologien, die weltweit verstanden werden. Keine geheimen "Spezial-Module" eines einzelnen Anbieters.
|
||
Daten-Portabilität: Ihre Daten gehören Ihnen. Zu jeder Zeit. Wir bauen Schnittstellen, die den Export so einfach machen wie den Import.
|
||
Cloud-agnostisches Hosting: Wir nutzen Container-Technologie. Ob AWS, Azure oder lokale Anbieter – Ihr Code läuft überall gleich perfekt.
|
||
|
||
Der strategische Hebel für langfristige Rendite
|
||
Systeme ohne Lock-In altern besser.
|
||
Sie lassen sich schrittweise modernisieren, statt alle fünf Jahre komplett neu gebaut werden zu müssen.
|
||
Das spart Millionen an Opportunitätskosten und Fehl-Investitionen.
|
||
Seien Sie der Herr über Ihr digitales Schicksal.
|
||
Investieren Sie in intelligente Unabhängigkeit.
|
||
|
||
Für wen ich 'Freiheits-Systeme' erstelle
|
||
Ich arbeite für Gründer, die ihr Unternehmen langfristig wertvoll aufstellen wollen.
|
||
Ist digitale Exzellenz Teil Ihrer Exit-Strategie oder Ihres Erbes? Dann brauchen Sie meine Architektur.
|
||
Ich baue keine Provisorien, sondern nachhaltige Werte.
|
||
|
||
Fazit: Freiheit ist eine Wahl
|
||
Technologie sollte Ihnen Flügel verleihen, keine Fesseln anlegen.
|
||
Lassen Sie uns gemeinsam ein System schaffen, das so flexibel ist wie Ihr Business.
|
||
Werden Sie unersetzbar durch Qualität, nicht durch Abhängigkeit. Ihr Erfolg verdient absolute Freiheit.
|
||
`;
|
||
|
||
// Define components available in mintel.me
|
||
const availableComponents: ComponentDefinition[] = [
|
||
{
|
||
name: "LeadParagraph",
|
||
description: "Large, introductory text for the beginning of the article.",
|
||
usageExample: "<LeadParagraph>First meaningful sentence.</LeadParagraph>",
|
||
},
|
||
{
|
||
name: "H2",
|
||
description: "Section heading.",
|
||
usageExample: "<H2>Section Title</H2>",
|
||
},
|
||
{
|
||
name: "H3",
|
||
description: "Subsection heading.",
|
||
usageExample: "<H3>Subtitle</H3>",
|
||
},
|
||
{
|
||
name: "Paragraph",
|
||
description: "Standard body text paragraph.",
|
||
usageExample: "<Paragraph>Some text...</Paragraph>",
|
||
},
|
||
{
|
||
name: "ArticleBlockquote",
|
||
description: "A prominent quote block for key insights.",
|
||
usageExample: "<ArticleBlockquote>Important quote</ArticleBlockquote>",
|
||
},
|
||
{
|
||
name: "Marker",
|
||
description: "Yellow highlighter effect for very important phrases.",
|
||
usageExample: "<Marker>Highlighted Text</Marker>",
|
||
},
|
||
{
|
||
name: "ComparisonRow",
|
||
description: "A component comparing a negative vs positive scenario.",
|
||
usageExample:
|
||
'<ComparisonRow description="Cost Comparison" negativeLabel="Lock-In" negativeText="High costs" positiveLabel="Open" positiveText="Control" />',
|
||
},
|
||
];
|
||
|
||
console.log('🚀 Optimizing "Vendor Lock-In" post...');
|
||
|
||
try {
|
||
const post = await generator.optimizePost(contentToOptimize, {
|
||
enhanceFacts: true,
|
||
addDiagrams: true,
|
||
addMemes: true,
|
||
availableComponents,
|
||
});
|
||
|
||
console.log("\n\n✅ OPTIMIZATION COMPLETE");
|
||
// Save to a file in the package dir
|
||
const outputPath = path.join(__dirname, "VendorLockIn_OPTIMIZED.md");
|
||
fs.writeFileSync(outputPath, post.content);
|
||
console.log(`📄 Saved output to: ${outputPath}`);
|
||
} catch (error) {
|
||
console.error("❌ Optimization failed:", error);
|
||
}
|
||
}
|
||
|
||
main();
|