npx claudepluginhub zhizdev/overgrow --plugin overgrowThis skill is limited to using the following tools:
This skill builds the **foundation document** that every other overgrow skill depends on: a complete, categorized inventory of the site's public-facing pages and the core product/value offering behind them.
Guides Next.js Cache Components and Partial Prerendering (PPR): 'use cache' directives, cacheLife(), cacheTag(), revalidateTag() for caching, invalidation, static/dynamic optimization. Auto-activates on cacheComponents: true.
Processes PDFs: extracts text/tables/images, merges/splits/rotates pages, adds watermarks, creates/fills forms, encrypts/decrypts, OCRs scans. Activates on PDF mentions or output requests.
Share bugs, ideas, or general feedback.
This skill builds the foundation document that every other overgrow skill depends on: a complete, categorized inventory of the site's public-facing pages and the core product/value offering behind them.
If the user provided a path via $ARGUMENTS, treat that as the site root. Otherwise scan from the current working directory. Also check CLAUDE.md for any project conventions. If product details cannot be inferred from the code, STOP and call the AskUserQuestion tool to clarify.
Before scanning, read from the plugin's knowledge/ directory to calibrate what "good" looks like:
knowledge/geo.md — SEO + GEO master reference. Use it to frame what signals are worth inventorying.knowledge/pages.md — H-tag structure and AI-overview formatting rules. Informs the H1 / meta capture fields below.These files ship with the plugin. If not reachable, fall back to this SKILL.md and continue.
A single file at .overgrow/inventory.md with these sections:
.tsx, .astro, .svelte, .mdx, .md, or a CMS migration note.Other overgrow skills (audit, spawn-pages, spawn-blogs, spawn-internal-links, sitemap) read this file to avoid duplicating work.
Codebases differ. Work through this detection order and stop once you have reliable coverage:
next.config.*, astro.config.*, nuxt.config.*, svelte.config.*, gatsby-config.*, _config.yml (Jekyll), hugo.toml, package.json dependencies.app/**/page.{tsx,jsx,ts,js,md,mdx}pages/**/*.{tsx,jsx,ts,js,md,mdx} excluding _*, api/**src/pages/**, src/routes/**/+page.*pages/**content/**/*.md(x), posts/**/*.md, blog/**/*.md, _posts/**public/sitemap.xml, static/sitemap.xml, sitemap.xml.ts, sitemap.config.* often list canonical URLs.title, description, date, tags, category, draft.For each page discovered, extract:
/)<title>, current meta descriptionClassify every page into exactly one primary category:
homepage — the root landing pageproduct — product overview or main product landingfeature — feature detail page (one feature per page)solution — use-case or industry pagepricing — pricing / planscomparison — vs-competitor pages, alternatives pagesresource-hub — blog index, resource center, guides indexblog-post — individual blog articlecase-study — customer storyguide — long-form tutorial or pillar guidedocs — technical documentationabout — about / team / companylegal — privacy, terms, security, complianceutility — 404, search, sitemap page, login, signup (note but exclude from SEO scope)Derive the product summary from, in order of authority:
<title> and meta description of the homepage.README.md, package.json description.If two of these conflict, prefer the homepage hero (it's the one the site is actually shipping). Flag the conflict in the inventory.
Pillars are the 3-7 topic clusters the site should rank for. Derive them by clustering existing pages and blog posts by topic, then naming the cluster. A healthy pillar has:
If the site has <3 blog posts per pillar, flag it under "Content gaps" — spawn-blogs will use this to plan query-fanout expansion.
Write (or overwrite) .overgrow/inventory.md using exactly this structure:
# Overgrow Inventory
_Generated: <YYYY-MM-DD>_
_Site root: <absolute path>_
_Framework: <detected framework + version>_
## Product
- **Name:** <product name>
- **One-liner:** <value prop in one sentence>
- **Primary audience:** <who>
- **Secondary audiences:** <who, if any>
- **Verticals / industries:** <list>
- **Key differentiators:** <3-5 bullets>
- **Source of truth:** <homepage hero | README | about page | mix — note conflicts>
## Routing
- **Framework:** <name>
- **Page roots:** <paths>
- **Content roots:** <paths for MDX/markdown if any>
- **Sitemap location:** <path or "none found">
- **i18n:** <none | locales list>
- **CMS:** <none | name — how content is fetched>
## Authoring conventions
Read 2-3 representative existing pages (one landing page and one blog post if both exist) and record:
- **Landing / product pages**
- **File extension:** <.tsx | .jsx | .astro | .svelte | .vue | .mdx | .md>
- **Layout wrapper:** <import path, or "none" — e.g. `import Layout from '@/components/Layout'` | `<Layout>` in Astro | `+layout.svelte` | root layout in Next.js App Router>
- **Metadata pattern:** <Next.js `export const metadata` | Next.js `<Head>` | SvelteKit `<svelte:head>` | Astro frontmatter + `<SEO>` | markdown frontmatter | CMS field>
- **Styling:** <Tailwind | CSS modules | styled-components | vanilla CSS | UnoCSS | etc.>
- **Reusable section components found:** <e.g. `<Hero />`, `<FeatureGrid />`, `<CTA />`, `<FAQ />` — with source paths, or "none">
- **Example page to mirror:** <source path of a good representative page>
- **Blog posts**
- **File extension:** <.md | .mdx | .tsx | CMS>
- **Frontmatter shape:** <exact keys and order from an existing post, e.g. `title, description, date, author, tags, draft`>
- **Content source:** <filesystem | Contentful | Sanity | Payload | WordPress | Strapi | etc.>
- **Example post to mirror:** <source path>
- **Placeholder idiom to use in new files:** <`{/* placeholder: ... */}` for JSX | `<!-- placeholder: ... -->` for markdown/Astro/Svelte template regions>
If the site has no existing blog posts or no existing landing pages, mark that sub-block as "none yet — spawn skills should match the other authoring branch."
## Page inventory
### Homepage
| Route | Source | H1 | Title | Meta description | Purpose |
|---|---|---|---|---|---|
### Product / Features
### Solutions
### Pricing
### Comparison
### Resource hub
### Blog posts
### Case studies
### Guides
### Docs
### About
### Legal
### Utility (excluded from SEO scope)
(Include only the categories that have at least one page. Within each table, one row per page. Use `—` for missing data.)
## Semantic pillars
1. **<Pillar name>** — <one-line scope>. Hub: <route or "missing">. Supporting: <count> pages/posts.
2. ...
## Content gaps
- <Missing page type or thin pillar — one bullet each>
## Notes
<Anything surprising: duplicate routes, pages with no meta description, mismatched H1s, stale dates, broken internal links noticed during scan, CMS-driven content not fully enumerated, etc.>
.overgrow/inventory.md if it exists — ask the user whether to refresh or append before overwriting._* helper files.Authoring conventions section. Create the .overgrow/ directory if missing.spawn-pages / spawn-blogs / humanize).audit).spawn-internal-links).