
documentation
by toddmoy
SKILL.md
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.
Score
Total Score
Based on repository quality metrics
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新がある
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
Reviews
Reviews coming soon