// server.js
import express from "express";
import bodyParser from "body-parser";
import dotenv from "dotenv";
import fetch from "node-fetch";
dotenv.config();
const app = express();
const PORT = process.env.PORT || 3000;
const OPENAI_API_KEY = process.env.OPENAI_API_KEY;
if (!OPENAI_API_KEY) {
console.error("Fehler: OPENAI_API_KEY ist nicht gesetzt.");
process.exit(1);
}
app.use(bodyParser.json());
app.use(express.static(".")); // dient index.html aus
function buildPrompt({niche, audience, count, mode}) {
if (mode === "content") {
return `Du bist ein professioneller Social-Media-Texter.
Erstelle ${count} vollständige Social-Media-Beiträge für:
Nische: ${niche}
Zielgruppe: ${audience}
Für jeden Beitrag gib:
Titel
Hook (kurzer Aufmacher)
Haupttext (Story, Mehrwert oder Tipp)
Call to Action (Handlungsaufforderung)
3 relevante Hashtags
Sprich direkt, emotional und motivierend.`;
} else {
return `Du bist Social-Media-Content-Stratege.
Erstelle ${count} kreative Themenideen für:
Nische: ${niche}
Zielgruppe: ${audience}
Gib jede Idee als Titel + 1 Satz Kurzbeschreibung aus.`;
}
}
app.post("/api/generate", async (req, res) => {
try {
const {niche, audience, count = 5, mode = "idea"} = req.body;
if (!niche || !audience)
return res.status(400).json({error: "Nische und Zielgruppe sind erforderlich."});
const safeCount = Math.max(1, Math.min(10, parseInt(count, 10) || 5));
const prompt = buildPrompt({niche, audience, count: safeCount, mode});
const openaiResp = await fetch("https://api.openai.com/v1/chat/completions", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${OPENAI_API_KEY}`,
},
body: JSON.stringify({
model: "gpt-4o-mini",
messages: [
{role: "system", content: "Du bist ein hilfreicher KI-Assistent."},
{role: "user", content: prompt},
],
temperature: 0.75,
max_tokens: 900,
}),
});
const data = await openaiResp.json();
const text = data?.choices?.[0]?.message?.content || "Keine Antwort erhalten.";
res.json({text});
} catch (err) {
console.error(err);
res.status(500).json({error: "Fehler bei der Generierung"});
}
});
app.listen(PORT, () => console.log(`✅ Server läuft auf http://localhost:${PORT}`));
{
"name": "ki-content-generator",
"version": "1.0.0",
"type": "module",
"dependencies": {
"express": "^4.19.2",
"body-parser": "^1.20.3",
"dotenv": "^16.3.1",
"node-fetch": "^3.3.2"
}
}