skills/proofread/SKILL.md
Review blog posts and pages for grammar, style, frontmatter validity, technical accuracy, and SEO. Use this when asked to review, proofread, or validate Markdown content.
npx skillsauth add nikoheikkila/nikoheikkila.fi proofreadInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Review Markdown content in content/ for quality across four areas:
When reviewing content, check all four areas and report findings grouped by category.
Every Markdown file must have valid YAML frontmatter with these fields:
| Field | Required | Type | Notes |
|-----------|----------|--------|----------------------------------------------------|
| title | yes | string | Title-cased (use the title npm package rules) |
| author | yes | string | Typically Niko Heikkilä |
| lang | yes | string | en, fi, or sv |
| excerpt | yes | string | Short summary used in RSS, OpenGraph, and meta |
| type | yes | string | post (blog post) or page (standalone page) |
| date | yes | string | ISO 8601 date (YYYY-MM-DD), not in the future |
| hero | yes | string or null | URL to cover image or null |
Validation rules:
type: post files must be in content/blog/ (flat file or directory with index.md)type: page files must be in content/ rootdate must be a valid ISO 8601 date and should not be in the futurehero must be either null or a valid URL (typically starts with https://r2.nikoheikkila.fi/) pointing to an image assetlang affects the OpenGraph locale: en maps to en_GB, others map to fi_FIexcerpt should not contain line breaks (they're stripped in the SEO component)Writing conventions to check:
title is title-casedMarkdown conventions:
## for top-level sections within a post (the title frontmatter field renders as <h1>)```typescript)- for unordered itemshero: null fall back to a default site cover image — recommend setting a specific hero for better social sharingpost → article, page → website) — verify it matches the content's purposeRSS feed impact:
type: post content appears in the RSS feed (pages are filtered out)excerpt field is used as the RSS item descriptioncontent:encodedcontent/
├── about.md # type: page (standalone pages at root)
├── now.md # type: page
├── testimonials.md # type: page
├── uses.md # type: page
└── blog/ # type: post (all blog posts here)
├── my-post.md # Simple post (single file)
└── my-post-with-assets/ # Post with co-located images
├── index.md
└── screenshot.png
Filename convention: kebab-case derived from the title via @sindresorhus/slugify.
Structure review feedback as:
## Content Review: {filename}
### Frontmatter
- [issue or "All fields valid"]
### Grammar and Style
- [findings]
### Technical Accuracy
- [findings]
### SEO and Metadata
- [findings]
Mark issues by severity: Error (must fix), Warning (should fix), Suggestion (nice to have).
devops
Instructions for managing the Cloudflare infrastructure with Terraform. Use this when you need to work with Terraform or Cloudflare resources.
testing
Instructions for running project tasks. Use this when you need to run a project-specific command or workflow.
development
Instructions for using Playwright to test the blog. Use this when you need to write, run or debug Playwright tests for the blog.
testing
Create, edit, improve, or audit AgentSkills. Use when creating a new skill from scratch or when asked to improve, review, audit, tidy up, or clean up an existing skill or SKILL.md file. Also use when editing or restructuring a skill directory (moving files to references/ or scripts/, removing stale content, validating against the AgentSkills spec). Triggers on phrases like "create a skill", "author a skill", "tidy up a skill", "improve this skill", "review the skill", "clean up the skill", "audit the skill".