concept-diagrams
Generate flat, minimal light/dark-aware SVG diagrams as standalone HTML files, using a unified educational visual language with 9 semantic color ramps, sentence-case typography, and automatic dark mod
Generate flat, minimal light/dark-aware SVG diagrams as standalone HTML files, using a unified educational visual language with 9 semantic color ramps, sentence-case typography, and automatic dark mod
Real data. Real impact.
Emerging
Developers
Per week
Excellent
Skills give you superpowers. Install in 30 seconds.
Generate production-quality SVG diagrams with a unified flat, minimal design system. Output is a single self-contained HTML file that renders identically in any modern browser, with automatic light/dark mode.
Best suited for:
Look elsewhere first for:
architecture-diagram if available)excalidraw if available)If a more specialized skill is available for the subject, prefer that. If none fits, this skill can serve as a general-purpose SVG diagram fallback — the output will carry the clean educational aesthetic described below, which is a reasonable default for almost any subject.
templates/template.html as the wrapper — paste your SVG where the template says <!-- PASTE SVG HERE -->..html file (for example ~/my-diagram.html or ./my-diagram.html).Optional: if the user wants a browsable gallery of multiple diagrams, see "Local Preview Server" at the bottom.
Load the HTML template:
skill_view(name="concept-diagrams", file_path="templates/template.html")
The template embeds the full CSS design system (
c-* color classes, text classes, light/dark variables, arrow marker styles). The SVG you generate relies on these classes being present on the hosting page.
9 color ramps, each with 7 stops. Put the class name on a
<g> or shape element; the template CSS handles both modes.
| Class | 50 (lightest) | 100 | 200 | 400 | 600 | 800 | 900 (darkest) |
|---|---|---|---|---|---|---|---|
| #EEEDFE | #CECBF6 | #AFA9EC | #7F77DD | #534AB7 | #3C3489 | #26215C |
| #E1F5EE | #9FE1CB | #5DCAA5 | #1D9E75 | #0F6E56 | #085041 | #04342C |
| #FAECE7 | #F5C4B3 | #F0997B | #D85A30 | #993C1D | #712B13 | #4A1B0C |
| #FBEAF0 | #F4C0D1 | #ED93B1 | #D4537E | #993556 | #72243E | #4B1528 |
| #F1EFE8 | #D3D1C7 | #B4B2A9 | #888780 | #5F5E5A | #444441 | #2C2C2A |
| #E6F1FB | #B5D4F4 | #85B7EB | #378ADD | #185FA5 | #0C447C | #042C53 |
| #EAF3DE | #C0DD97 | #97C459 | #639922 | #3B6D11 | #27500A | #173404 |
| #FAEEDA | #FAC775 | #EF9F27 | #BA7517 | #854F0B | #633806 | #412402 |
| #FCEBEB | #F7C1C1 | #F09595 | #E24B4A | #A32D2D | #791F1F | #501313 |
Color encodes meaning, not sequence. Never cycle through colors like a rainbow.
c-gray for neutral/structural nodes (start, end, generic steps, users).c-purple, c-teal, c-coral, c-pink for general categories.c-blue, c-green, c-amber, c-red for semantic meaning (info, success, warning, error).Light/dark stop mapping (handled by the template CSS — just use the class):
Only two font sizes. No exceptions.
| Class | Size | Weight | Use |
|---|---|---|---|
| 14px | 500 | Node titles, region labels |
| 12px | 400 | Subtitles, descriptions, arrow labels |
| 14px | 400 | General text |
<text> MUST carry a class (t, ts, or th). No unclassed text.dominant-baseline="central" on all text inside boxes.text-anchor="middle" for centered text in boxes.Width estimation (approx):
box_width >= (char_count × px_per_char) + 48 (24px padding each side)viewBox="0 0 680 H" where H = content height + 40px buffer.rx="8" for nodes, rx="12" for inner containers, rx="16" to rx="20" for outer containers.fill="none". SVG defaults to fill: black otherwise.Include this
<defs> block at the start of every SVG:
<defs> <marker id="arrow" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse"> <path d="M2 1L8 5L2 9" fill="none" stroke="context-stroke" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </marker> </defs>
Use
marker-end="url(#arrow)" on lines. The arrowhead inherits the line color via context-stroke.
The template page provides:
.t, .ts, .th.box, .arr, .leader, .node.c-purple, .c-teal, .c-coral, .c-pink, .c-gray, .c-blue, .c-green, .c-amber, .c-red (all with automatic light/dark mode)You do not need to redefine these — just apply them in your SVG. The template file contains the full CSS definitions.
Every SVG inside the template page starts with this exact structure:
<svg width="100%" viewBox="0 0 680 {HEIGHT}" xmlns="http://www.w3.org/2000/svg"> <defs> <marker id="arrow" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse"> <path d="M2 1L8 5L2 9" fill="none" stroke="context-stroke" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </marker> </defs> <!-- Diagram content here --> </svg>
Replace
{HEIGHT} with the actual computed height (last element bottom + 40px).
Single-line node (44px):
<g class="node c-blue"> <rect x="100" y="20" width="180" height="44" rx="8" stroke-width="0.5"/> <text class="th" x="190" y="42" text-anchor="middle" dominant-baseline="central">Service name</text> </g>
Two-line node (56px):
<g class="node c-teal"> <rect x="100" y="20" width="200" height="56" rx="8" stroke-width="0.5"/> <text class="th" x="200" y="38" text-anchor="middle" dominant-baseline="central">Service name</text> <text class="ts" x="200" y="56" text-anchor="middle" dominant-baseline="central">Short description</text> </g>
Connector (no label):
<line x1="200" y1="76" x2="200" y2="120" class="arr" marker-end="url(#arrow)"/>
Container (dashed or solid):
<g class="c-purple"> <rect x="40" y="92" width="600" height="300" rx="16" stroke-width="0.5"/> <text class="th" x="66" y="116">Container label</text> <text class="ts" x="66" y="134">Subtitle info</text> </g>
Choose the layout that fits the subject:
<path> for curved bodies, <polygon> for tapered shapes, <ellipse>/<circle> for cylindrical parts, nested <rect> for compartments. See references/physical-shape-cookbook.md..data-line, .power-line, .water-pipe, .road). See references/infrastructure-patterns.md.references/dashboard-patterns.md.For physical, infrastructure, and dashboard diagrams, load the matching reference file before generating — each one provides ready-made CSS classes and shape primitives.
Before finalizing any SVG, verify ALL of the following:
<text> has class t, ts, or th.<text> inside a box has dominant-baseline="central".<path> or <line> used as arrow has fill="none".box_width >= (longest_label_chars × 8) + 48 for 14px text.box_width >= (longest_label_chars × 6.5) + 48 for 12px text.c-*) are on <g> or shape elements, never on <path> connectors.<defs> block is present.Write a single
.html file the user can open directly. No server, no dependencies, works offline. Pattern:
# 1. Load the template template = skill_view("concept-diagrams", "templates/template.html") # 2. Fill in title, subtitle, and paste your SVG html = template.replace( "<!-- DIAGRAM TITLE HERE -->", "SN2 reaction mechanism" ).replace( "<!-- OPTIONAL SUBTITLE HERE -->", "Bimolecular nucleophilic substitution" ).replace( "<!-- PASTE SVG HERE -->", svg_content ) # 3. Write to a user-chosen path (or ./ by default) write_file("./sn2-mechanism.html", html)
Tell the user how to open it:
# macOS open ./sn2-mechanism.html # Linux xdg-open ./sn2-mechanism.html
Only use this when the user explicitly wants a browsable gallery of multiple diagrams.
Rules:
127.0.0.1 only. Never 0.0.0.0. Exposing diagrams on all network interfaces is a security hazard on shared networks.Recommended pattern (lets the OS pick a free ephemeral port):
# Put each diagram in its own folder under .diagrams/ mkdir -p .diagrams/sn2-mechanism # ...write .diagrams/sn2-mechanism/index.html... # Serve on loopback only, free port cd .diagrams && python3 -c " import http.server, socketserver with socketserver.TCPServer(('127.0.0.1', 0), http.server.SimpleHTTPRequestHandler) as s: print(f'Serving at http://127.0.0.1:{s.server_address[1]}/') s.serve_forever() " &
If the user insists on a fixed port, use
127.0.0.1:<port> — still never 0.0.0.0. Document how to stop the server (kill %1 or pkill -f "http.server").
The
examples/ directory ships 15 complete, tested diagrams. Browse them for working patterns before writing a new diagram of a similar type:
| File | Type | Demonstrates |
|---|---|---|
| Flowchart | Priority routing with semantic colors |
| Flowchart | Phased workflow, horizontal sub-flows |
| Flowchart | Auth flow with error branches |
| Flowchart | Loop-back arrows, decision branches |
| Sequence | UML sequence diagram style |
| Physical | Paths, polygons, ellipses for realistic shapes |
| Physical cross-section | Underground/above-ground separation, color coding |
| Exploded view | Alternating left/right labels, layered components |
| Floor plan | Walls, doors, proposed changes in dotted red |
| Narrative journey | Winding path, progressive state changes |
| Hardware pipeline | Fan-out, memory hierarchy sidebar |
| Chemistry | Molecules, curved arrows, energy profile |
| Hub-spoke | Semantic line styles per system |
| Multi-stage flow | Voltage hierarchy, flow markers |
| Chart | Grouped bars, dual axis |
Load any example with:
skill_view(name="concept-diagrams", file_path="examples/<filename>")
| User says | Diagram type | Suggested colors |
|---|---|---|
| "show the pipeline" | Flowchart | gray start/end, purple steps, red errors, teal deploy |
| "draw the data flow" | Data pipeline (left-right) | gray sources, purple processing, teal sinks |
| "visualize the system" | Structural (containment) | purple container, teal services, coral data |
| "map the endpoints" | API tree | purple root, one ramp per resource group |
| "show the services" | Microservice topology | gray ingress, teal services, purple bus, coral workers |
| "draw the aircraft/vehicle" | Physical | paths, polygons, ellipses for realistic shapes |
| "smart city / IoT" | Hub-spoke integration | semantic line styles per subsystem |
| "show the dashboard" | UI mockup | dark screen, chart colors: teal, purple, coral for alerts |
| "power grid / electricity" | Multi-stage flow | voltage hierarchy (HV/MV/LV line weights) |
| "wind turbine / turbine" | Physical cross-section | foundation + tower cutaway + nacelle color-coded |
| "journey of X / lifecycle" | Narrative journey | winding path, progressive state changes |
| "layers of X / exploded" | Exploded layer view | vertical stack, alternating labels |
| "CPU / pipeline" | Hardware pipeline | vertical stages, fan-out to execution ports |
| "floor plan / apartment" | Floor plan | walls, doors, proposed changes in dotted red |
| "reaction mechanism" | Chemistry | atoms, bonds, curved arrows, transition state, energy profile |
MIT
mkdir -p ~/.hermes/skills/creative/concept-diagrams && curl -o ~/.hermes/skills/creative/concept-diagrams/SKILL.md https://raw.githubusercontent.com/NousResearch/hermes-agent/main/optional-skills/creative/concept-diagrams/SKILL.md1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
© 2026 Torly.ai. All rights reserved.