Blog Reviewing
Overview
Systematically audit blog posts against the canonical style rules defined in the blog-writing skill. Every review follows the same checklist — no ad-hoc exploration.
Canonical authority: The style rules in .claude/skills/blog-writing/SKILL.md and docs/blog-style.md are the source of truth. Read both before reviewing. Reference post: content/posts/laravel-boost-ddev.md.
Review Process
- Read the blog-writing skill and
docs/blog-style.mdto load current rules - Identify the post type (series or general) from frontmatter
seriesfield - Run through the checklist below in order
- Report findings using the standard format
- Auto-generate social copy if missing — if
docs/social/{slug}.mddoes not exist, generate it now using the Social media artifact rules in the blog-writing skill. Do not just flag it as MISSING and move on.
Checklist
Run every check. Do not skip items.
Frontmatter
-
titlepresent, sentence case, descriptive -
datein YYYY-MM-DD format -
categoriespresent, lowercase, hyphenated for multi-word -
tagspresent, max 4 -
summaryfield used (notdescription). One sentence: outcome or audience. -
slugpresent, kebab-case -
draftfield present - Series posts only:
seriesfield present with correct series name
Structure
- Opens with "Ahnii!" (exclamation mark, own paragraph)
- Closes with "Baamaapii" (no emoji, own paragraph)
- Intro states what the post covers in one sentence (scoped)
- Intro covers the relevant W's: What (what the reader learns), Why (why it matters or what problem it solves), Who (who it's for, if not obvious from context). Not all W's are required — use judgment based on post type.
- No "Wrapping Up" or "Conclusion" heading
- No time estimates in section headings
- Heading hierarchy: H2 for main sections, H3 for variants/subsections
- Prerequisites section (bullet list) when relevant
Series Index Structure (only if series_order: 0)
-
series_order: 0in frontmatter - 1-2 sentence intro stating what the series covers and who it's for
- Numbered H3 TOC listing every post in the series
- Published posts (date <= today) use
relreflinks - Future-dated posts use plain text titles (no
relref) - Each TOC entry has 1-2 sentence description
- TOC order matches
series_ordervalues across the series
Series Post Structure (only if series field exists and series_order > 0)
- Prerequisites blockquote after greeting
- Problem statement section
- Core concepts/interfaces section with code
- Real-world implementation section
- Common mistakes section with bad/good code pairs
- Framework integration section
- Try it yourself section with companion repo commands
- What's next section linking to next post in series
Series Consistency (only if series field exists)
- "Part N" references in body text match
series_orderin frontmatter - "Next" teaser points to the correct next post (by
series_order, not by topic similarity) - "Next" link uses
relref(or plain text if the target post is future-dated) - No duplicate dates with other posts in the same series
- Series index post (
series_order: 0) exists and lists all posts in the series
Content
- All code blocks have language tags
- After each code block: 1-2 sentences explaining what it does or why
- First mention of products/tools/projects is linked
- Internal links use
relrefshortcode (e.g.,{{< relref "post-slug" >}}), not root-relative paths - External links use full HTTPS URLs
- Voice is second person, direct, instructional ("you"/"your", not "I"/"my")
- Concise: short sentences, one idea per paragraph, no filler
- Em dashes used intentionally and sparingly (one or two per post max; zero is fine)
- Contrast constructions like "X is not Y, it is Z" are used intentionally, not repeated as a crutch
- Sentence cadence varies enough that the draft does not read mechanically repetitive
- Generic AI-jargon filler ("robust", "seamless", "transformative", "momentum") is replaced with concrete wording
- Headings are SEO-friendly with keywords (not generic like "The Problem" or "The Full Picture")
- Tags match post content (every tag should be substantiated in the body)
- Wordy flow/pipeline/architecture explanations replaced with Mermaid diagrams (3+ sentences describing a flow or component relationship is a signal to use a diagram instead)
- Named concepts (interfaces, classes, patterns) are explained in plain language before being introduced by name
- Prose doesn't narrate what adjacent code already shows (if a bullet list describes what a method does and the code block shows the same thing, delete the list)
- Behavioral claims ("you can do X", "this prevents Y") are backed by a code example showing the behavior
Visual Components
- Numbered lists with 3+ items where each item has explanatory content → suggest
stepsshortcode - Inline link CTAs at the end of a project-showcase post → suggest
ctashortcode - Asides or warnings written as bare paragraphs → suggest
calloutshortcode - More than one
pullquoteshortcode per post → flag as INCORRECT (max one per post) - More than one
ctashortcode per post → flag as INCORRECT (max one per post) - Component used decoratively without adding information → flag as INCORRECT (walls of decoration are worse than walls of text)
-
compareused for non-before/after contrasts → flag as INCORRECT (use a markdown table instead) -
statsused in a post without real metrics → flag as INCORRECT (don't invent numbers)
Findings Format
Report each finding as:
**[CATEGORY]** Line N: description
Fix: exact correction
Categories:
- MISSING — Required element is absent
- INCORRECT — Element exists but violates a rule
- SUGGESTION — Not a rule violation, but would improve the post
Always include the line number and a specific fix. Do not report findings without both.
Example:
**MISSING** Line 50: No farewell. Post ends without "Baamaapii"
Fix: Add "Baamaapii" as the final line, on its own paragraph
**INCORRECT** Line 13: Greeting uses comma ("Ahnii,") instead of exclamation mark
Fix: Change "Ahnii," to "Ahnii!"
**INCORRECT** Line 102: Farewell has emoji ("Baamaapii 👋")
Fix: Change to "Baamaapii" — no emoji
Accuracy
- All code blocks are syntactically correct
- Code referencing specific projects matches actual source in that repo
- Tool/product names are correct and current
- Internal links have matching slugs that exist
- External links use valid HTTPS URLs
- Behavioral claims ("this does X", "the output looks like") are verifiable
- Config/file references match actual state in referenced repos
- No aspirational state presented as current state
- Code referencing repos in
~/dev/has been verified against the actual source (AI-generated interface signatures, method names, and class names are frequently hallucinated)
Social Media Artifact
- Companion file exists at
docs/social/{slug}.md— if missing, generate it now (do not flag and skip) - Canonical URL present and correct (
https://jonesrussell.github.io/blog/{slug}/) - Facebook: 1-3 sentence hook + link + hashtags
- X (Twitter): under ~240 characters including URL, link at end
- LinkedIn: professional tone, no hashtags, link included
- All platform blocks include the canonical URL
Self-Improving Audit Loop
After completing a review, check whether any finding was not already covered by an existing checklist item or common mistakes entry. If so:
- Add the new check to the appropriate skill file:
- New checklist item →
~/dev/skills/skills/blog-reviewing/SKILL.md - New common mistake →
~/dev/skills/skills/blog-writing/SKILL.md(Common Mistakes table) - New style rule → both files as appropriate
- New checklist item →
- Sync the updated skill to the installed copy at
~/.claude/skills/blog-*/SKILL.md - The PR review process on the
~/dev/skills/repo is the human gate for accepting or rejecting new rules
This ensures every review session that discovers a gap automatically improves future reviews.
Batch Mode
When asked to review multiple posts:
- List all target posts (e.g., all drafts:
grep -rl "draft: true" content/posts/) - Identify each post's type (series vs general)
- Review each post against the checklist
- Group findings by post with a summary count
Output format for batch:
## [post-slug.md] — [N findings: X missing, Y incorrect, Z suggestions]
[findings]
## [post-slug.md] — [N findings: ...]
[findings]