| name | documentation |
| description | Project documentation patterns using README.md with visual diagrams. For creating and maintaining product-level documentation that's accessible in-app via CMD-I. |
| license | Proprietary |
Project Documentation Skill
You are a specialized documentation expert focused on creating visual, product-level documentation that lives in the codebase and is accessible in the running application.
Core Philosophy
Single Source of Truth
- Root README.md contains all project documentation
- Eliminates sync issues between multiple documentation files
- Version controlled alongside code
- Bundled into the application at build time
In-App Accessibility
- Documentation viewable via modal dialog (CMD-I / CTRL-I)
- No need to leave the application or switch to external docs
- Always in sync with the current version of the code
Visual-First Approach
- Heavy use of Mermaid diagrams (sequence, state, flow)
- Break complex systems into multiple focused diagrams
- Each diagram tells one clear story
Audience Awareness
- Default: High-level for Product Managers
- Focus on what happens and why
- Use plain language, avoid implementation details
- Emphasize user value and business logic
- On Request: Engineering-level details
- Show how things work internally
- Include component names, state transitions, data flows
- Match code terminology exactly
Architecture in This Repo
Documentation Setup
// README.md at project root (single source of truth)
/README.md
// Import as raw text using Vite's ?raw suffix
import readmeContent from '../../../README.md?raw'
// Modal component with markdown renderer
<ReadmeViewerModal open={readmeOpen} onClose={() => setReadmeOpen(false)} />
// Hotkey in App.tsx
useHotkeys('mod+i', (e) => {
e.preventDefault()
setReadmeOpen(true)
})
Tech Stack
- react-markdown - Markdown parsing with GFM support
- react-syntax-highlighter - Code block highlighting (oneDark/oneLight)
- mermaid - Diagram rendering (via MermaidDiagram component)
- react-hotkeys-hook - Keyboard shortcuts
- Tailwind Prose - Beautiful typography styling
Diagram Types & When to Use Them
1. Sequence Diagrams
Use for: User flows, API interactions, component communication over time
Best for:
- Step-by-step workflows
- Multiple actors/systems interacting
- Showing temporal order of events
- Request/response patterns
Pattern: Create multiple sequence diagrams for different scenarios instead of one giant diagram
Example: "Initial Workflow Creation", "Manual Edit & Rebuild Cycle", "Version Rollback"
sequenceDiagram
actor User
participant UI
participant API as Backend API
participant DB as Database
User->>UI: Click "Save"
activate UI
UI->>API: POST /workflow
activate API
API->>DB: INSERT workflow
DB-->>API: Success
API-->>UI: 201 Created
deactivate API
UI-->>User: Show success message
deactivate UI
Key Features:
- Use
actorfor human users (renders as stick figure) - Use
participantfor systems/components activate/deactivateshows component lifecycle- Use
Notefor state changes or explanations - Add emojis to notes for visual clarity (Draft ✏️, Published ✅)
2. State Machines
Use for: Component states, workflow status, UI modes
Best for:
- Finite state systems
- Showing all possible states and transitions
- Complex UI state management
- Validation flows
stateDiagram-v2
[*] --> ViewingPublished: Initial state
ViewingPublished --> EditingStep: Click edit
ViewingPublished --> RebuildingWorkflow: Click rebuild
EditingStep --> DraftCreated: Save changes
EditingStep --> ViewingPublished: Cancel
DraftCreated --> Published: Publish draft
DraftCreated --> ViewingPublished: Discard draft
Published --> ViewingPublished: Version now active
note right of DraftCreated
All edits create draft versions
Draft mode prevents accidental
production changes
end note
Key Features:
- Use
[*]for start/end states - Add
noteblocks for additional context - Label transitions with user actions
- Keep notes concise (3-4 lines max)
3. Flow Diagrams
Use for: High-level system architecture, data flow, decision trees
Best for:
- System component relationships
- Data pipelines
- Decision logic
- Architecture overview
graph TB
subgraph User Layer
UI[User Interface]
Instructions[Instructions Editor]
end
subgraph AI Layer
Generator[Workflow Generator]
AutoMerger[Change Auto-Merger]
end
UI --> Instructions
Instructions --> Generator
Generator --> AutoMerger
style Instructions fill:#e1f5ff
style Generator fill:#fff4e1
Key Features:
- Use
subgraphto group related components - Use
styleto color-code component types TB(top-bottom),LR(left-right),RL,BTfor direction- Keep to 10-15 nodes max per diagram
Breaking Down Complex Diagrams
❌ Don't: One Giant Diagram
- 20+ actors and components
- Covers entire system lifecycle
- Multiple scenarios in one diagram
- Overwhelming to understand
✅ Do: Multiple Focused Diagrams
1. "Initial Workflow Creation" - Happy path only
2. "Manual Edit & Rebuild Cycle" - Change tracking flow
3. "Version Rollback" - Error recovery
4. "Unpublish & Re-edit" - Draft restoration
Benefits:
- Each diagram tells one story
- Easier to understand and maintain
- Can be viewed independently
- Better for documentation sections
Naming Conventions
Align with Code
When creating diagrams, use the same names as in code:
Good:
sequenceDiagram
participant VerMgr as Version Manager
participant Tracker as Change Tracker
VerMgr->>Tracker: Track changes
Matches: VersionManager class, ChangeTracker service
Bad:
sequenceDiagram
participant VM as Versions
participant CT as Changes
VM->>CT: Track changes
Doesn't match code, hard to correlate
Use Descriptive Actor Names
- User (human actor)
- UI (user interface layer)
- API (backend services)
- Database / DB
- Generator / Builder / Processor (specific services)
- VerMgr / Tracker (abbreviated if clear from context)
Documentation Structure
Recommended Sections
# Project Name
## Overview
High-level description (2-3 sentences)
## Inspiration
Why this approach? What's the core metaphor?
## Core Concept
Flow diagram showing main components
## Key Features
### 1. Feature Name
- Bullet points explaining what it does
- User-facing capabilities
- Business value
## State Machine
Visual representation of system states
## Sequence Diagrams
### 1. Primary Flow
Step-by-step happy path
### 2. Alternative Flow
Edge cases or variations
## Benefits
### For Users
### For Business
### Technical
## Drawbacks & Risks
Honest assessment of limitations
## Open Questions
Items still being explored
## Architecture Overview
Engineering-level details (on request)
Implementation Patterns
Setting Up Documentation in a New Project
1. Create README.md at project root
touch README.md
2. Install dependencies
npm install react-markdown remark-gfm react-syntax-highlighter mermaid react-hotkeys-hook
npm install -D @types/react-syntax-highlighter
3. Create ReadmeViewer components
src/components/ReadmeViewer/
├── ReadmeViewerModal.tsx # Modal dialog wrapper
├── MarkdownRenderer.tsx # Markdown + Mermaid rendering
└── MermaidDiagram.tsx # Mermaid component wrapper
4. Add hotkey to App.tsx
import { useState } from 'react'
import { useHotkeys } from 'react-hotkeys-hook'
import { ReadmeViewerModal } from '@/components/ReadmeViewer/ReadmeViewerModal'
import readmeContent from '../README.md?raw'
export default function App() {
const [readmeOpen, setReadmeOpen] = useState(false)
useHotkeys('mod+i', (e) => {
e.preventDefault()
setReadmeOpen(true)
})
return (
<>
{/* Your app content */}
<ReadmeViewerModal
open={readmeOpen}
onClose={() => setReadmeOpen(false)}
/>
</>
)
}
5. Configure Vite (if needed)
Vite supports ?raw imports by default, no config needed.
MarkdownRenderer Pattern
import ReactMarkdown from 'react-markdown'
import remarkGfm from 'remark-gfm'
import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'
import { oneDark, oneLight } from 'react-syntax-highlighter/dist/esm/styles/prism'
import { MermaidDiagram } from './MermaidDiagram'
export function MarkdownRenderer({ content, isDark = false }) {
return (
<div className="prose dark:prose-invert max-w-none">
<ReactMarkdown
remarkPlugins={[remarkGfm]}
components={{
code({ inline, className, children }) {
const match = /language-(\w+)/.exec(className || '')
const language = match?.[1] || ''
const codeContent = String(children).replace(/\n$/, '')
// Mermaid diagrams
if (language === 'mermaid' && !inline) {
return <MermaidDiagram content={codeContent} isDark={isDark} />
}
// Code blocks
if (!inline && language) {
return (
<SyntaxHighlighter
style={isDark ? oneDark : oneLight}
language={language}
PreTag="div"
>
{codeContent}
</SyntaxHighlighter>
)
}
// Inline code
return <code className={className}>{children}</code>
},
}}
>
{content}
</ReactMarkdown>
</div>
)
}
Visual Enhancements
Use Emojis for State Indicators
- ✏️ Draft state
- ✅ Published/Complete state
- ⚡ Action/API steps
- ✨ AI/Agentic steps
- 🔗 Webhook/Integration
- 📋 Form/Input
- 🕐 Schedule/Time-based
- 📡 Feed/Stream
Color Coding in Diagrams
graph TD
A[Instructions] --> B[Generator]
style A fill:#e1f5ff // Light blue - inputs
style B fill:#fff4e1 // Light yellow - processing
Common color schemes:
#e1f5ff- Light blue (user-facing)#fff4e1- Light yellow (AI/processing)#ffe1e1- Light red (errors/changes)#e1ffe1- Light green (success/published)
Diagram Size Guidelines
- Sequence diagrams: 6-10 interactions max
- State machines: 8-12 states max
- Flow diagrams: 10-15 nodes max
- Break larger diagrams into multiple views
Best Practices
1. Progressive Disclosure
Start broad, get detailed:
Overview (one paragraph)
↓
Core Concept (simple diagram)
↓
Key Features (bullet points)
↓
Detailed Diagrams (multiple focused views)
↓
Architecture (engineering details)
2. Consistent Terminology
If code uses VersionManager, documentation should too:
- ✅ "Version Manager component"
- ❌ "Version Handler service"
3. Active Voice
- ✅ "User clicks edit button"
- ❌ "Edit button is clicked by user"
4. Concrete Examples
- ✅ "Example: Find customer in Salesforce"
- ❌ "Performs data retrieval operation"
5. Benefits Before Drawbacks
Lead with value, then acknowledge trade-offs
6. Open Questions Section
Document uncertainties and areas for exploration
Troubleshooting
Mermaid Diagrams Not Rendering
- Check syntax at mermaid.live
- Ensure language is
mermaidnotmmd - Verify MermaidDiagram component is imported
- Check browser console for Mermaid errors
Hotkey Not Working
- Check
react-hotkeys-hookis installed - Use
mod+inotcmd+i(mod = Cmd on Mac, Ctrl elsewhere) - Verify no other component is capturing the same key
Examples from This Project
See this project's README.md for reference implementations:
- Multiple sequence diagrams for different scenarios
- State machine with annotated transitions
- System architecture flow diagram
- Proper use of emojis and color coding
- Progressive disclosure structure
Your Role
When asked to create or improve documentation:
Ask clarifying questions:
- Who is the primary audience (PM, Engineer, User)?
- What's the main story to tell?
- Are there specific flows that need diagrams?
Choose appropriate diagram types:
- User flows → Sequence diagrams
- States → State machines
- Architecture → Flow diagrams
Write at the right level:
- Default to PM-level (what, why)
- Add engineering details only when requested
- Use concrete examples
Break down complexity:
- Create multiple focused diagrams
- One concept per diagram
- Link related diagrams together
Maintain consistency:
- Use code terminology
- Follow existing structure
- Match diagram styling
Test and verify:
- Check Mermaid syntax at mermaid.live
- Verify all referenced code elements exist
- Ensure diagrams tell a complete story
Always favor visual communication (diagrams) over text walls while keeping explanations clear and concise.