diff --git a/packages/api/src/routes/blog.ts b/packages/api/src/routes/blog.ts index a545404..fd7f83d 100644 --- a/packages/api/src/routes/blog.ts +++ b/packages/api/src/routes/blog.ts @@ -1550,7 +1550,8 @@ async function runLlmPipeline( // POST /api/blog/generate — Generate a new blog draft (returns immediately, LLM runs async) blogRouter.post("/generate", async (req: Request, res: Response) => { - const { topic, speed, form_factor, use_case, use_llm } = req.body as { + const { title: reqTitle, topic, speed, form_factor, use_case, use_llm } = req.body as { + title?: string; topic?: string; speed?: string; form_factor?: string; @@ -1573,11 +1574,14 @@ blogRouter.post("/generate", async (req: Request, res: Response) => { const year = new Date().getFullYear(); const template = templates[Math.floor(Math.random() * templates.length)]; - const title = template.title - .replace("{YEAR}", String(year)) - .replace("{SPEED}", speed || "400G/800G") - .replace("{FORM_FACTOR}", form_factor || "QSFP-DD/OSFP") - .replace("{USE_CASE}", use_case || "Data Center Interconnect"); + // Use caller-provided title if given; fall back to template title + const title = (reqTitle && reqTitle.trim()) + ? reqTitle.trim() + : template.title + .replace("{YEAR}", String(year)) + .replace("{SPEED}", speed || "400G/800G") + .replace("{FORM_FACTOR}", form_factor || "QSFP-DD/OSFP") + .replace("{USE_CASE}", use_case || "Data Center Interconnect"); const keywords = [ ...template.seo_keywords,