Back to posts

Style Guide-Driven Development: Documentation That Lives in the Code

Stop writing documentation that lies. Build living style guides with Storybook where docs update automatically with code. Includes setup, MDX, addons, and CI deployment.

TS
Thiago Saraiva
7 min read

Style Guide Development

Style Guide-Driven Development: Documentation That Lives in the Code

"It seems that nobody sees value in documentation until a key team member is about to leave — then it's 'stop everything and document everything'."

Sound familiar? The problem isn't lack of will. It's that traditional documentation is always outdated.

The solution: documentation that lives alongside the code.

The Problem with Separate Documentation

Documentation in Word/Confluence/Notion has a fundamental problem: it exists separate from the code.

Code changes → Documentation stays the same → Documentation lies

Result:

  • New devs follow outdated docs
  • Nobody trusts the documentation
  • Nobody updates it (because nobody trusts it)
  • Vicious cycle

The Solution: Documentation as Code

What if documentation was generated from the code?

Code changes → Documentation changes automatically → Documentation always correct

That's what tools like Storybook do.

What is Storybook?

Storybook is a development environment for UI components. But it's much more than that:

  • Workshop: Develop components in isolation
  • Catalog: Browse all project components
  • Documentation: See props, variations, examples
  • Playground: Test interactively
  • Testing: Visual regression, accessibility, interactions

Installation

Basic Structure

src/
  components/
    Button/
      Button.tsx
      Button.stories.tsx    ← Stories here
      Button.test.tsx
      Button.module.css

First Story

Rich Documentation with MDX

MDX combines Markdown with JSX. Perfect for docs:

Button

Buttons are used for primary and secondary actions in the interface.

When to use

  • ✅ Submit forms
  • ✅ Primary page actions
  • ✅ CTAs
  • ❌ Navigation (use links)

Variants

Primary

Use for the main page action. There should be only one primary button per screen.

<Canvas of={ButtonStories.Primary} />

Secondary

For secondary actions or cancellation.

<Canvas of={ButtonStories.Secondary} />

Props

<Controls />

Accessibility

  • Always include descriptive text
  • Use aria-label for icon-only buttons
  • Ensure minimum contrast of 4.5:1

Code

Organizing the Style Guide

Recommended Structure

└── Stories
    ├── Foundations/
    │   ├── Colors
    │   ├── Typography  
    │   ├── Spacing
    │   ├── Icons
    │   └── Grid
    ├── Components/
    │   ├── Button
    │   ├── Input
    │   ├── Card
    │   ├── Modal
    │   └── ...
    ├── Patterns/
    │   ├── Forms
    │   ├── Navigation
    │   └── Data Display
    └── Pages/
        ├── Home
        ├── Dashboard
        └── Settings

Documenting Tokens

Essential Addons

Storybook has a rich addon ecosystem:

Controls

Edit props interactively (included by default).

Actions

See events fired by the component.

Viewport

Test responsiveness at different sizes.

A11y

Automatic accessibility checking.

Docs

Automatic documentation based on props (included).

Interactions

Test interactions within stories.

Publishing the Style Guide

Static Build

Hosting Options

PlatformPros
ChromaticIntegrated, visual review
Vercel/NetlifyFree, easy
GitHub PagesFree, repo-integrated
S3/CDNFull control

Automatic Deploy (GitHub Actions)

Integrating with Design

Figma Integration

Synchronized Design Tokens

Use tools like Style Dictionary or Tokens Studio to sync tokens between Figma and code.

Keeping the Style Guide Alive

Team Rules

  1. No component without story — PR not approved without it
  2. Docs alongside code — Same branch, same PR
  3. Review includes Storybook — Link to deploy preview in PR
  4. Style guide is source of truth — If it's not there, it doesn't exist

Component Checklist

Conclusion

A style guide isn't "nice to have" — it's essential infrastructure.

With Storybook:

  • Documentation is always up to date
  • Developers can experiment without fear
  • Designers see what was actually implemented
  • QA has a definitive reference
  • New members onboard quickly

The setup cost pays for itself in the first month of the project.