Blog Write
Target: pivoshenko.dev, posts at site/content/posts/*.mdx.
Goal = bespoke content. The post must contain things only the author could write — numbers, failures, decisions, opinions. Anything the first Google result could say -> delete. Padding is where slop comes from.
Modes
- write — idea/notes -> published MDX. Full flow (1-6).
- edit — existing draft -> improved. Map its headings into sections (step 3), confirm, then 4-6. Present per-section changes; never silently restructure.
Flow
1. Interrogate — Raw Material Before Prose
Never draft from a one-line idea. Mine the author first:
- what happened — the incident, the build, the decision
- specifics — numbers, commands, configs, error messages, dates
- the failure — what broke, what was tried and abandoned, what it cost
- the opinion — what they believe that others don't, and why
Source order: user > vault (06 WRITING draft, project/source notes) > repo. Never invent.
No raw material for a section -> ask targeted questions, don't pad.
2. Thesis
One sentence the post defends. Reader finishes -> can repeat it back.
No thesis -> no post, only notes. Say so and help find one.
3. Outline as Dependency Graph
Information = DAG. A section may only use concepts established by earlier sections.
- list sections; for each write the main point (a claim, not a heading)
- mark dependencies: section C leans on B's claim -> B comes first
- every section needs an edge to the thesis; no edge -> cut
- check: read points in order, circle any term/claim not yet introduced -> reorder or add setup
Confirm the outline with the user before drafting. Outline is cheap, drafts are not.
4. Draft, Section by Section
Load pivoshenko-brand/references/voice.md first (that skill's directory, not this one) — that file owns the voice. Non-negotiables from it:
- paragraphs 1-3 lines (~240 chars max); a paragraph that grows -> split
- rhythm: claim, claim, claim, beat
- first person singular; lowercase brand/tool names;
posts never articles
One section at a time. Each section carries >=1 author-only artifact (number, error, config, decision + why). Section has none -> back to step 1 for that section, not into generalities.
5. Edit Passes — Separate, in Order
- structure — DAG still holds after drafting drift; every section still earns its edge to the thesis
- slop — run
references/anti-slop.md: kill throat-clearing intro, summary outro, rule-of-three padding, hedge stacks, "it's not X — it's Y"
- voice — smell test from
pivoshenko-brand/references/voice.md: notebook entry not pitch; survives chopping in half; loses nothing if adjectives deleted
- facts — every number/command/claim traces to user, vault, or repo. Untraceable -> cut or ask
6. Ship
- file:
site/content/posts/<kebab-slug>.mdx
- frontmatter:
title, date (today, YYYY-MM-DD), description (1-2 plain sentences, no hype), tags (lowercase kebab-case, single word preferred)
just check from the pivoshenko.dev root must pass
- draft lives in the vault -> set
status: published + published_url on that note; leave the rest of the note alone
Rules
- Steps 1-3 are not skippable. A full draft delivered straight from a one-line idea is the failure mode this skill exists to prevent.
- Never invent metrics, dates, quotes, features.
- The author's opinion stays the author's. Don't sand off a strong position into "it depends".
1---2name: blog-write3description: Write and edit blog posts for pivoshenko.dev — interrogate for raw material, outline as a dependency graph, confirm sections, draft section-by-section, run anti-slop edit passes, ship as MDX. Use when the user says "write a blog post", "draft a post about X", "edit/revise/improve this article", "tighten this draft", "turn this into a post", "publish to my blog", or shares notes/an experience meant for pivoshenko.dev. The goal is bespoke practitioner writing, not generic AI prose.4---56# Blog Write78Target: `pivoshenko.dev`, posts at `site/content/posts/*.mdx`.910Goal = bespoke content. The post must contain things only the author could write — numbers, failures, decisions, opinions. Anything the first Google result could say -> delete. Padding is where slop comes from.1112## Modes1314- **write** — idea/notes -> published MDX. Full flow (1-6).15- **edit** — existing draft -> improved. Map its headings into sections (step 3), confirm, then 4-6. Present per-section changes; never silently restructure.1617## Flow1819### 1. Interrogate — Raw Material Before Prose2021Never draft from a one-line idea. Mine the author first:2223- what happened — the incident, the build, the decision24- specifics — numbers, commands, configs, error messages, dates25- the failure — what broke, what was tried and abandoned, what it cost26- the opinion — what they believe that others don't, and why2728Source order: user > vault (`06 WRITING` draft, project/source notes) > repo. Never invent.29No raw material for a section -> ask targeted questions, don't pad.3031### 2. Thesis3233One sentence the post defends. Reader finishes -> can repeat it back.34No thesis -> no post, only notes. Say so and help find one.3536### 3. Outline as Dependency Graph3738Information = DAG. A section may only use concepts established by earlier sections.3940- list sections; for each write the *main point* (a claim, not a heading)41- mark dependencies: section C leans on B's claim -> B comes first42- every section needs an edge to the thesis; no edge -> cut43- check: read points in order, circle any term/claim not yet introduced -> reorder or add setup4445**Confirm the outline with the user before drafting.** Outline is cheap, drafts are not.4647### 4. Draft, Section by Section4849Load `pivoshenko-brand/references/voice.md` first (that skill's directory, not this one) — that file owns the voice. Non-negotiables from it:5051- paragraphs 1-3 lines (~240 chars max); a paragraph that grows -> split52- rhythm: claim, claim, claim, beat53- first person singular; lowercase brand/tool names; `posts` never `articles`5455One section at a time. Each section carries >=1 author-only artifact (number, error, config, decision + why). Section has none -> back to step 1 for that section, not into generalities.5657### 5. Edit Passes — Separate, in Order58591. **structure** — DAG still holds after drafting drift; every section still earns its edge to the thesis602. **slop** — run `references/anti-slop.md`: kill throat-clearing intro, summary outro, rule-of-three padding, hedge stacks, "it's not X — it's Y"613. **voice** — smell test from `pivoshenko-brand/references/voice.md`: notebook entry not pitch; survives chopping in half; loses nothing if adjectives deleted624. **facts** — every number/command/claim traces to user, vault, or repo. Untraceable -> cut or ask6364### 6. Ship6566- file: `site/content/posts/<kebab-slug>.mdx`67- frontmatter: `title`, `date` (today, `YYYY-MM-DD`), `description` (1-2 plain sentences, no hype), `tags` (lowercase kebab-case, single word preferred)68- `just check` from the `pivoshenko.dev` root must pass69- draft lives in the vault -> set `status: published` + `published_url` on that note; leave the rest of the note alone7071## Rules7273- Steps 1-3 are not skippable. A full draft delivered straight from a one-line idea is the failure mode this skill exists to prevent.74- Never invent metrics, dates, quotes, features.75- The author's opinion stays the author's. Don't sand off a strong position into "it depends".