Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NexRank

AI-powered SEO content generation, built to scale.

Write category pages, product descriptions, and SEO articles that actually rank — in minutes, not days, and in your own brand voice.

Quickstart · Why NexRank · How to use it · Design choices · FAQ


What is NexRank?

NexRank is an open-source content engine for marketers, ecommerce teams, and SEO professionals. Point it at a topic (or a whole CSV of topics), pick a style, and it delivers SEO-optimized copy ready for your CMS.

Under the hood it is LLM-agnostic — it talks to Claude, GPT, or any provider you plug in — so you are never locked in to one vendor, one price, or one model generation.

One tool. One workflow. Hundreds of on-brand pages.


Why NexRank?

Problem How NexRank solves it
Writing SEO copy by hand is slow and expensive Generate a single page in seconds or a full catalog in minutes
Generic AI output sounds robotic and off-brand Every prompt is a template you control — your tone, your rules, your keywords
You don't want to be locked into one AI vendor Swap between Claude, GPT, or any custom provider with a single flag
Bulk content means a CSV, a script, and 200 tabs One command: nexrank batch categories.csv → categories.md
You need SEO structure, not just text Templates enforce headings, keyword coverage, CTAs, length targets
Non-technical teammates can't touch a CLI Launch the built-in Streamlit UI and hand them a link

Use it for: category descriptions · product pages · blog articles · landing copy · meta descriptions · long-form SEO content · bulk rewrites.


Quickstart

Get your first SEO article generated in under two minutes.

1. Clone the repo

git clone https://github.com/mhaegeman/nexrank.git
cd nexrank

2. Install NexRank

python -m venv .venv
source .venv/bin/activate        # Windows: .venv\Scripts\activate
pip install -e ".[all]"

3. Add your API key

cp .env.example .env

Open .env and paste in one of:

NEXRANK_ANTHROPIC_API_KEY=sk-ant-...
# or
NEXRANK_OPENAI_API_KEY=sk-...

Don't have a key yet? Grab one from console.anthropic.com or platform.openai.com.

4. Generate your first article

nexrank generate \
    --topic "Trail running shoes" \
    --keywords "lightweight, grip, long distance" \
    --company "Acme Outfitters"

That's it. You now have SEO-ready copy in your terminal.


How to use it

NexRank ships three ways to use the same engine — pick whichever fits your workflow.

Option A · The CLI (fastest)

Great for power users, one-offs, and shell scripts.

# single article
nexrank generate --topic "Standing desks" --keywords "ergonomic, adjustable"

# whole catalog from a CSV
nexrank batch examples/categories.csv \
    --template seo_article.j2 \
    --format markdown \
    --output output/catalog.md

# list available providers
nexrank providers

The CSV columns map straight onto the prompt template. Columns called keywords or features are automatically split on , or |.

Example CSV (examples/categories.csv):

topic,keywords,company,tone
Running shoes,"trail|cushioning|lightweight",Acme Outfitters,energetic
Smart doorbells,"video doorbell|motion alerts",Hearthwatch,trustworthy

Option B · The Streamlit UI (easiest)

No command line, no CSV, no problem. Perfect for marketers and editors.

streamlit run nexrank/ui.py

A browser window opens with two tabs — SEO article and Product description — plus sliders for provider, temperature, and length. Fill in the form, click Generate, copy the result into your CMS.

Option C · The Python API (most flexible)

Embed NexRank directly in your own pipeline, Airflow DAG, or internal tool.

from nexrank import ContentGenerator, GenerationRequest

generator = ContentGenerator(provider="anthropic")

result = generator.generate(
    GenerationRequest(
        template="seo_article.j2",
        variables={
            "topic": "Smart home security",
            "keywords": ["video doorbell", "motion alerts", "privacy"],
            "company": "Hearthwatch",
            "tone": "trustworthy",
            "min_words": 400,
        },
    )
)

print(result.text)

What you get out of the box

nexrank/
├── prompts/                    # 👈 Edit these to match your brand voice
│   ├── seo_article.j2          #     Category pages, blog posts, long-form
│   └── product_description.j2  #     Short, punchy product copy
├── providers/                  # Claude + GPT (add your own in one file)
├── exporters/                  # Markdown and JSON output
├── cli.py                      # Typer CLI
└── ui.py                       # Streamlit UI

The prompt templates are the product. They are plain Jinja2 files — open them in any editor, tweak the tone, add your SEO checklist, save. No code change, no redeploy.


Design choices

A few decisions that shape how NexRank behaves. Knowing them will help you get the most out of it.

  • LLM-agnostic by default. Every provider lives behind the same LLMProvider interface. Switching from Claude to GPT is a single flag (--provider openai). You never rewrite prompts or pipelines.
  • Prompts are files, not strings. Templates live in nexrank/prompts/ as .j2 files. Your brand voice, SEO rules, and length targets are versioned alongside your code — not buried inside Python.
  • Config via .env, overrides via flags. Sensible defaults ship with the package; secrets and preferences live in .env (never committed); one-off tweaks happen on the command line. No surprise behavior.
  • CSV-first for bulk work. The fastest way to rewrite 500 category pages is a spreadsheet, not an API loop. nexrank batch takes any CSV and fans it out across the generator, then exports Markdown or JSON you can paste straight into a CMS.
  • Three frontends, one engine. The CLI, the Streamlit UI, and the Python API all call the same ContentGenerator. Whatever you do in one, you can do in the others — including running tests against a fake provider so you never burn API credits on CI.
  • Typed, tested, MIT-licensed. Pydantic settings, dataclass I/O, a pytest suite that runs without any API keys, and a permissive license so you can fork it for your agency.

FAQ

Does it cost money to run? The code is free and MIT-licensed. You only pay your chosen LLM provider (Anthropic or OpenAI) for the tokens you generate — typically a few cents per article.

Which provider should I pick? Claude (Anthropic) tends to produce more natural long-form prose; GPT (OpenAI) is a strong all-rounder. Try both on your own prompts — switching is one flag.

Can I add my own brand guidelines? Yes. Open nexrank/prompts/seo_article.j2, edit the instructions, save. Every future generation uses your rules.

Can I plug in another model (Gemini, Mistral, a local LLM)? Yes. Create nexrank/providers/<name>.py, subclass LLMProvider, implement complete(), and register it. About 40 lines of code.

Is my content private? NexRank itself runs locally on your machine and stores nothing. Prompts are sent directly to the provider you configured — consult their privacy terms.


License

MIT © NexRank Contributors. See LICENSE.

Ready to scale your SEO content? Clone, install, and generate your first article in two minutes. ⬆

About

AI-powered SEO content generation, built to scale.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages