npx claudepluginhub ijonis/geo-lintThis skill is limited to using the following tools:
Self-configuring content creation pipeline. Creates SEO & GEO-optimized content
Manages full blog lifecycle: strategy, writing, rewriting, audits, outlines, schema, repurposing, images, topic clusters, multilingual publishing for SEO and AI citations across platforms like Next.js, WordPress.
Analyzes brand voice from existing content, optimizes for SEO using scripts, and provides frameworks for blog posts, social media, and content calendars. Useful for marketing content.
Onboards new GTM projects via agency-style interview, generating CLAUDE.md, about/me.md, strategy/brand.md, and scaffolding content/assets folders.
Share bugs, ideas, or general feedback.
Self-configuring content creation pipeline. Creates SEO & GEO-optimized content matched to your project and brand voice, then validates with geo-lint until clean.
For project-specific rules (components, file naming, categories), the skill
generates a local content-config skill on first use via the setup workflow.
Parse $ARGUMENTS and route to the matching workflow:
| Argument | Workflow |
|---|---|
setup | Auto-discover project, questionnaire, generate content-config |
create [blog|page|project] | Full content creation pipeline |
voice | Analyze and configure brand voice |
calendar | Plan monthly content calendar |
refresh | Re-scan project, update content-config |
| (no args) | If no config exists → auto-trigger setup. Otherwise show commands. |
Before any workflow except setup:
.claude/skills/content-config/SKILL.md exists in the project root.setup workflow.Three phases: auto-discover → questionnaire → generate.
Run these steps silently, collecting results into a discovery report:
1. Framework Detection
package.json dependencies and devDependencies for: next, astro, @astrojs/*, gatsby, hugo, nuxt, vite, remix, @11ty/eleventynext.config.*, astro.config.*, nuxt.config.*, gatsby-config.*, .eleventy.js2. Content Directories
content/, src/content/, posts/, blog/, pages/, articles/, src/pages/geo-lint.config.ts exists → read its contentPaths.md, .mdx, .astro, .html)3. Frontmatter Schema
--- delimiters)4. Categories
category and categories frontmatter fields across all contentgeo-lint.config.ts categories array if present5. Authors
author values from all content frontmatter6. Locales & i18n
locale fields, file naming patterns (.de.mdx, .en.mdx), directory patterns (/de/, /en/)geo-lint.config.ts i18n config if present7. Site URL
geo-lint.config.ts siteUrl → package.json homepage → framework config site/url field8. Image Directories
public/images/, static/images/, assets/images/, src/assets/9. Components (MDX projects only)
.mdx files exist → scan for JSX component usage patterns (<ComponentName)Present the discovery summary as a formatted table. Then use AskUserQuestion to gather:
references/brand_guidelines.md: The Expert, The Friend, The Innovator, The Guide, The Motivator. Allow primary + secondary selection.Generate .claude/skills/content-config/SKILL.md in the project root using the Content-Config Template below. Fill all [placeholders] with discovered and questionnaire data.
geo-lint.config.ts — if it does not exist:
siteUrl, contentPaths, categories, and geo.brandName if known@ijonis/geo-lint as a devDependency if not presentgeo-lint.config.ts — if it exists but is missing discovered data:
Validation test — run npx geo-lint --format=json to confirm config loads correctly
Report: "Setup complete. Your content pipeline is ready. Run /content-creator create to start."
Full content creation pipeline with built-in validation.
Read .claude/skills/content-config/SKILL.md for project-specific rules: content schema, brand voice, categories, components, file naming conventions, languages.
Ask the user for:
Scan ALL existing content (titles, slugs, descriptions) before proceeding:
| Finding | Action |
|---|---|
| Exact duplicate (same topic + angle) | Stop. Suggest updating the existing post instead. |
| Substantial overlap (same topic, different angle) | Stop. Propose a clearly differentiated angle. Get user approval before proceeding. |
| Tangential overlap (related topic, distinct focus) | Proceed. Note the related post for cross-linking. |
| No overlap | Proceed. |
Report which existing posts were checked and the gate result.
Use WebSearch to research the topic. Follow the purchase-intent-first strategy:
site:domain "[keyword]")Load references/content_frameworks.md. Choose the best template for the topic:
Follow the project schema from content-config:
Run the geo-lint validation loop:
npx geo-lint --format=json --root=.
Rules that require human input (do NOT fix, report to user):
geo-low-citation-density — requires real statistics; never fabricateimage-not-found — image file must exist on diskbroken-internal-link — target page may not existcategory-invalid — must use configured categoriesSummary: files created, content type, primary keyword, violations fixed, internal links added, any items requiring human attention.
Analyze and configure brand voice settings.
~/.claude/skills/content-creator/scripts/brand_voice_analyzer.py) on 3–5 recent content files.claude/skills/content-config/SKILL.mdAskUserQuestion with archetype and tone options.claude/skills/content-config/SKILL.md with new voice preferencesIf Python is not available, analyze voice manually by reading content and assessing tone, formality, and perspective.
Plan a monthly content calendar.
assets/content_calendar_template.md as the base templateWebSearch to research trending topics in the project's domain and industrydocs/content-calendar.md)Re-scan the project and update content-config.
setup Phase 1.claude/skills/content-config/SKILL.mdgeo-lint.config.ts also needs updates (new categories, new contentPaths) → propose those changes separatelyThe setup workflow generates .claude/skills/content-config/SKILL.md in the user's project. The agent fills [placeholders] with discovered and questionnaire data:
---
name: content-config
description: [ProjectName]-specific content creation rules. Defines content schemas,
categories, brand voice, and geo-lint validation workflow. Generated by
/content-creator setup — edit freely to refine.
---
# [ProjectName] Content Config
Generated by `/content-creator setup`. Extends the global `content-creator` skill
with project-specific rules. Edit this file to refine your content pipeline.
## Brand Identity
### Brand Voice
- **Archetypes:** [Primary] (primary) + [Secondary] (secondary)
- **Tone:** [3-5 chosen attributes, comma-separated]
- **Target Audience:** [from questionnaire]
- **Content Goals:** [from questionnaire]
### Authors
| Author | Focus Areas |
|--------|------------|
| [Name] | [inferred from existing content topics, or "General"] |
## Content Schema
### Framework
[Framework name] [version]
### Content Types
| Type | Directory | URL Prefix | Extensions |
|------|-----------|------------|------------|
| [type] | [dir] | [prefix] | [.mdx, .md] |
### Required Frontmatter
[List fields present in >80% of files, with inferred types]
### Optional Frontmatter
[List fields present in <80% of files]
### Canonical Categories
[Comma-separated list, or "None configured — add to geo-lint.config.ts"]
## File Naming
[Convention discovered — e.g., "kebab-case.mdx" or "slug.de.mdx / slug.en.mdx"]
## Languages
[Locales discovered + default locale, or "Single language"]
## Components
[MDX component names found, or "N/A — no MDX components detected"]
## Content Creation Workflow
1. **Duplicate check** — scan existing content for topic overlap before writing
2. **Keyword research** — use WebSearch, purchase-intent first
3. **Write** — follow schema above, apply brand voice, use components where appropriate
4. **Validate** — run `npx geo-lint --format=json`, filter to new file
5. **Fix all violations** — errors AND warnings, max 5 passes
6. **Cross-link** — add 2-3 internal links, update 1-2 existing posts
New content MUST ship with zero geo-lint violations.
## Validation Commands
npx geo-lint --format=json # Full project lint (JSON output)
npx geo-lint --root=. # Full project lint (human-readable)
npx geo-lint --rules # Show all 92 rules with fix strategies
Load these on demand — do not read them all into context at once:
| Reference | When to load |
|---|---|
references/brand_guidelines.md | During setup (voice selection) and voice workflow |
references/content_frameworks.md | During create (template selection) |
references/social_media_optimization.md | When creating social media content |
assets/content_calendar_template.md | During calendar workflow |
scripts/brand_voice_analyzer.py | During voice workflow (optional — requires Python) |