Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 17 additions & 1 deletion .claude/skills/spawn-blogs/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,22 @@ Then update `.overgrow/content-plan.md` (create if missing) with an entry per sp

Leaving posts gated (via the project's existing draft mechanism or a TODO comment) is intentional — the user should run `audit` and `humanize` before publishing.

## Surface the new post in existing index/list locations

A new post that nothing else links to is invisible. After writing the file, find every place on the site that already lists blog posts and add the new entry there too when appropriate. Match the existing entry pattern exactly — copy the markup of an adjacent entry, swap the route, title, date, excerpt, any fields
to make the new page fit in cohesively.

Check, in order:

- **Footer link lists.** Open the footer component (`Footer.tsx`, `footer.astro`, the layout's footer partial, etc.). If it manually lists popular or recent blog posts, add the new post in the same list (and remove the oldest if the list is fixed-length).
- **Blog index / hub page.** `/blog`, `/posts`, `/articles`, `/resources/blog` etc. If the index lists posts manually (hard-coded array, JSX list, MDX with explicit links rather than a content-collection query), add the new post.
- **Pillar / category index pages.** If the blog is segmented (`/blog/category/<pillar>`, `/blog/topics/<topic>`) and those pages list posts manually, add the new post to the matching category.
- **Sibling "related posts" sections.** If existing posts in the same pillar manually link to each other in a "Related" or "More on this" block, add the new post there. Skip if related posts are auto-generated from tags/frontmatter.

Skip when the listing is auto-generated from a content collection or filesystem glob (typical for Astro content collections, Next.js MDX route groups, Nuxt Content) — the new file is picked up automatically. Only edit when the listing is manual.

This is **not** general semantic interlinking across the site — that's `spawn-internal-links`. This is just surfacing the new post where posts are already surfaced.

## Writing guidelines

- Write for a real reader first, then optimize for keyword/entity coverage.
Expand All @@ -126,7 +142,7 @@ Leaving posts gated (via the project's existing draft mechanism or a TODO commen
## What this skill does NOT do

- Does not generate landing or product pages (that's `spawn-pages`).
- Does not add internal links across existing pages (that's `spawn-internal-links`). It only adds outbound links from the new posts it drafts.
- Does not add general semantic internal links across the site (that's `spawn-internal-links`). It does surface the new post in manually maintained index pages, footers, and category lists where posts of the same type are already listed — that's the bare minimum for a new post to be discoverable.
- Does not publish. Posts ship gated behind the project's existing draft mechanism (or a TODO comment if none exists) and land in the repo for review.
- Does not invent facts, customers, or stats.
- Does not invent frontmatter keys. If an existing post is available, its shape is the source of truth — copy it exactly.
15 changes: 15 additions & 0 deletions .claude/skills/spawn-pages/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,21 @@ Do not write a file. Instead append a **migration note** to `.overgrow/content-p

Then update `.overgrow/content-plan.md` with an entry for each spawned page under a `## Pages` section, noting the output file path and format (component / markdown / CMS migration).

## Surface the new page in existing index/list locations

A new page that nothing else links to is invisible. After writing the file, find every place on the site that already lists pages of the same type and add the new entry there too. Match the existing entry pattern exactly — copy the markup of an adjacent entry, swap the route, title, description, any fields to make the new page fit in cohesively.

Check, in order:

- **Footer link lists.** Open the footer component (`Footer.tsx`, `footer.astro`, `_layout`'s footer partial, etc.). If it manually lists pages of the same type as the one you spawned (alternatives, integrations, solutions, comparison pages, popular blog posts), add a link to the new page in the same list.
- **Index / hub pages.** `/alternatives`, `/integrations`, `/solutions`, `/resources`, `/compare`, `/customers`, etc. If a hub page exists for the type you spawned and lists entries manually (a hard-coded array, a JSX list, MDX with manual links), add the new page there.
- **Sibling cross-links.** If existing alternatives or comparison pages cross-link to each other (e.g. a "More comparisons" section), add the new page to those lists.
- **Sitemap and route manifests.** If the project maintains a manual `sitemap.xml` or a route array (e.g. for static export or for nav generation), add the new route.

Skip when the listing is auto-generated from a content collection or filesystem glob — the new file is picked up automatically. Only edit when the listing is manual.

This is **not** general semantic interlinking — that's `spawn-internal-links`. This is just surfacing the new page where pages of the same type are already surfaced.

## Intent-to-page mapping cheat sheet

- Comparison intent (`X vs Y`) → `/compare/<competitor>` or `/alternatives/<competitor>` page.
Expand Down
18 changes: 17 additions & 1 deletion .codex/skills/spawn-blogs/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,22 @@ Then update `.overgrow/content-plan.md` (create if missing) with an entry per sp

Leaving posts gated (via the project's existing draft mechanism or a TODO comment) is intentional — the user should run `audit` and `humanize` before publishing.

## Surface the new post in existing index/list locations

A new post that nothing else links to is invisible. After writing the file, find every place on the site that already lists blog posts and add the new entry there too when appropriate. Match the existing entry pattern exactly — copy the markup of an adjacent entry, swap the route, title, date, excerpt, any fields
to make the new page fit in cohesively.

Check, in order:

- **Footer link lists.** Open the footer component (`Footer.tsx`, `footer.astro`, the layout's footer partial, etc.). If it manually lists popular or recent blog posts, add the new post in the same list (and remove the oldest if the list is fixed-length).
- **Blog index / hub page.** `/blog`, `/posts`, `/articles`, `/resources/blog` etc. If the index lists posts manually (hard-coded array, JSX list, MDX with explicit links rather than a content-collection query), add the new post.
- **Pillar / category index pages.** If the blog is segmented (`/blog/category/<pillar>`, `/blog/topics/<topic>`) and those pages list posts manually, add the new post to the matching category.
- **Sibling "related posts" sections.** If existing posts in the same pillar manually link to each other in a "Related" or "More on this" block, add the new post there. Skip if related posts are auto-generated from tags/frontmatter.

Skip when the listing is auto-generated from a content collection or filesystem glob (typical for Astro content collections, Next.js MDX route groups, Nuxt Content) — the new file is picked up automatically. Only edit when the listing is manual.

This is **not** general semantic interlinking across the site — that's `spawn-internal-links`. This is just surfacing the new post where posts are already surfaced.

## Writing guidelines

- Write for a real reader first, then optimize for keyword/entity coverage.
Expand All @@ -124,7 +140,7 @@ Leaving posts gated (via the project's existing draft mechanism or a TODO commen
## What this skill does NOT do

- Does not generate landing or product pages (that's `spawn-pages`).
- Does not add internal links across existing pages (that's `spawn-internal-links`). It only adds outbound links from the new posts it drafts.
- Does not add general semantic internal links across the site (that's `spawn-internal-links`). It does surface the new post in manually maintained index pages, footers, and category lists where posts of the same type are already listed — that's the bare minimum for a new post to be discoverable.
- Does not publish. Posts ship gated behind the project's existing draft mechanism (or a TODO comment if none exists) and land in the repo for review.
- Does not invent facts, customers, or stats.
- Does not invent frontmatter keys. If an existing post is available, its shape is the source of truth — copy it exactly.
15 changes: 15 additions & 0 deletions .codex/skills/spawn-pages/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,21 @@ Do not write a file. Instead append a **migration note** to `.overgrow/content-p

Then update `.overgrow/content-plan.md` with an entry for each spawned page under a `## Pages` section, noting the output file path and format (component / markdown / CMS migration).

## Surface the new page in existing index/list locations

A new page that nothing else links to is invisible. After writing the file, find every place on the site that already lists pages of the same type and add the new entry there too. Match the existing entry pattern exactly — copy the markup of an adjacent entry, swap the route, title, description, any fields to make the new page fit in cohesively.

Check, in order:

- **Footer link lists.** Open the footer component (`Footer.tsx`, `footer.astro`, `_layout`'s footer partial, etc.). If it manually lists pages of the same type as the one you spawned (alternatives, integrations, solutions, comparison pages, popular blog posts), add a link to the new page in the same list.
- **Index / hub pages.** `/alternatives`, `/integrations`, `/solutions`, `/resources`, `/compare`, `/customers`, etc. If a hub page exists for the type you spawned and lists entries manually (a hard-coded array, a JSX list, MDX with manual links), add the new page there.
- **Sibling cross-links.** If existing alternatives or comparison pages cross-link to each other (e.g. a "More comparisons" section), add the new page to those lists.
- **Sitemap and route manifests.** If the project maintains a manual `sitemap.xml` or a route array (e.g. for static export or for nav generation), add the new route.

Skip when the listing is auto-generated from a content collection or filesystem glob — the new file is picked up automatically. Only edit when the listing is manual.

This is **not** general semantic interlinking — that's `spawn-internal-links`. This is just surfacing the new page where pages of the same type are already surfaced.

## Intent-to-page mapping cheat sheet

- Comparison intent (`X vs Y`) → `/compare/<competitor>` or `/alternatives/<competitor>` page.
Expand Down
18 changes: 17 additions & 1 deletion .cursor/skills/spawn-blogs/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,22 @@ Then update `.overgrow/content-plan.md` (create if missing) with an entry per sp

Leaving posts gated (via the project's existing draft mechanism or a TODO comment) is intentional — the user should run `audit` and `humanize` before publishing.

## Surface the new post in existing index/list locations

A new post that nothing else links to is invisible. After writing the file, find every place on the site that already lists blog posts and add the new entry there too when appropriate. Match the existing entry pattern exactly — copy the markup of an adjacent entry, swap the route, title, date, excerpt, any fields
to make the new page fit in cohesively.

Check, in order:

- **Footer link lists.** Open the footer component (`Footer.tsx`, `footer.astro`, the layout's footer partial, etc.). If it manually lists popular or recent blog posts, add the new post in the same list (and remove the oldest if the list is fixed-length).
- **Blog index / hub page.** `/blog`, `/posts`, `/articles`, `/resources/blog` etc. If the index lists posts manually (hard-coded array, JSX list, MDX with explicit links rather than a content-collection query), add the new post.
- **Pillar / category index pages.** If the blog is segmented (`/blog/category/<pillar>`, `/blog/topics/<topic>`) and those pages list posts manually, add the new post to the matching category.
- **Sibling "related posts" sections.** If existing posts in the same pillar manually link to each other in a "Related" or "More on this" block, add the new post there. Skip if related posts are auto-generated from tags/frontmatter.

Skip when the listing is auto-generated from a content collection or filesystem glob (typical for Astro content collections, Next.js MDX route groups, Nuxt Content) — the new file is picked up automatically. Only edit when the listing is manual.

This is **not** general semantic interlinking across the site — that's `spawn-internal-links`. This is just surfacing the new post where posts are already surfaced.

## Writing guidelines

- Write for a real reader first, then optimize for keyword/entity coverage.
Expand All @@ -123,7 +139,7 @@ Leaving posts gated (via the project's existing draft mechanism or a TODO commen
## What this skill does NOT do

- Does not generate landing or product pages (that's `spawn-pages`).
- Does not add internal links across existing pages (that's `spawn-internal-links`). It only adds outbound links from the new posts it drafts.
- Does not add general semantic internal links across the site (that's `spawn-internal-links`). It does surface the new post in manually maintained index pages, footers, and category lists where posts of the same type are already listed — that's the bare minimum for a new post to be discoverable.
- Does not publish. Posts ship gated behind the project's existing draft mechanism (or a TODO comment if none exists) and land in the repo for review.
- Does not invent facts, customers, or stats.
- Does not invent frontmatter keys. If an existing post is available, its shape is the source of truth — copy it exactly.
15 changes: 15 additions & 0 deletions .cursor/skills/spawn-pages/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,21 @@ Do not write a file. Instead append a **migration note** to `.overgrow/content-p

Then update `.overgrow/content-plan.md` with an entry for each spawned page under a `## Pages` section, noting the output file path and format (component / markdown / CMS migration).

## Surface the new page in existing index/list locations

A new page that nothing else links to is invisible. After writing the file, find every place on the site that already lists pages of the same type and add the new entry there too. Match the existing entry pattern exactly — copy the markup of an adjacent entry, swap the route, title, description, any fields to make the new page fit in cohesively.

Check, in order:

- **Footer link lists.** Open the footer component (`Footer.tsx`, `footer.astro`, `_layout`'s footer partial, etc.). If it manually lists pages of the same type as the one you spawned (alternatives, integrations, solutions, comparison pages, popular blog posts), add a link to the new page in the same list.
- **Index / hub pages.** `/alternatives`, `/integrations`, `/solutions`, `/resources`, `/compare`, `/customers`, etc. If a hub page exists for the type you spawned and lists entries manually (a hard-coded array, a JSX list, MDX with manual links), add the new page there.
- **Sibling cross-links.** If existing alternatives or comparison pages cross-link to each other (e.g. a "More comparisons" section), add the new page to those lists.
- **Sitemap and route manifests.** If the project maintains a manual `sitemap.xml` or a route array (e.g. for static export or for nav generation), add the new route.

Skip when the listing is auto-generated from a content collection or filesystem glob — the new file is picked up automatically. Only edit when the listing is manual.

This is **not** general semantic interlinking — that's `spawn-internal-links`. This is just surfacing the new page where pages of the same type are already surfaced.

## Intent-to-page mapping cheat sheet

- Comparison intent (`X vs Y`) → `/compare/<competitor>` or `/alternatives/<competitor>` page.
Expand Down
18 changes: 17 additions & 1 deletion .gemini/skills/spawn-blogs/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,22 @@ Then update `.overgrow/content-plan.md` (create if missing) with an entry per sp

Leaving posts gated (via the project's existing draft mechanism or a TODO comment) is intentional — the user should run `audit` and `humanize` before publishing.

## Surface the new post in existing index/list locations

A new post that nothing else links to is invisible. After writing the file, find every place on the site that already lists blog posts and add the new entry there too when appropriate. Match the existing entry pattern exactly — copy the markup of an adjacent entry, swap the route, title, date, excerpt, any fields
to make the new page fit in cohesively.

Check, in order:

- **Footer link lists.** Open the footer component (`Footer.tsx`, `footer.astro`, the layout's footer partial, etc.). If it manually lists popular or recent blog posts, add the new post in the same list (and remove the oldest if the list is fixed-length).
- **Blog index / hub page.** `/blog`, `/posts`, `/articles`, `/resources/blog` etc. If the index lists posts manually (hard-coded array, JSX list, MDX with explicit links rather than a content-collection query), add the new post.
- **Pillar / category index pages.** If the blog is segmented (`/blog/category/<pillar>`, `/blog/topics/<topic>`) and those pages list posts manually, add the new post to the matching category.
- **Sibling "related posts" sections.** If existing posts in the same pillar manually link to each other in a "Related" or "More on this" block, add the new post there. Skip if related posts are auto-generated from tags/frontmatter.

Skip when the listing is auto-generated from a content collection or filesystem glob (typical for Astro content collections, Next.js MDX route groups, Nuxt Content) — the new file is picked up automatically. Only edit when the listing is manual.

This is **not** general semantic interlinking across the site — that's `spawn-internal-links`. This is just surfacing the new post where posts are already surfaced.

## Writing guidelines

- Write for a real reader first, then optimize for keyword/entity coverage.
Expand All @@ -122,7 +138,7 @@ Leaving posts gated (via the project's existing draft mechanism or a TODO commen
## What this skill does NOT do

- Does not generate landing or product pages (that's `spawn-pages`).
- Does not add internal links across existing pages (that's `spawn-internal-links`). It only adds outbound links from the new posts it drafts.
- Does not add general semantic internal links across the site (that's `spawn-internal-links`). It does surface the new post in manually maintained index pages, footers, and category lists where posts of the same type are already listed — that's the bare minimum for a new post to be discoverable.
- Does not publish. Posts ship gated behind the project's existing draft mechanism (or a TODO comment if none exists) and land in the repo for review.
- Does not invent facts, customers, or stats.
- Does not invent frontmatter keys. If an existing post is available, its shape is the source of truth — copy it exactly.
Loading
Loading