tddworks/claude-skills/domain-design

Trust tier 2
  • community
LLM review pending
Source check pending

Checking that the SKILL.md file is still in the repository.

Visualize business domains as standalone HTML + inline-SVG artifacts using an opinionated editorial design system. Ships six domain-modelling types — Aggregate, Context Map, Event Storm, Context Canvas, Ubiquitous Language glossary, and Domain Model — for exploring DDD designs with stakeholders, capturing decisions from event-storming sessions, or documenting a bounded context in a repo. Use this skill whenever the user wants to sketch, explore, or document a business domain — triggered by mentions of DDD, domain-driven design, bounded contexts, aggregates, event storming, ubiquitous language, context mapping, or any request to "visualize the domain", "draw the model", "map the contexts", "show the aggregate", or "help me think through the business". Shares a skinnable style guide with diagram-design so technical and domain diagrams produced for the same project look like siblings.

Install

npx vskill@latest install tddworks/claude-skills/domain-design

SKILL.md

Domain Design

Generate domain-modelling artifacts as self-contained HTML files with inline SVG and CSS. One opinionated editorial design system, a first-run style-guide gate, six diagram types purpose-built for Domain-Driven Design conversations, and a taste gate that keeps output honest.

What this skill is for. Helping a user think through and document their business domain: what the aggregates are, where the bounded contexts sit, which events move through the system, which terms live in the ubiquitous language. It is a thinking and communication tool — every output is meant to be read by a human stakeholder, not executed.

What it is not. Not an architecture or technical diagram skill — reach for diagram-design if the user wants sequence diagrams, layered architecture, ER, flowcharts, or any of the 13 technical types there. These two skills share a style guide so they render as siblings when used in the same project.


0. First-time setup — style guide gate

Before generating your first domain artifact in a new project, verify the style guide has been customized.

Open `references/style-guide.md` and check the default tokens. If they're still the shipped defaults (paper #faf7f2, ink #1c1917, accent #b5523a rust), pause and ask the user:

"This is your first domain-design artifact in this project. The style guide is still at the default (neutral stone + rust). Do you want to customize it to match your brand first? Options: (a) run onboarding — I'll pull colors and fonts from your website, (b) paste your tokens manually, (c) proceed with the default for now."

Then branch:

  • (a) → follow `references/onboarding.md` to fetch the site, extract palette + fonts, propose a diff, and write style-guide.md.
  • (b) → accept the user's tokens and write them into style-guide.md under a new "Custom tokens" section.
  • (c) → proceed; optionally remind the user they can run onboarding later.

If diagram-design has already been onboarded in this project, style-guide.md will already be branded — detect this and skip the gate. The two skills intentionally share the same skin.


1. Philosophy

The domain is the thing. Everything else is scaffolding.

A good domain artifact does three jobs at once: it forces you to name things, it surfaces what you don't yet understand, and it leaves a trace a non-technical stakeholder can read. Anything that doesn't serve one of those jobs is clutter.

Applied to this skill:

  • Use the user's words, not yours. If the user says "subscription", don't rename it "plan". Ubiquitous language is load-bearing — respect it. If the term is ambiguous, stop and ask.
  • Names before shapes. The hardest part of domain modelling is naming. Resist the urge to draw 20 boxes and call them Order1, Order2, OrderItem. If you can't name it, don't box it.
  • One concept, one box. Two boxes that always move together are one aggregate. Two value objects that share every field are one value object.
  • Coral is editorial, not a flag. 1–2 focal elements per diagram — the aggregate root, the critical event, the core domain. Using it on 5 boxes erases the signal.
  • Density 4/10. If it's over 9 boxes, it's probably two diagrams. Overview + detail, not one big chart.

The diagram is done when nothing can be removed.


2. When to use

Use when a reader will learn more about the business from a visual than from prose.

SituationUse
"Help me think through the X domain"Event Storm to discover, Domain Model to structure
"What aggregates do we have here?"Aggregate per root + Domain Model overview
"How do teams/systems relate?"Context Map
"Summarize this bounded context"Context Canvas
"I keep confusing these terms"Ubiquitous Language glossary
"Document the rules for this aggregate"Aggregate with invariants band

Don't use for:

  • Technical architecture, sequence, ER, state machines, flowcharts → `diagram-design`.
  • UI wireframes → ios-ux-prototype / app-design-concept.
  • Runtime flow of code (not business flow) → diagram-design sequence/architecture.
  • "Just a list of terms with no structure" → write a markdown table; a diagram adds no value.

First question to answer before drawing anything: Would the reader learn more from this visual than from a short prose paragraph, a markdown table, or a bullet list? If no — don't draw.


3. Diagram types

Selection guide
If you're showing…UseReference
One aggregate's structure (root + entities + value objects + invariants)Aggregatetype-aggregate.md
Multiple bounded contexts + how they integrate (ACL, OHS, shared kernel…)Context Maptype-context-map.md
Discovery: events, commands, policies, read models along a timelineEvent Stormtype-event-storm.md
A single bounded context at a glance (purpose, language, boundaries)Context Canvastype-context-canvas.md
A glossary of domain terms with definitions + aliasesUbiquitous Languagetype-language.md
Several aggregates inside one context + how they relateDomain Modeltype-domain-model.md

Rules of thumb:

  • If a markdown table communicates the same thing, use the table.
  • If two types overlap (domain model + aggregate), produce both: overview first, then one or two aggregate blow-ups.
  • If the user is mid-event-storming, produce an Event Storm first; convert to Aggregate / Domain Model only after stickies stabilize.
  • Don't hybridize grammars — an Event Storm with Context Map boundaries is confusing. Pick a dominant axis.

Always load the relevant `references/type-*.md` before drawing — it contains layout conventions, DDD semantics, anti-patterns, and example files.


4. Universal anti-patterns

These mark low-quality domain artifacts:

Anti-patternWhy it fails
Order, OrderService, OrderManager, OrderRepositoryTechnical names in the domain. Use the business noun and its role (aggregate/VO/entity).
Boxes labelled Entity1, Entity2Means the domain isn't named yet — stop and get names.
Every box the same color and weightErases hierarchy; reader can't find the root.
Coral on every "important" thingCoral is 1–2 editorial accents per diagram, not a signaling system.
Arrows between contexts with no integration pattern labelledContext Map arrows always carry a pattern (ACL, CS, SK, OHS/PL…). Without labels they're decoration.
Aggregate drawn with tightly-coupled children from other rootsCollapse, or draw the other aggregate separately — aggregates can't share entities.
Event Storm with no time axis / random left-right orderEvents have a temporal order. Establish it or the board is noise.
Dark mode + purple/cyan glow"Looks technical" without decisions. Use the editorial skin.
JetBrains Mono everywhereMono is for technical content (types, IDs). Business nouns go in Geist sans.
Ubiquitous language entry that's a definition of the code typeThe glossary exists for business meaning, not type signatures.

Type-specific anti-patterns live in each references/type-*.md.


5. Design system

Skinnable. All colors, typography, and tokens live in `references/style-guide.md` as semantic roles (paper, ink, muted, accent, link, …). This file is shared with diagram-design — a project's technical and domain diagrams render as siblings.

When specs below or in type references mention "ink" / "accent" / "muted", look up the current hex in style-guide.md.

Semantic roles at a glance
RolePurpose
paper, paper-2Page background and container background
inkPrimary text / stroke
muted, softSecondary text, default arrows, sublabels
rule, rule-solidHairline borders
accent, accent-tint1–2 focal elements per diagram
linkExternal relationships, outbound events

Focal rule: accent goes on 1–2 elements max — the aggregate root, the focal event, the core bounded context. Everything else is ink / muted / soft.

Domain-role → treatment

Domain-design extends the node vocabulary with DDD-specific roles. These compose with the base style.

RoleFillStrokeNotes
Aggregate rootaccent-tintaccentFocal. Only one per Aggregate diagram.
EntitywhiteinkHas identity.
Value objectink @ 0.05mutedNo identity, replaced whole.
Domain event#fff4cc (orange-tint)#b5523a thinNoun in past tense.
Command#cfe0ff (link-tint)#2563eb thinVerb in imperative.
Actor / Personawhite, rounded pillsoftUser or external system initiating a command.
Policy / Reaction#e9d5ff (lavender)muted"Whenever X, do Y."
Read modelpaper-2mutedQuery-side projection.
External systemink @ 0.03ink @ 0.30Outside the current context.
Context boundarydashed 6,4accent @ 0.50Wraps a bounded context.
Hotspot / Question#ffd6d6 (pink)#b5523a dashed 4,3Unknown / to-explore marker.

Using these roles consistently across an Event Storm, a Domain Model, and an Aggregate diagram makes them instantly cross-readable.

Typography (summary — full spec in style-guide.md)
  • Title — Instrument Serif, 1.75rem, 400 — H1 only
  • Node name — Geist (sans), 12px, 600 — human-readable nouns (aggregate names, entity names)
  • Ubiquitous term — Geist (sans), 13px, 600, accent — glossary entry headwords
  • Sublabel — Geist Mono, 9px — IDs, types, version numbers
  • Eyebrow / tag — Geist Mono, 7–8px, uppercase, tracked — role tags (AGG ROOT, EVENT, VO)
  • Arrow label — Geist Mono, 8px — integration pattern, cardinality
  • Editorial aside — Instrument Serif italic, 14px — callouts only

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 100 of 100Pattern checks on the skill's files.
  • Model reviewNot runA model review is scheduled for the next rescan.

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
36
Repository forks
6
7-day trend score
18

Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 10 Jul 2026, 3 months ago.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/tddworks/claude-skills/domain-design/badge)](https://verified-skill.com/skills/tddworks/claude-skills/domain-design)

Something wrong with this skill or its page? Tell us.