Skip to content

emilpinski/content-agent

Repository files navigation

Content Agent UI

AI-powered content generation pipeline built with LangGraph. Generates SEO-optimized Polish articles using a 4-agent workflow.

Live: content-agent-ui.vercel.app


How it works

Enter a topic and SEO phrase — the pipeline runs 4 agents in sequence:

  1. Researcher — searches the web (Tavily or Brave Search) and extracts key facts
  2. Writer — writes a full Polish article (1000–1500+ words) based on research
  3. SEO Checker — analyzes the article and generates meta title, meta description, keyword density report
  4. Image Prompt — generates a detailed image prompt for a thumbnail/social graphic

Progress is streamed in real time via SSE.


Cost and performance

Measured on a typical 1,200-word Polish SEO article:

Agent Model Input tokens Output tokens Cost (USD)
Researcher claude-haiku-4-5 ~2,100 ~800 ~$0.001
Writer claude-sonnet-4-6 ~3,400 ~1,800 ~$0.027
SEO Checker claude-haiku-4-5 ~2,200 ~400 ~$0.001
Image Prompt claude-haiku-4-5 ~1,800 ~200 ~$0.001
Total ~9,500 ~3,200 ~$0.030

Wall clock time: ~75-90s (sequential). Cache warm: ~45s. Prices based on OpenRouter rates, May 2026.


Pipeline architecture

graph TD
    A[User input: topic + SEO phrase] --> B[Researcher<br/>claude-haiku-4-5<br/>Tavily/Brave search]
    B --> C{HITL checkpoint<br/>review research}
    C --> D[Writer<br/>claude-sonnet-4-6<br/>1000-1500 word article]
    D --> E{HITL checkpoint<br/>review draft}
    E --> F[SEO Checker<br/>claude-haiku-4-5<br/>meta title, description, density]
    E --> G[Image Prompt<br/>claude-haiku-4-5<br/>thumbnail prompt]
    F --> H[Final article]
    G --> H
Loading

Note: HITL checkpoints are available via the stateful API; the default UI runs fully automated.


Setup

1. API Keys

You need at least one LLM provider and one search provider:

Key Where to get Required
OpenRouter API Key openrouter.ai Recommended
Anthropic API Key console.anthropic.com Alternative
Tavily API Key tavily.com — 1000 req/mo free Recommended
Brave Search API Key brave.com/search/api — 2000 req/mo free Alternative

2. Enter keys in the app

Go to ⚙ Settings → paste your keys → Save. Keys are stored in your browser (localStorage) and sent to the server only during generation. The server does not store them.

3. Generate

Enter topic + SEO phrase → click Generate → wait ~60–90s for the full pipeline to complete.


Models used (via OpenRouter)

Agent Model
Researcher claude-haiku-4.5
Writer claude-sonnet-4.6
SEO Checker claude-haiku-4.5
Image Prompt claude-haiku-4.5

Tech stack

  • Next.js 15 (App Router, Node.js runtime)
  • LangGraph — agent orchestration
  • LangChain OpenAI — OpenRouter-compatible LLM client
  • Tavily / Brave Search — web research
  • Supabase (optional) — article history storage
  • Vercel — hosting (max 300s function timeout)

Self-hosting

git clone https://github.com/emilpinski/content-agent
cd content-agent-ui
npm install
cp .env.example .env.local
# Fill in keys in .env.local (optional — users can provide their own via UI)
npm run dev

Environment variables (all optional — users can provide via UI)

ANTHROPIC_API_KEY=sk-ant-...
OPENROUTER_API_KEY=sk-or-v1-...
TAVILY_API_KEY=tvly-...
BRAVE_SEARCH_KEY=BSA...
NEXT_PUBLIC_SUPABASE_URL=https://...
SUPABASE_SERVICE_ROLE_KEY=eyJ...

Rate limiting

5 requests per minute per IP (in-memory, resets on cold start).


Security

  • API keys validated by format before use (sk-ant-*, sk-or-v1-*)
  • Input length limited (topic: 300 chars, SEO phrase: 150 chars)
  • CSP headers configured
  • No key logging on server side

FAQ

Why not just one big Sonnet prompt? A single prompt cannot search the web, write a full article, audit SEO, and generate an image prompt simultaneously. The multi-agent DAG lets each model specialize: Haiku handles fast, cheap research and metadata; Sonnet does the heavy writing. The result is better quality at lower cost than one monolithic Sonnet call, and each stage is independently testable and replaceable.

Why LangGraph instead of a simple loop? LangGraph gives you a stateful graph with typed edges, conditional routing, and interrupt support for human-in-the-loop steps. A simple loop cannot pause mid-pipeline for user approval, resume from a checkpoint, or branch conditionally (e.g., skip image prompt if the article already has one).

How much does it cost? Roughly $0.03 per article using OpenRouter pricing (May 2026). See the cost table above.

About

Multi-agent AI content pipeline: Researcher, Writer, SEO Checker, Image Prompt. Built with LangGraph, LangChain and Next.js.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors