Skip to content
Maintained
AI/ML
Tools
Nov 2023

Blog-AI

Generates blog posts and books in a trained brand voice: research, outline, per-section drafting, voice scoring, fact-checking and SEO, behind a Next.js front end and a FastAPI service.

Research → SEO
Stages
3, swappable
Providers
Posts + books
Outputs
Next.js
Front end
Blog-AI project visual

The constraint

Generated content is cheap; generated content that sounds like the brand, makes claims it can support, and is structured for search is not. A single prompt produces the first kind.

The approach

Split generation into stages a person can inspect: research, outline, per-section drafting, a brand-voice score, a fact-check pass and SEO. Models sit behind one generate_text() interface, so OpenAI, Anthropic and Gemini are interchangeable per stage.

Architecture
Staged generation: each step can be inspected and rerun on its own.
High level
BriefTopic + keywordsPipelineResearch, outline, voiceGeneratorOpenAI / Anthropic / GeminiMDXBlogDOCXBookoutlinestepsexportexport
Process
  1. 1
    Stage the pipeline

    Broke generation into research, outline, drafting, voice, fact-check and SEO so each step can be inspected and rerun alone.

  2. 2
    One model seam

    Put every provider behind generate_text() so swapping models is configuration rather than a rewrite.

  3. 3
    Score the voice

    Added a brand-voice score so 'sounds like us' is a number a draft has to clear.

  4. 4
    Check the claims

    Added a fact-check stage for claims that need a source.

Outcomes

  • Staged pipeline from research to SEO rather than one long prompt
  • Brand-voice scoring against a trained voice profile
  • Fact-check stage for claims that need support
  • Web app, API and a browser extension over the same pipeline
Details

Built a staged long-form generation pipeline (research, outline, per-section drafting, brand-voice scoring, fact-check, SEO) behind a FastAPI service and Next.js front end.

Abstracted OpenAI, Anthropic and Gemini behind a single generation interface, with a browser extension over the same API.