The shape should BE the meaning. Not every piece of text needs a box around it.
Shape Selection Table
| Concept Type | Shape | Why |
|---|---|---|
| Labels, descriptions, details | none (free-floating text) | Typography creates hierarchy |
| Section titles, annotations | none (free-floating text) | Font size/weight is enough |
| Markers on a timeline | small ellipse (10-20px) | Visual anchor, not container |
| Start, trigger, input | ellipse | Soft, origin-like |
| End, output, result | ellipse | Completion, destination |
| Decision, condition | diamond | Classic decision symbol |
| Process, action, step | rectangle | Contained action |
| Abstract state, context | overlapping ellipse | Fuzzy, cloud-like |
| Hierarchy node | lines + text (no boxes) | Structure through lines |
Semantic Shapes
Ellipse (Circular/Oval)
Use for:- Start points: User actions, triggers, events that initiate a flow
- End points: Final results, outputs, completions
- Timeline markers: Small dots (10-20px) along a timeline
- Cloud elements: Overlapping ellipses for abstract context
- Soft, approachable (no hard edges)
- Implies flow and continuity
- Visually distinct from process boxes
- Traditional for start/end in flowcharts
Rectangle (Box)
Use for:- Processes: Actions, transformations, operations
- Components: Discrete system components
- Containers: When grouping related elements
- Evidence artifacts: Code snippets, data examples
- Implies containment and structure
- Clear boundaries
- Good for housing text or nested elements
- Traditional for process steps
Diamond
Use for:- Decisions: Yes/no, if/else, conditional branches
- Routing: Logic that determines path
- Validation: Checks that pass or fail
- Universal symbol for decision points
- Visual suggests branching
- Arrows naturally exit from sides/corners
Lines (No Container)
Use for:- Tree structures: Parent-child hierarchies
- Timelines: Sequences of events
- Dividers: Section separators
- Flow spines: Central axis for related elements
- Minimal visual weight
- Emphasizes relationships over elements
- Cleaner than boxes for hierarchies
- More whitespace = better readability
Container vs. Free-Floating Text
Not every piece of text needs a shape around it. Default to free-floating text. Add containers only when they serve a purpose.Use a Container When…
Focal Point
It’s the main subject of a section and needs emphasis
Grouping
It needs visual grouping with other elements inside it
Connection Point
Arrows need to connect to it (requires binding)
Semantic Meaning
The shape itself carries meaning (decision diamond, start ellipse)
System Entity
It represents a distinct “thing” in the system (component, service, database)
Use Free-Floating Text When…
Labels
It’s a label or description of something else
Supporting Detail
It’s metadata, annotations, or clarifying information
Descriptions
It describes something nearby but isn’t the thing itself
Titles
Typography alone creates sufficient hierarchy
Hierarchy
It’s a section title, subtitle, or heading
The Container Test
For each boxed element, ask:Typography as Hierarchy
Use font size, weight, and color to create visual hierarchy without boxes.Font Size Hierarchy
| Purpose | Font Size | Use |
|---|---|---|
| Main title | 28-32px | Diagram title or hero section label |
| Section headers | 20-24px | Major section names |
| Subsection headers | 16-18px | Sub-section labels |
| Body text | 14-16px | Primary content, labels |
| Details/metadata | 10-12px | Annotations, fine print |
Example: Section Title Without Container
Bad:Small Markers Instead of Shapes
Instead of full shapes, use small dots (10-20px ellipses) as:Timeline Markers
Bullet Points
Connection Nodes
Visual Anchors
Small shape + nearby text creates visual relationship without heavy containerSpecial Case: Evidence Artifacts
For code snippets and data examples in technical diagrams: Always use a container (rectangle) because:- Groups multiple lines of code/data together
- Creates clear boundaries for technical content
- Differentiates examples from explanatory text
- Allows for background color to improve readability
Color Follows Semantics
Shapes aren’t just geometric—they carry semantic meaning through color.All color choices must come from
references/color-palette.md. Each semantic purpose (start, end, decision, AI, error, etc.) has a specific fill/stroke pair.Semantic Color Mapping
| Semantic Purpose | Fill Color | Stroke Color |
|---|---|---|
| Start/Trigger | Light blue | Darker blue |
| End/Result | Light green | Darker green |
| Decision | Light yellow | Darker yellow/orange |
| Process | Neutral light | Neutral dark |
| Error/Warning | Light red | Darker red |
| AI/Automated | Light purple | Darker purple |
Shape Combinations
Complex diagrams combine multiple shape types:Example: User Authentication Flow
- Ellipse: “User enters credentials” (start trigger)
- Rectangle: “Validate credentials” (process)
- Diamond: “Valid?” (decision)
- Rectangle: “Generate token” (process)
- Ellipse: “Authenticated” (end result)
Example: Data Pipeline
- Ellipse: Raw data source (input)
- Rectangle: Parser (process)
- Rectangle: Validator (process)
- Diamond: Valid? (decision)
- Rectangle: Transformer (process)
- Ellipse: Structured output (result)
Anti-Patterns
Everything in Rectangles
Bad:Shapes Without Semantic Meaning
Bad: Using ellipse for a process step (should be rectangle) Bad: Using rectangle for a start trigger (should be ellipse) Good: Shape matches semantic purpose from the table aboveDecorative Containers
Bad: Box around text just to “make it look designed” Good: Container serves a purpose (grouping, connection, semantic meaning)Quick Reference
When to use NO container
When to use NO container
- Labels and descriptions
- Section titles and headers
- Annotations and metadata
- Supporting details
- Any text where typography alone creates hierarchy
When to use ELLIPSE
When to use ELLIPSE
- Start triggers and inputs
- End results and outputs
- Timeline markers (small, 10-20px)
- Cloud elements (overlapping, for abstract context)
When to use RECTANGLE
When to use RECTANGLE
- Process steps and actions
- System components
- Evidence artifacts (code, data)
- Grouping containers
When to use DIAMOND
When to use DIAMOND
- Decisions (yes/no, if/else)
- Routing logic
- Validation checks
When to use LINES
When to use LINES
- Tree hierarchies
- Timelines
- Section dividers
- Flow spines