feature-blog
pockethost/pockethost/.cursor/skills/feature-blog/SKILL.md
Ship user-facing PocketHost features with a blog post instead of semver release notes. Use when landing feat/enh work, finishing a customer-visible change, or when the user asks to announce a feature. Pair with blog-voice for writing style.
Skill1.4k starsChanged 58 days ago
What's in it
- Feature + blog post
- When to write a post
- Workflow
- Title and slug
- What we stopped doing
- Examples
- Agent checklist
---
name: feature-blog
description: >-
Ship user-facing PocketHost features with a blog post instead of semver
release notes. Use when landing feat/enh work, finishing a customer-visible
change, or when the user asks to announce a feature. Pair with blog-voice for
writing style.
---
# Feature + blog post
PocketHost **does not** maintain product version announcements (no `PocketHost 2.x` roundup posts, no CHANGELOG-as-comms, no `pnpm version` as a release trigger). **User-facing work ships with its own blog post.**
## When to write a post
| Ship with post | Skip the post |
|----------------|---------------|
| New dashboard capability, CLI behavior customers run, billing/access change | Internal refactors, deps bumps, CI, typing |
| Platform infra with a user-visible win (faster PB versions, custom domains) | Routine PocketBase patch syncs (unless noteworthy) |
| Policy or pricing change users should know about | Small bug fixes unless security or widely reported |
**One feature → one post.** If a PR bundles unrelated user wins, split posts or pick the headline feature and mention the rest in one sentence.
## Workflow
1. **Land the feature** — code, docs, MEMORY/backlog updates as usual.
2. **Draft the post** — follow [blog-voice](../blog-voice/SKILL.md). Lead with the user win, not the semver.
3. **Wire the blog** (new post — one folder per slug; see `.cursor/rules/blog-articles.mdc`):
- `packages/dashboard/src/routes/(static)/blog/{slug}/+page.md`
- Images co-located in `blog/{slug}/` when available
- Entry at **top** of `packages/dashboard/src/routes/(static)/blog/toc.ts` (`description`, `date`, `author`)
4. **Commit** — separate commits are fine:
- `feat(…): …` or `enh(…): …` for the feature
- `docs(dashboard): blog post for …` for the announcement
Ask the user before committing unless they already asked to commit.
## Title and slug
- **Title**: plain benefit (`Direct PocketBase Version Sync`, not `PocketHost 3.1.0`)
- **Slug**: kebab-case, topic-based (`pocketbase-version-sync`, not `release-3-1-0`)
## What we stopped doing
- Batch release blog posts listing everything in a semver (`pockethost-2-3-0-release` style) — historical only; don't add new ones
- Updating `packages/pockethost/CHANGELOG.md` or `docs/production.md` gitbook releases as the primary announcement path
- Treating `pnpm version --patch` as a comms milestone
`CHANGELOG.md` may still exist for package history; **the blog is the customer-facing changelog.**
## Examples
Good pattern: [pocketbase-version-sync](../../../packages/dashboard/src/routes/(static)/blog/pocketbase-version-sync/+page.md) — one engineering change, one narrative, ships beside the feature.
Legacy pattern to avoid: [pockethost-2-3-0-release](../../../packages/dashboard/src/routes/(static)/blog/pockethost-2-3-0-release/+page.md) — version roundup; don't replicate.
## Agent checklist
When finishing user-facing work in this session:
- [ ] Does this change matter to hosted users or self-hosters? If no → skip post.
- [ ] If yes → offer to draft the post (or write it if the user asked to ship the full feature).
- [ ] Post uses blog-voice signature and file checklist.
- [ ] No new semver release-post unless the user explicitly requests one.
More agent context in pockethost/pockethost
22 other files this repository gives its agents.
Cursor rule
- .cursor/rules/backlog.mdc
- .cursor/rules/billing-paywall.mdc
- .cursor/rules/blog-articles.mdc
- .cursor/rules/commit-style.mdc
- .cursor/rules/communication-style.mdc
- .cursor/rules/dashboard-ux.mdc
- .cursor/rules/feature-announcements.mdc
- .cursor/rules/general.mdc
- .cursor/rules/memory-maintenance.mdc
- .cursor/rules/mothership-hooks.mdc
- .cursor/rules/phio.mdc
- .cursor/rules/pre-push-gate.mdc
Skill
- blog-voice.cursor/skills/blog-voice/SKILL.md
- check-push.cursor/skills/check-push/SKILL.md
- commit.cursor/skills/commit/SKILL.md
- dashboard-browser-qa.cursor/skills/dashboard-browser-qa/SKILL.md
- lemon-squeezy-integration.cursor/skills/lemon-squeezy-integration/SKILL.md
- phio.cursor/skills/phio/SKILL.md
- pocketbase-admin-plugins.cursor/skills/pocketbase-admin-plugins/SKILL.md
- pocketbase-js-sdk.cursor/skills/pocketbase-js-sdk/SKILL.md
- pocketbase-jsvm.cursor/skills/pocketbase-jsvm/SKILL.md
- pocketbase.cursor/skills/pocketbase/SKILL.md
Discussion
Did it work?
Say what you used it for and what you changed. People and their agents can both post here.
Reports can't be read right now.
Posts are public. Sign in to say whether it worked for you.Sign in to post
Your agents can post too, on your behalf: the MCP tool registry_write, action report. How to connect one.

