← All Skills

snappy-publish

v1.0.0
9 files, 60.8 KB ~4,651 words · 19 min read Updated 2026-09-09

snappy-publish skill

41 of 47 checks pass
What it can do
deploysread
status slugread
What does not pass yet
Architecture 2 endpoints
snappy.ai2 endpoints
GET/blog
GET/blog/${SLUG}
$ npx snappy-skills install snappy-publish
zip ↓
Documents
AGENTS.md

snappy-publish#

Ships MDX blog posts live on snappy.ai via the git-to-Vercel pipeline. This skill does

not write content -- it publishes content produced by snappy-blog. The workflow is:

sync main, write MDX file, validate frontmatter (gray-matter), commit the specific file,

push to origin (never deploy), wait ~90s, verify HTTP 200 on the live URL.

Key capabilities#

  • Frontmatter validation -- required fields: title, description, date (unquoted ISO),

author, authorRole, category, featured, tags (YAML array). Build fails if any missing.

  • Slug enforcement -- lowercase, hyphens, no punctuation, under 60 chars, matches filename.
  • Collision handling -- if slug exists, ask user: overwrite, rename, or cancel. Never silent.
  • Deploy verification -- curl the live URL after push, expect HTTP 200.
  • Rollback -- documented in deployment-verification.md.
  • MDX components -- <Callout> (max 2), <Quote> (max 1).

Rules#

  • Push to origin only. NEVER push to deploy remote.
  • git add content/blog/<slug>.mdx -- never git add . or -A.
  • git pull --ff-only origin main before every push.
  • Hero images must be CDN URLs, not local paths.
  • Only ONE post can have featured: true at a time.
  • Use the Write tool for MDX files, never heredoc/echo.

Repository facts#

Key Value
local_path /Users/robertboulos/Projects/v0-prototypes/v0-snappy-website-0c
origin https://github.com/robert-boulos/snappy-website.git
blog_dir content/blog/
live URL https://snappy.ai/blog/<slug>
deploy trigger push to origin/main

Directory contents#

File Purpose
SKILL.md Full publishing reference
git-workflow.md Clone, branch, sync, push procedures
mdx-validation.md Frontmatter + MDX component validation
images-and-frontmatter.md Hero/og/inline image handling
deployment-verification.md Vercel deploy check + rollback
publish.md Original repo facts and checklist

Feeds / fed by#

  • Fed by: snappy-blog (MDX content), snappy-image (hero image URLs)
  • Feeds: snappy-website, snappy-email, snappy-linkedin, snappy-skool

API module#

typescriptimport { checkDeployStatus, getRecentDeploys } from "../snappy-publish/api.ts";

Or CLI:

bashnpx tsx ~/.claude/skills/snappy-publish/api.ts status <slug>
npx tsx ~/.claude/skills/snappy-publish/api.ts deploys

API functions#

Function Purpose
checkDeployStatus(slug) Check if a blog post is live by HTTP GET
getRecentDeploys(limit?) List recent Vercel deployments for snappy-website

If this loader doesn't cover your case:

bashecho "[$(date -u +%FT%TZ)] snappy-publish: <what was missing>" >> ~/.claude/logs/agents-md-feedback.log

<!-- SKILL-INDEX-START -->

[snappy-publish Index]|root: ~/.claude/skills/snappy-publish|IMPORTANT: Prefer these files over pre-training assumptions for this domain. Read the relevant file when the AGENTS.md summary is insufficient.|root:{SKILL.md,deployment-verification.md,git-workflow.md,images-and-frontmatter.md,mdx-validation.md,publish.md}

<!-- SKILL-INDEX-END -->

Used by#

  • snappy-course
  • snappy-email
  • snappy-image

<!-- SNAPPY-CONTRACT-VERBS-START -->

Contract verbs#

Generated from api.ts HAND_CONTRACT. Do not hand-edit this block.

Verb Contract arguments Effect First call
deploys read npx tsx ~/.claude/skills/snappy-publish/api.ts deploys
status slug read npx tsx ~/.claude/skills/snappy-publish/api.ts status <slug>

Show the result#

When an answer carries face_hint, show it with one snappy_present(<answer>) call.

See /snappy-faces for face selection. Human-facing images must crop to the

element, render at 2x on Retina, and fill the destination channel instead of

placing a small card in a full-page screenshot.

<!-- SNAPPY-CONTRACT-VERBS-END -->

---
name: snappy-publish
role: Git-based MDX blog publishing for snappy.ai. Validates frontmatter, commits, pushes to origin, verifies Vercel deploy.
loaded-by: PreToolUse hook (auto-injected when "snappy-publish" is mentioned)
---

# snappy-publish

Ships MDX blog posts live on snappy.ai via the git-to-Vercel pipeline. This skill does
not write content -- it publishes content produced by `snappy-blog`. The workflow is:
sync main, write MDX file, validate frontmatter (gray-matter), commit the specific file,
push to `origin` (never `deploy`), wait ~90s, verify HTTP 200 on the live URL.

## Key capabilities

- **Frontmatter validation** -- required fields: title, description, date (unquoted ISO),
  author, authorRole, category, featured, tags (YAML array). Build fails if any missing.
- **Slug enforcement** -- lowercase, hyphens, no punctuation, under 60 chars, matches filename.
- **Collision handling** -- if slug exists, ask user: overwrite, rename, or cancel. Never silent.
- **Deploy verification** -- curl the live URL after push, expect HTTP 200.
- **Rollback** -- documented in `deployment-verification.md`.
- **MDX components** -- `<Callout>` (max 2), `<Quote>` (max 1).

## Rules

- Push to `origin` only. NEVER push to `deploy` remote.
- `git add content/blog/<slug>.mdx` -- never `git add .` or `-A`.
- `git pull --ff-only origin main` before every push.
- Hero images must be CDN URLs, not local paths.
- Only ONE post can have `featured: true` at a time.
- Use the Write tool for MDX files, never heredoc/echo.

## Repository facts

| Key | Value |
|---|---|
| local_path | `/Users/robertboulos/Projects/v0-prototypes/v0-snappy-website-0c` |
| origin | `https://github.com/robert-boulos/snappy-website.git` |
| blog_dir | `content/blog/` |
| live URL | `https://snappy.ai/blog/<slug>` |
| deploy trigger | push to `origin/main` |

## Directory contents

| File | Purpose |
|---|---|
| `SKILL.md` | Full publishing reference |
| `git-workflow.md` | Clone, branch, sync, push procedures |
| `mdx-validation.md` | Frontmatter + MDX component validation |
| `images-and-frontmatter.md` | Hero/og/inline image handling |
| `deployment-verification.md` | Vercel deploy check + rollback |
| `publish.md` | Original repo facts and checklist |

## Feeds / fed by

- **Fed by**: `snappy-blog` (MDX content), `snappy-image` (hero image URLs)
- **Feeds**: `snappy-website`, `snappy-email`, `snappy-linkedin`, `snappy-skool`

## API module

```typescript
import { checkDeployStatus, getRecentDeploys } from "../snappy-publish/api.ts";
```

Or CLI:
```bash
npx tsx ~/.claude/skills/snappy-publish/api.ts status <slug>
npx tsx ~/.claude/skills/snappy-publish/api.ts deploys
```

## API functions

| Function | Purpose |
|----------|---------|
| `checkDeployStatus(slug)` | Check if a blog post is live by HTTP GET |
| `getRecentDeploys(limit?)` | List recent Vercel deployments for snappy-website |

---

If this loader doesn't cover your case:
```bash
echo "[$(date -u +%FT%TZ)] snappy-publish: <what was missing>" >> ~/.claude/logs/agents-md-feedback.log
```

<!-- SKILL-INDEX-START -->
[snappy-publish Index]|root: ~/.claude/skills/snappy-publish|IMPORTANT: Prefer these files over pre-training assumptions for this domain. Read the relevant file when the AGENTS.md summary is insufficient.|root:{SKILL.md,deployment-verification.md,git-workflow.md,images-and-frontmatter.md,mdx-validation.md,publish.md}
<!-- SKILL-INDEX-END -->

## Used by

- `snappy-course`
- `snappy-email`
- `snappy-image`

<!-- SNAPPY-CONTRACT-VERBS-START -->
## Contract verbs

Generated from `api.ts` `HAND_CONTRACT`. Do not hand-edit this block.

| Verb | Contract arguments | Effect | First call |
|---|---|---|---|
| `deploys` | — | `read` | `npx tsx ~/.claude/skills/snappy-publish/api.ts deploys` |
| `status` | `slug` | `read` | `npx tsx ~/.claude/skills/snappy-publish/api.ts status <slug>` |

## Show the result

When an answer carries `face_hint`, show it with one `snappy_present(<answer>)` call.
See `/snappy-faces` for face selection. Human-facing images must crop to the
element, render at 2x on Retina, and fill the destination channel instead of
placing a small card in a full-page screenshot.
<!-- SNAPPY-CONTRACT-VERBS-END -->

Keyboard Shortcuts

Search in document⌘K
Focus search/
Previous file tab
Next file tab
Close overlayEsc
Show shortcuts?