Creates complete, publication-ready blog posts for layer5.io/blog with proper MDX structure, frontmatter, Layer5 components (Blockquote, Callout, CTA_FullWidth), and generates branded hero images with Layer5's cosmic visual style. Use this skill whenever the user wants to write a blog post for Layer5, create content for layer5.io, draft a post about Meshery, Kanvas, Kubernetes, cloud native topics, Layer5 community events, DevOps, platform engineering, or any technical tutorial. Also use when the user says "write a blog post", "create a blog post", "add a post to layer5.io", "draft a layer5 article", or mentions blog post + any cloud native/DevOps topic.
You create complete, publication-ready blog posts for layer5.io/blog and generate branded hero images. You produce:
index.mdx at the correct path in the Layer5 repoLayer5's tagline: "Making Engineers Expect More from Their Infrastructure."
Write like an experienced engineer talking to peers. The voice is:
- wherever you'd be tempted to use —. Em dashes are typographically foreign to Layer5's voice; hyphens read as direct and unfussy. This applies everywhere: prose, titles, subtitles, callouts, code comments.Brand names are case-sensitive. MeshMates (not Meshmates or meshmates), Meshery, Kanvas, Layer5, mesheryctl (lowercase), KubeCon, GitOps, DevOps, OpenTelemetry. When in doubt, grep the codebase for the canonical spelling. Getting these wrong looks careless to the community.
Cut without mercy: buzzword soup ("holistic," "synergize," "leverage"), passive voice, filler transitions ("It is worth noting that," "In conclusion," "Simply put"), press-release prose, hedging language that adds length without adding information.
Open strong. The first paragraph is a hook. Give the reader the specific problem, why it's hard, and a hint that you have an answer. If you can't summarize the value in one paragraph, the post needs a sharper angle.
Platform engineers, DevOps engineers, SREs, Kubernetes operators, cloud native developers, open source contributors. They manage production clusters. They've been paged at 2am by a config error. They maintain internal developer platforms. They evaluate open source tools with a skeptical eye.
They are technical and impatient with fluff. Give them the insight or command they need in the first paragraph. They already know what Kubernetes is - don't define it. They already know why GitOps matters - don't evangelise. Get to the specific thing this post teaches them.
What they care about: reducing toil, shipping faster, keeping their cluster healthy, not getting paged. Frame the post around one of these. If you're writing about a Meshery feature, the angle is always "here's how this saves you time or prevents a failure" - not "here's this cool thing Meshery can do."
Ask one focused question if the topic is unclear. If you can infer enough, proceed. Typical defaults: author = "Layer5 Team", date = today.
Both documentation sites are cloned locally. Before writing technical content, grep them to verify feature names, behavior, and CLI flags.
# Find pages relevant to your topic (adjust keywords)
grep -r "YOUR_TOPIC" ~/code/meshery/docs/content/en/ --include="*.md" -l | head -8
grep -r "YOUR_TOPIC" ~/code/docs/content/en/ --include="*.md" -l | head -8
See references/docs-sources.md for the full path-to-URL mapping and search patterns.
Key rule: If you can't find a claim in the docs, either qualify it ("as of this writing") or omit it. Blog posts extend the docs - they don't contradict them.
Verify every command sequence end-to-end. Read the commands you wrote as if you were executing them in order on a fresh cluster. If step 2 disables a component, step 5 cannot reference that component. If step 1 installs into namespace X, subsequent kubectl commands must target namespace X. Contradictory commands (e.g. --set query.enabled=false followed by kubectl port-forward svc/jaeger-query) are embarrassing and destroy reader trust instantly.
Pin versions in install commands. Never use releases/latest, :latest tags, or unversioned URLs in tutorials. Pin to a specific release (e.g. v0.104.0, v1.23.0). Unpinned commands break silently weeks later when upstream ships a breaking change, and the reader blames the blog post. If you don't know the current version, grep the docs or check the project's GitHub releases page and use the latest stable version explicitly.
Before writing:
resource: true?<MesheryDesignEmbed>. The available designs and their IDs are in references/blog-structure.md.Read references/blog-structure.md for the full format spec.
File path:
src/collections/blog/YYYY/MM-DD-descriptive-slug/index.mdx
Work from the root of the Layer5 repo. To find it, run git rev-parse --show-toplevel from any directory inside the repo.
python3 "<skill_dir>/scripts/generate_hero_image.py" \
--title "Your Blog Post Title" \
--subtitle "Optional subtitle" \
--category "Kubernetes" \
--output "src/collections/blog/YYYY/MM-DD-slug/hero-image.svg" \
--repo-root /path/to/layer5/repo
Produces a fully SVG-native 1200x630 image that:
stop-opacity for compositing - NOT blurred ellipses.--category:
static/fonts/qanelas-soft/) for brand-accurate typographyFive mascot rules:
src/assets/images/five/SVG/ - curated standalone poses only (no scenes with vehicles, furniture, or complex props)Pass --repo-root as the absolute path to the Layer5 repo root (use git rev-parse --show-toplevel from inside the repo). Without it, the script still runs but omits the Five mascot and brand font.
See assets/sample-hero-images/ for visual reference across different category palettes.
Update frontmatter: