Editorial blog diagrams β 27 types (pyramid, quadrant, flowchart, timeline, Venn, layers, process). Two brand skins: jjude.com and ctofieldnotes.com. Self-contained HTML + SVG.
Create editorial-quality diagrams for blog posts as self-contained HTML files with inline SVG and CSS. Two brand skins β jjude.com and CTO Field Notes β each with their own palette, typography, and visual identity.
Based on cathrynlavery/diagram-design (MIT), adapted for Hermes.
Use for blog post illustrations when a reader will learn more from a visual than from prose, a table, or bullet points. The 27 diagram types cover editorial, strategy, process, and conceptual illustrations β not cloud architecture (use architecture-diagram for that).
architecture-diagramexcalidrawBefore drawing, ask: Would the reader learn more from this than from a well-written paragraph? If no, don't draw.
| Brand | Skin file | Palette feel |
|---|---|---|
| jjude.com | references/style-guide-jjude.md |
Near-white, dark navy ink, blue accent, Gentium Book Basic |
| CTO Field Notes | references/style-guide-ctofn.md |
White, charcoal ink, indigo accent, Spectral |
Load the appropriate style guide before generating. Every token β paper, ink, muted, accent, rule, font stacks β comes from that file.
| If you're showing⦠| Use | Reference |
|---|---|---|
| Ranked hierarchy or conversion drop-off | Pyramid / funnel | references/type-pyramid.md |
| Two-axis positioning / prioritization | Quadrant | references/type-quadrant.md |
| Decision logic with branches | Flowchart | references/type-flowchart.md |
| Overlap between sets | Venn | references/type-venn.md |
| Events positioned in time | Timeline | references/type-timeline.md |
| Stacked abstraction levels | Layer stack | references/type-layers.md |
| Hierarchy through containment | Nested | references/type-nested.md |
| Parent β children relationships | Tree | references/type-tree.md |
| Cross-functional process with handoffs | Swimlane | references/type-swimlane.md |
| Multi-actor sequential process | Process | references/type-process.md |
| Reinforcing cycle / flywheel | Loop | references/type-loop.md |
| Components + connections | Architecture | references/type-architecture.md |
| Time-ordered messages between actors | Sequence | references/type-sequence.md |
| States + transitions | State machine | references/type-state.md |
| Entities + fields + relationships | ER / data model | references/type-er.md |
| Multiple entities across criteria (3-5 axes) | Radar / Spider | references/type-radar.md |
| Bar/line/scatter/Gantt charts | Chart types | references/type-bar.md, type-line.md, type-scatter.md, type-gantt.md |
| End-to-end data stack | High-Level | references/type-high-level.md |
| Data platform topology | Data platform | references/type-data-flow.md, type-dp-integration.md, type-dp-security-matrix.md |
| Multi-tier storage | Medallion | references/type-medallion.md |
| Legacy IT landscape | IT current-state | references/type-it-state.md |
references/type-*.md for the chosen type before drawing. It contains layout conventions, anti-patterns, and specific coordinates.
| Type | Fill | Stroke |
|---|---|---|
| Focal (1β2 max) | accent-tint |
accent |
| Backend / API / Step | white | ink |
| Store / State | ink @ 0.05 |
muted |
| External / Cloud | ink @ 0.03 |
ink @ 0.30 |
| Input / User | muted @ 0.10 |
soft |
| Optional / Async | ink @ 0.02 |
ink @ 0.20 dashed 4,3 |
| Security / Boundary | accent @ 0.05 |
accent @ 0.50 dashed 4,4 |
Clean paper fill β no dot pattern by default:
<rect width="100%" height="100%" fill="#[paper]"/>
Dot pattern is opt-in for hero diagrams β see references/style-guide-*.md for paper color.
<marker id="arrow" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto">
<polygon points="0 0, 8 3, 0 6" fill="#[muted]"/>
</marker>
<marker id="arrow-accent" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto">
<polygon points="0 0, 8 3, 0 6" fill="#[accent]"/>
</marker>
<marker id="arrow-link" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto">
<polygon points="0 0, 8 3, 0 6" fill="#[link]"/>
</marker>
Draw arrows before boxes so z-order puts lines behind nodes.
1. Rounded right-angle elbows (r=8) only. Diagonal lines only when endpoints share an axis.
2. Arrow labels require 6β10px gap above connector + opaque mask rect.
3. No overlapping connectors. Crossings use the bridge/hop primitive.
4. Fan attach points β β₯12px apart on same box edge.
5. No connector behind non-endpoint box unless geometrically unavoidable (then dashed).
<!-- Opaque paper mask -->
<rect x="X" y="Y" width="W" height="H" rx="6" fill="#[paper]"/>
<!-- Styled box -->
<rect x="X" y="Y" width="W" height="H" rx="6" fill="[FILL]" stroke="[STROKE]" stroke-width="1"/>
<!-- Node name (sans font from skin) -->
<text x="CX" y="CY+2" fill="#[ink]" font-size="12" font-weight="600"
font-family="'[font-sans]', sans-serif" text-anchor="middle">Node Name</text>
<!-- Technical sublabel (mono font from skin) -->
<text x="CX" y="CY+18" fill="#[muted]" font-size="9"
font-family="'[font-mono]', monospace" text-anchor="middle">sublabel</text>
Place after all nodes, with hairline separator. Expand viewBox height by ~60px.
All font sizes, padding, node dimensions, gaps, x/y coords divisible by 4. Exempt: stroke widths (0.8, 1, 1.2), opacities.
| Category | Allowed values |
|---|---|
| Font sizes | 8, 12, 16, 20, 24, 28, 32, 40 |
| Node width/height | 80, 96, 112, 120, 128, 140, 144, 160, 180, 200, 240, 320 |
| Gap between nodes | 20, 24, 32, 40, 48 |
| Border radius | 4, 6, 8 |
1. Header β eyebrow (mono, tracked), title (serif), optional subtitle
2. SVG diagram β clean, borderless, sits directly on page paper
3. Summary cards (full variant only) β 2-3 col grid, varied widths, no shadows
4. Footer β colophon in mono, muted, hairline top border
Always produce a single self-contained .html file:
Save to a user-specified path. Two output formats:
The diagram fills the entire canvas. Use for in-post illustrations.
wiki/produce/hermes/blogs/drafts/
βββ [post-slug]/ β diagrams tied to a specific draft
β βββ draft.md
β βββ diagram-[name].html β vector source, re-editable
β βββ diagram-[name].png β 2x raster for blog CDN
βββ examples/ β reference/examples (browseable)
β βββ jjude-content-pyramid.html + .png
β βββ ctofn-tech-adoption.html + .png
β βββ jjude-atomic-card.html β vertical 1200Γ1200, social media
β βββ jjude-blog-card.html β horizontal 1200Γ628, featured image
β βββ ctofn-blog-card.html
βββ standalone/ β diagrams without an associated post
βββ [topic-slug].html + .png
A horizontal two-pane card for blog post featured images and social sharing.
| Property | Value |
|---|---|
| Dimensions | 1200Γ628 (landscape, OG image ratio) |
| Left pane | Diagram SVG (~54% width, 648px) |
| Right pane | Title + accent bar + excerpt (~46%) |
| Footer | Site brand + URL |
| Templates | templates/blog-card-jjude.html, templates/blog-card-ctofn.html |
the diagram for the left pane first (any of the 27 types), then embed it into the
blog card template. The right pane is filled from the post's title and excerpt.
Workflow for blog cards:1. Load the blog card template for the brand: templates/blog-card-{jjude|ctofn}.html
2. Generate the diagram for the left pane (pick type β load references/type-*.md)
3. Replace the placeholder SVG in the template with the generated diagram
4. Fill in <h2> (post title) and <p class="excerpt"> (1β2 sentence takeaway)
5. Export PNG via Playwright
Example outputs:assets/example-blog-card-jjude.png β jjude skin (near-white, navy, blue accent)assets/example-blog-card-ctofn.png β CTO Field Notes skin (white, charcoal, indigo)A vertical square card for social media posts and atomic essays.
| Property | Value |
|---|---|
| Dimensions | 1200Γ1200 (square) |
| Top zone | Diagram / illustration (~53%) |
| Bottom zone | Title + excerpt (~47%) |
| Templates | templates/atomic-card-jjude.html, templates/atomic-card-ctofn.html |
After generating the HTML, also export a 2x PNG via Playwright:
/opt/data/.venv/bin/python3 /opt/data/tools/export_png.py <diagram.html> <diagram.png> 2
references/type-*.md?1. Ask which brand skin to use (jjude.com or CTO Field Notes)
2. Load the matching references/style-guide-*.md
3. Choose the diagram type β load the matching references/type-*.md
4. Generate the HTML following all rules above
5. Run the pre-output checklist
6. Save to user-specified path