voice updates, blog publish skill
This commit is contained in:
112
plugins/compound-engineering/skills/hugo-blog-publisher/SKILL.md
Normal file
112
plugins/compound-engineering/skills/hugo-blog-publisher/SKILL.md
Normal file
@@ -0,0 +1,112 @@
|
||||
---
|
||||
name: hugo-blog-publisher
|
||||
description: This skill should be used when publishing a new post to John's Hugo blog on lambwire. It handles both post types — "links" (reposting something interesting with a quote and commentary) and "blog" (original essays) — creates the correctly formatted markdown file, and commits and pushes it to the remote repository. Triggers on "publish to my blog", "add a link post", "post to lambwire", "new blog post", or any request to create content on the Hugo blog.
|
||||
---
|
||||
|
||||
# Hugo Blog Publisher
|
||||
|
||||
Publish new content to John's Hugo blog at `lambwire` (`/home/john/mine/scripts/hugo`). Two post types are supported: `links` and `blog`. All posts are committed directly to `main` and pushed.
|
||||
|
||||
## Post Types
|
||||
|
||||
### links
|
||||
|
||||
A "link post" reposts something interesting — a pull-quote from an article, the source metadata, and John's brief commentary.
|
||||
|
||||
**Required fields:**
|
||||
- `title` — John's own title for the post (not necessarily the article title)
|
||||
- `external_url` — Full URL of the source article
|
||||
- `source_name` — Publication name (e.g. "Every", "Strange Loop Canon")
|
||||
- `source_title` — Full title of the source article
|
||||
- `source_author` — Author(s) of the source article
|
||||
- `source_published` — Date the source was published (`YYYY-MM-DD`)
|
||||
- `tags` — Relevant tags as a list
|
||||
- `quote` — The excerpt to pull-quote
|
||||
- `quote_attribution` — Who said the quote (usually same as `source_author`)
|
||||
- `commentary` — John's own thoughts (1–3 paragraphs of prose, placed after the frontmatter)
|
||||
|
||||
**Exact format:**
|
||||
```markdown
|
||||
---
|
||||
title: "{{ title }}"
|
||||
date: {{ YYYY-MM-DDTHH:MM:SS-06:00 }}
|
||||
draft: false
|
||||
type: link
|
||||
|
||||
external_url: "{{ external_url }}"
|
||||
source_name: "{{ source_name }}"
|
||||
source_title: "{{ source_title }}"
|
||||
source_author: "{{ source_author }}"
|
||||
source_published: {{ YYYY-MM-DD }}
|
||||
link_type: article
|
||||
tags: ["tag1", "tag2"]
|
||||
|
||||
quote: |
|
||||
"{{ quote }}"
|
||||
quote_attribution: "{{ quote_attribution }}"
|
||||
---
|
||||
|
||||
{{ commentary }}
|
||||
```
|
||||
|
||||
**Date:** Current datetime in Central time with offset `-06:00` (e.g. `2026-03-15T14:30:00-06:00`).
|
||||
|
||||
**Filename:** Slugify the title — lowercase, hyphens for spaces, strip punctuation. E.g. `is-ai-about-craft-not-speed.md`.
|
||||
|
||||
---
|
||||
|
||||
### blog
|
||||
|
||||
An original essay. Content is freeform markdown after the frontmatter.
|
||||
|
||||
**Required fields:**
|
||||
- `title` — Post title
|
||||
- `date` — Today's date (`YYYY-MM-DD`)
|
||||
- `content` — The full essay body in markdown
|
||||
|
||||
**Exact format:**
|
||||
```markdown
|
||||
---
|
||||
title: '{{ title }}'
|
||||
date: {{ YYYY-MM-DD }}
|
||||
draft: false
|
||||
aliases:
|
||||
- /blog/{{ slug }}/
|
||||
---
|
||||
|
||||
{{ content }}
|
||||
```
|
||||
|
||||
**Filename:** Slugify the title. E.g. `keeping-it-simple.md`.
|
||||
|
||||
---
|
||||
|
||||
## Workflow
|
||||
|
||||
**Step 1 — Gather inputs.** Ask for all required fields for the chosen post type before writing anything. Don't proceed until everything is provided.
|
||||
|
||||
**Step 2 — Generate slug.** Lowercase the title, replace spaces with hyphens, strip punctuation. This becomes both the filename (without `.md`) and the `/blog/slug/` alias for blog posts.
|
||||
|
||||
**Step 3 — Compose the markdown.** Build the full file content using the exact format above.
|
||||
|
||||
**Step 4 — Write the file to the remote.** Use an SSH heredoc to write the file directly:
|
||||
```bash
|
||||
ssh lambwire "cat > /home/john/mine/scripts/hugo/content/{{ links|blog }}/{{ slug }}.md" << 'EOF'
|
||||
{{ file_content }}
|
||||
EOF
|
||||
```
|
||||
|
||||
**Step 5 — Commit and push on the remote.**
|
||||
```bash
|
||||
ssh lambwire "cd /home/john/mine/scripts/hugo && git add content/ && git commit -m 'Add {{ links|blog }}: {{ title }}' && git push origin main"
|
||||
```
|
||||
|
||||
**Step 6 — Confirm.** Report the remote path, the commit message, and that the push succeeded.
|
||||
|
||||
## Notes
|
||||
|
||||
- Never set `draft: true` — all posts go live immediately.
|
||||
- For `links` posts, the body after the frontmatter is John's commentary only — do not repeat the quote there.
|
||||
- For `blog` posts, use single quotes around the title in frontmatter (not double quotes).
|
||||
- If `source_published` is not known for a links post, omit the field entirely rather than guessing.
|
||||
- Tags for `links` posts are lowercase strings in a JSON array: `["ai", "writing"]`.
|
||||
Reference in New Issue
Block a user