Not in the top 1,000 by GitHub stars
BuildShipGrowRepeat/nextjs-sanity-blog-skill
Opinionated Claude Code skill for adding an SEO-first, translate-ready blog to a Next.js + Sanity site. 40-question intake, one-page plan, batteries-included spec, AI hero images via Nano Banana Pro.
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
skills/building-blog/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 1f5e1db47a60
No earlier version was observed for comparison.
Verified commit 1f5e1db47a6059d647ee6a6f5e82eae2fe34612c
git clone --filter=blob:none --no-checkout https://github.com/BuildShipGrowRepeat/nextjs-sanity-blog-skill.git .hotskills/buildshipgrowrepeat-nextjs-sanity-blog-skill && git -C .hotskills/buildshipgrowrepeat-nextjs-sanity-blog-skill checkout --detach 1f5e1db47a6059d647ee6a6f5e82eae2fe34612c
# Copy each selected skill directory from .hotskills/buildshipgrowrepeat-nextjs-sanity-blog-skill into .claude/skills/<skill-name>/Heat
0.3- Star growth, last 7 daysNot available
- Star growth, last 24 hoursNot available
- Rank movement, last 7 daysNot available
- Commits, last 30 daysNot available
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekNot available
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
- building-blog
skills/building-blog
How it works
building-blog
When your agent uses it
Use when adding a blog to a Next.js + Sanity site, building a blog section from scratch, integrating Sanity CMS for editorial content, or setting up an SEO-optimized article surface. Triggers on phrases like "add a blog", "build the blog", "create blog section", "set up blog with Sanity", "integrate Sanity CMS", "blog architecture", or any new-blog scoping conversation on a Next.js project.
What it loads into context
Frontmatter
98 tokensAlways available to the agent
SKILL.md
1,389 tokensWhen the skill is activated
Reference documents
18,945 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Overview
- Files
- Workflow
- When NOT to use this skill
- Recommended companion skills
Files
../../.claude-plugin/marketplace.jsonasset846 bytes../../.claude-plugin/plugin.jsonasset1,074 bytesSKILL.mdcore5,906 bytesblog-image-style-guide.mddoc12,712 bytesblog-technical-requirements.mddoc62,439 bytes
Read SKILL.md
# Building a Blog (Next.js + Sanity)
## Overview
Universal workflow for adding a blog to a Next.js site backed by Sanity CMS. Targets a corporate blog: SEO-first, i18n-ready, performance-budgeted, accessibility-compliant.
**SKILL.md is the orchestrator. The spec lives in the two reference files.**
## Files
- `blog-technical-requirements.md` — §0 intake questionnaire (30+ questions) → §1 Project Profile → §2–§20 universal spec → checklist. Edit only §0 answers and §1 per project.
- `blog-image-style-guide.md` — universal template for AI-generated hero imagery via Gemini 3 Pro Image (Nano Banana Pro). Intake questions on top, aesthetic skeleton in the middle, three example slots at the bottom.
## WorkflowView the complete source on GitHubSkills included
- building-blog
Repository facts
- License
- MIT
- Created
- May 21, 2026
- Last pushed
- May 21, 2026
- Forks
- 1
- Open issues
- 0
- Project activity
- Slowing
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 6, 2026
- No broad tool permissions
- No dangerous shell commands
- 34 network referencesin 4 files: building-blog/blog-technical-requirements.md:9 .claude-plugin/plugin.json:6 .claude-plugin/marketplace.json:4 and 1 more
- No hidden or obfuscated text
- No instruction overrides
- No executable scripts
- 7 references to secretsin 1 file: building-blog/blog-technical-requirements.md:886
- No requests to vote in Hot
Show all 41 signals by file
.claude-plugin/marketplace.json
- Network accessline 4
"name": "Vladimir Terekhov", "email": "vv@attractgroup.com", "url": "https://github.com/BuildShipGrowRepeat" - Network accessline 5
"email": "vv@attractgroup.com", "url": "https://github.com/BuildShipGrowRepeat" }, - Network accessline 6
"url": "https://github.com/BuildShipGrowRepeat" - Network accessline 12
"description": "Opinionated, batteries-included spec for adding an SEO-first, i18n-ready blog to a Next.js + Sanity site. 40-question intake, one-page plan, 20-section spec, pass/fail checklist. Includes AI hero images via Gemini 3 Pro Imag - Network accessline 13
"version": "0.1.0", "homepage": "https://github.com/BuildShipGrowRepeat/nextjs-sanity-blog-skill", "license": "MIT", - Network accessline 14
"homepage": "https://github.com/BuildShipGrowRepeat/nextjs-sanity-blog-skill",
.claude-plugin/plugin.json
- Network accessline 6
"name": "Vladimir Terekhov", "email": "vv@attractgroup.com", "url": "https://github.com/BuildShipGrowRepeat" - Network accessline 7
"email": "vv@attractgroup.com", "url": "https://github.com/BuildShipGrowRepeat" }, - Network accessline 8
"url": "https://github.com/BuildShipGrowRepeat" - Network accessline 9
}, "license": "MIT", "homepage": "https://github.com/BuildShipGrowRepeat/nextjs-sanity-blog-skill", - Network accessline 10
"license": "MIT", "homepage": "https://github.com/BuildShipGrowRepeat/nextjs-sanity-blog-skill", "repository": { - Network accessline 11
"homepage": "https://github.com/BuildShipGrowRepeat/nextjs-sanity-blog-skill", - Network accessline 12
"repository": { "type": "git", "url": "https://github.com/BuildShipGrowRepeat/nextjs-sanity-blog-skill.git" - Network accessline 13
"type": "git", "url": "https://github.com/BuildShipGrowRepeat/nextjs-sanity-blog-skill.git" }, - Network accessline 14
"url": "https://github.com/BuildShipGrowRepeat/nextjs-sanity-blog-skill.git"
skills/building-blog/SKILL.md
- Network accessline 43
Use [`context7`](https://context7.com) if it is available in the environment (it is the fastest way to read current library docs); otherwise fall back to the library's official docs site via `WebFetch`. Cross-check against the spec when you - Network accessline 55
- **Hero image generator** — Gemini 3 Pro Image (Nano Banana Pro) — current model name, image generation endpoint, supported sizes/aspect ratios, JSON schema for `responseModalities` - **JSON-LD** — Google's [Article structured data](https: - Network accessline 56
- **JSON-LD** — Google's [Article structured data](https://developers.google.com/search/docs/appearance/structured-data/article) page for current required fields
skills/building-blog/blog-technical-requirements.md
- Network accessline 9
- §3, §6 — Sanity schema syntax, `defineType`/`defineField`/`defineQuery`, `next-sanity` client options, draft mode + `stega` rules - §7 — `generateMetadata`, dynamic `params` shape in current Next.js major (sync vs `Promise`), `alternates. - Network accessline 10
- §7 — `generateMetadata`, dynamic `params` shape in current Next.js major (sync vs `Promise`), `alternates.languages` format - §7, §9 — Google's [Article structured data](https://developers.google.com/search/docs/appearance/structured-data - Network accessline 11
- §7, §9 — Google's [Article structured data](https://developers.google.com/search/docs/appearance/structured-data/article) and [FAQPage](https://developers.google.com/search/docs/appearance/structured-data/faqpage) required fields - Network accessline 359
{ "@context": "https://schema.org", - Network accessline 360
"@context": "https://schema.org", - Network accessline 402
<link rel="alternate" hreflang="en" href="https://example.com/en/blog" /> - Network accessline 403
<link rel="alternate" hreflang="fr" href="https://example.com/fr/blog" /> - Network accessline 404
<link rel="alternate" hreflang="de" href="https://example.com/de/blog" /> - Network accessline 405
<link rel="alternate" hreflang="x-default" href="https://example.com/en/blog" /> - Network accessline 884
- **Alternatives on the same API key:** `gemini-2.5-flash-image` (~$0.04, faster, lower adherence), `gemini-3.1-flash-image-preview` (newer flash), `imagen-4.0-ultra-generate-001` (~$0.08, best pure photoreal but weaker instruction followin - Network accessline 885
- **Aspect ratio:** 16:9 landscape. Passed via `generationConfig.imageConfig.aspectRatio` in the API body. - **Auth:** single env var `GEMINI_API_KEY` from [aistudio.google.com/apikey](https://aistudio.google.com/apikey). Must be in `.env.l - Network accessline 886
[Credential-related source omitted] - Access to secretsline 886
[Credential-related source omitted] - Network accessline 887
[Credential-related source omitted] - Access to secretsline 887
[Credential-related source omitted] - Access to secretsline 912
[Credential-related source omitted] - Access to secretsline 953
[Credential-related source omitted] - Access to secretsline 954
[Credential-related source omitted] - Access to secretsline 958
[Credential-related source omitted] - Network accessline 970
async function generateImage(prompt: string): Promise<{ buffer: Buffer; mime: string }> { const url = `https://generativelanguage.googleapis.com/v1beta/models/${GEMINI_MODEL}:generateContent?key=${geminiKey}`; - Network accessline 971
const url = `https://generativelanguage.googleapis.com/v1beta/models/${GEMINI_MODEL}:generateContent?key=${geminiKey}`; - Network accessline 977
const response = await fetch(url, { - Access to secretsline 1119
[Credential-related source omitted]
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Signal confidence: 26 facts
- Network access in prose of the SKILL.mdbuilding-blog/SKILL.md:43Low confidence
- Network access in prose of the SKILL.mdbuilding-blog/SKILL.md:55Low confidence
- Network access in prose of the SKILL.mdbuilding-blog/SKILL.md:56Low confidence
- Network access in prose of documentationbuilding-blog/blog-technical-requirements.md:9Low confidence
- Network access in prose of documentationbuilding-blog/blog-technical-requirements.md:10Low confidence
- Network access in prose of documentationbuilding-blog/blog-technical-requirements.md:11Low confidence
- Network access in code of documentationbuilding-blog/blog-technical-requirements.md:359Low confidence
- Network access in code of documentationbuilding-blog/blog-technical-requirements.md:360Low confidence
- Network access in code of documentationbuilding-blog/blog-technical-requirements.md:402Low confidence
- Network access in code of documentationbuilding-blog/blog-technical-requirements.md:403Low confidence
- Network access in code of documentationbuilding-blog/blog-technical-requirements.md:404Low confidence
- Network access in code of documentationbuilding-blog/blog-technical-requirements.md:405Low confidence
- Network access in prose of documentationbuilding-blog/blog-technical-requirements.md:884Low confidence
- Network access in prose of documentationbuilding-blog/blog-technical-requirements.md:885Low confidence
- Network access in prose of documentationbuilding-blog/blog-technical-requirements.md:886Low confidence
- Access to secrets in prose of documentationbuilding-blog/blog-technical-requirements.md:886Low confidence
- Network access in prose of documentationbuilding-blog/blog-technical-requirements.md:887Low confidence
- Access to secrets in prose of documentation: a variable, placeholder or call, not a stored valuebuilding-blog/blog-technical-requirements.md:887Low confidence
- Access to secrets in code of documentationbuilding-blog/blog-technical-requirements.md:912Low confidence
- Access to secrets in code of documentation: a variable, placeholder or call, not a stored valuebuilding-blog/blog-technical-requirements.md:953Low confidence
- Access to secrets in code of documentation: a variable, placeholder or call, not a stored valuebuilding-blog/blog-technical-requirements.md:954Low confidence
- Access to secrets in code of documentation: a variable, placeholder or call, not a stored valuebuilding-blog/blog-technical-requirements.md:958Low confidence
- Network access in code of documentationbuilding-blog/blog-technical-requirements.md:970Low confidence
- Network access in code of documentationbuilding-blog/blog-technical-requirements.md:971Low confidence
- Network access in code of documentationbuilding-blog/blog-technical-requirements.md:977Low confidence
- Access to secrets in prose of documentationbuilding-blog/blog-technical-requirements.md:1119Low confidence
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Manifest .claude-plugin/marketplace.json | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md skills/building-blog/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md skills/building-blog/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md skills/building-blog/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md skills/building-blog/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md skills/building-blog/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.