Blog (Jekyll) — AGENTS.md
Agent-agnostic guidance for working in the blog (Jekyll) project. This file is the standalone guidance for this project; it does not assume any relationship to other projects.
Build and Configuration Instructions
Stack
- Static site generator: Jekyll (Ruby).
- Content formats used today: Markdown only — for both published posts (
_posts/*.md) and drafts (_drafts/*.md). - Data-driven settings:
_config.yml,_data/*.yml.
Prerequisites
- Ruby (>= 3.0 recommended) and Bundler installed.
- On Windows, use RubyInstaller with MSYS2. Ensure
ridk installis run to provision dev tools.
First-time setup
1) Install gems
- bundle install
2) Serve locally with live-reload
- bundle exec jekyll serve --livereload
- Site will be at http://127.0.0.1:4000 (watch console for the exact URL).
3) Building for production
- JEKYLL_ENV=production bundle exec jekyll build (on PowerShell:
$env:JEKYLL_ENV = 'production'; bundle exec jekyll build).
Drafts workflow
Drafts live in _drafts/ (Markdown only). These are NOT published, but Jekyll will render them in dev when using
--drafts.
Preview drafts locally:
bundle exec jekyll serve --drafts(works out of the box with_drafts/).- Alternatively, temporarily move a draft to
_posts/and give it a valid filename/front matter. Revert before committing if not ready.
Content format policy
Markdown-only site: AsciiDoc is not supported in the build. If you have a legacy .adoc draft, convert it to Markdown
before committing. A suggested path: asciidoctor -b docbook INPUT.adoc then pandoc -f docbook -t gfm -o OUTPUT.md (
verify code blocks and admonitions by hand).
Configuration touchpoints
_config.yml- Site title, baseurl, url, plugins, markdown/asciidoc engines.
_data/authors.yml- Author metadata (Joseph and guests). Ensure slugs used in front matter match entries here.
_data/navigation.yml- Header/footer menus. Update when adding new sections.
_data/variables.ymland_data/locale.yml- Site-wide strings and localization knobs.
_data/licenses.yml- Per-post license choices if used in front matter.
_includes/**- Includes and assets (favicons, SVG logo). Keep favicon paths intact if the theme / layout expects them.
Publishing
Standard GitHub Pages/Jekyll workflow: push to the default branch; GitHub Pages builds and serves.
If building locally for verification, ensure the same gems as production are used; avoid system-wide Jekyll.
Writing Style Guidelines (Joseph Verron, software craftsmanship; docs-as-code; Office‑stamper maintainer)
Voice and tone
Authoritative but practical; prefer code-backed explanations, short examples, and links to canonical sources.
Bias toward “docs as code” practices: show configuration, scripts, and checklists that readers can copy.
Keep paragraphs short (max 4–5 lines). Use lists for sequences and checklists.
English by default. If bilingual content is added, keep one post per language; do not mix.
Post types and expectations
1) Monthly Commit (project maintenance journal) - Purpose: document a concrete, scoped improvement (e.g., “replace in table cell”, “Java migration”, “custom functions”). - Pattern: - Context (1–2 paragraphs): the problem and why it matters. - Change summary: bullets of significant decisions, trade-offs, and before/after. - Code/core snippets: minimal but runnable or reproducible fragments. - Impact: a measurable outcome (performance, reliability, API clarity). - Next steps: what remains or is intentionally deferred. - Include links to commits/PRs and to the corresponding release notes if applicable.
2) Monthly Topic (deeper practice write-up) - Purpose: craft knowledge on a technique (e.g., template invariants, resolver safety, docs pipeline). - Pattern: thesis → technique taxonomy → worked example(s) → pitfalls → checklist. - Include diagram-as-code snippets if relevant (Mermaid, PlantUML, or AsciiDoc blocks).
3) How-to / Guide (task-focused) - Purpose: walk a reader from problem to solution in reproducible steps. - Pattern: prerequisites → steps (numbered) → verification → troubleshooting. - Provide CLI invocations and exact output fragments; prefer copy-paste friendly blocks.
4) Release Notes for Office‑stamper - Purpose: communicate changes to the small Java library. - Pattern: headline changes → breaking changes (prominent) → migration notes (with code) → deprecations → links to issues/PRs. - Add “Since/Removed/Deprecated” tables for APIs affected. Show a minimal diff or before/after code.
5) Talks / Workshops / Presentations-as-code - Purpose: publish materials and a narrative. - Pattern: abstract → slide deck/source links → demo instructions → references. - Prefer storing code samples in a dedicated repo and linking; keep the post lightweight.
6) Docs-as-Code Practices - Purpose: share pipelines and governance (checklists, CI scripts, conventions). - Pattern: problem framing → policy → implementation (scripts/config) → enforcement (CI) → exceptions.
Style mechanics
- Titles
- Concise, action-oriented. Avoid clickbait.
- Front matter
- Include
title,date,tags(small, consistent set),categories(only one),author: Joseph(matchauthors.yml), andlicenseif applicable. - Code blocks
- Always specify language when possible. Use fenced blocks. Include inputs and outputs for CLI.
- Diagrams
- Prefer diagram-as-code blocks. Host SVG/PNG in-repo if needed; keep sources alongside images.
- Citations
- Link to upstream sources (specs, repos). Use canonical URLs.
Development Information (structure, conventions, styling)
Repository layout essentials
_posts/: only published Markdown with Jekyll-compliant filenames:YYYY-MM-DD-slug.md._drafts/: working area for upcoming posts; Markdown.mdonly. Works withjekyll serve --drafts._data/*.yml: structured data. Keep keys kebab-case or snake_case consistently; avoid spaces._includes/: shared snippets (favicons, SVG). Avoid hardcoding paths in posts.- Root pages:
index.md,about.md,archive.md.
Front matter contract
Minimal set:
layout: article(or site default if set),title: ...,date: YYYY-MM-DD,tags: [a, b],author: Joseph.
Optional: description, image, license, toc: true (if theme supports), permalink for custom URLs.
Keep dates in UTC to avoid ordering surprises in Jekyll.
Filename and slugs
Slug is the dash-separated part after the date. Keep consistent between the filename and front matter permalink when
overridden.
For series, prefix with a common slug stem (e.g., monthly-commit-...).
Images and assets
Prefer an assets/ (or images/) subtree per post: assets/YYYY/MM/slug/ for local images and attachments.
Use web-friendly SVG/PNG. Optimize images before commit. Store diagram sources (.puml, .mmd, .drawio) alongside outputs.
Linking
Use relative links when pointing within the site. For GitHub source, link to specific commits or permalinks, not branches.
Avoid absolute http://localhost: links in committed content.
Graphical styling
Logo SVG lives in _includes/svg/logo.svg; favicons under _includes/head and root favicon*.png/ico plus
browserconfig.xml and ms-icon* variants.
Custom CSS entry point: assets/css/stylesheet.css is linked from _includes/head/favicon.html. Use this file to
define design tokens and light component styling; avoid heavy theme overrides.
Design tokens (CSS variables) currently defined: --cc-primary, --cc-accent, --cc-text, --cc-muted, --cc-bg,
--cc-surface, --cc-border.
- Components styled:
.btn,.btn-primary,.btn-ghost,.tag.cards,.card,.posts-grid,.post-card,.post-meta,.site-header*. - Dark mode: tokens switch via
@media (prefers-color-scheme: dark); surfaces and borders adapt automatically. - Print stylesheet:
@media printhides nav/footer/buttons, removes chrome, and appends URLs to links.
Reusable includes for presentation live under _includes/home/*, _includes/post/*, and _includes/footer/*:
_includes/home/hero.html: top landing hero with CTA._includes/home/cards.html: 3 services cards._includes/footer/custom.html: site footer with quick links and social.
Structured data: _includes/head/structured-data.html injects JSON‑LD (WebSite for general pages, BlogPosting for
posts). It is included from _includes/head/favicon.html so it is available across the site.
Keep palette and typography consistent with the theme. Prefer system font stacks for performance; ensure WCAG AA contrast.
Linting and sanity checks (manual, lightweight)
Run local build before pushing: bundle exec jekyll build.
Validate links with a one-off tool when posts are heavy with references (e.g., htmlproofer or a simple script). Not
enforced here by default.
Adding a new post (checklist)
1) Pick type (see section 2) and draft under _drafts/.
2) Ensure front matter meets the contract; set right date.
3) Add images under assets/YYYY/MM/slug/ if needed; update paths.
4) Run locally; fix build warnings.
5) Move to _posts/ with final filename on publication.
6) If navigation needs an entry, update _data/navigation.yml.
7) If the post relates to Office‑stamper, link to the exact tag/release and migration notes.
Taxonomy
Keep tags small and consistent across posts: docs-as-code, office-stamper, java, templates, testing,
toolchain, ci, diagram-as-code, etc.
Avoid introducing near-duplicates (e.g., doc-as-code vs docs-as-code).
Content previews and screenshots
Prefer textual demonstrations to screenshots. If screenshots are necessary, annotate them and keep them small. Store originals.
Internationalization
_data/locale.yml exists; if you introduce multi-language support, document the pattern (e.g., /fr/ prefix) and
update navigation accordingly.
Operational Notes and Sharp Edges
Markdown-only policy: New content must be .md.
Do not rename _posts/ or _data/ without checking Jekyll expectations and GitHub Pages compatibility.
If adding CI (link check, build), prefer minimal GitHub Actions with ruby/setup-ruby and bundle install --deployment
to mirror production.
Renovate config (renovate.json) exists at root; if adding Ruby dependencies automation, extend it carefully to avoid
surprise PRs.
Example front matter templates
---
layout: article
title: "Monthly Commit — Paragraph Replace API"
date: 2025-10-14
categories: [ office-stamper ]
tags: [ office-stamper, java, api ]
author: Joseph
description: Improving the paragraph replace API to clarify contracts and remove Lombok leftovers.
license: cc-by-4.0
---
---
layout: article
title: "Docs-as-Code — Checklists for Solo Maintainers"
date: 2025-08-21
categories: [ documentation-as-code ]
tags: [ documentation-as-code, governance, ci ]
author: Joseph
toc: true
---
House rules
- Keep this file updated whenever you change build, plugins, or content conventions.
- Prefer small, atomic commits; include a short rationale in commit messages. Link to issues or ADRs if relevant.