<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Atanas Stoyanov</title>
    <description>The latest articles on DEV Community by Atanas Stoyanov (@atanasster).</description>
    <link>https://dev.to/atanasster</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F466452%2F76c372e9-7eef-4e5f-a2f0-350b473c6aa5.jpeg</url>
      <title>DEV Community: Atanas Stoyanov</title>
      <link>https://dev.to/atanasster</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/atanasster"/>
    <language>en</language>
    <item>
      <title>7 Ensemble AI Patterns for Reliable LLM Systems</title>
      <dc:creator>Atanas Stoyanov</dc:creator>
      <pubDate>Sat, 06 Dec 2025 17:20:47 +0000</pubDate>
      <link>https://dev.to/atanasster/7-ensemble-ai-patterns-for-reliable-llm-systems-200l</link>
      <guid>https://dev.to/atanasster/7-ensemble-ai-patterns-for-reliable-llm-systems-200l</guid>
      <description>&lt;h1&gt;
  
  
  Beyond Prompt Engineering: 7 Ensemble AI Patterns for Reliable LLM Systems
&lt;/h1&gt;

&lt;p&gt;_Forget "one prompt to rule them all." The future of robust AI applications lies in multi-model orchestration and ensemble learning.&lt;br&gt;
_&lt;/p&gt;

&lt;p&gt;As developers, we've spent the last two years mastering the art of the perfect prompt. We optimize context windows, chain-of-thought instructions, and few-shot examples. But there's a hard ceiling to what a single model inference can achieve. Even GPT-4o or Claude 3.5 Sonnet have blind spots, hallucinate, or get stuck in local optima.&lt;/p&gt;

&lt;p&gt;In traditional Machine Learning, we solved this decades ago with Ensemble Learning (Random Forests, Gradient Boosting). We didn't try to make one perfect decision tree; we trained many and averaged their wisdom.&lt;/p&gt;

&lt;p&gt;Why aren't we doing this for LLMs?&lt;/p&gt;

&lt;p&gt;At &lt;a href="https://ai-crucible.com" rel="noopener noreferrer"&gt;AI Crucible&lt;/a&gt;, we've formalized 7 architectural patterns for Ensemble AI that treat models not as oracles, but as components in a larger intelligent system.&lt;/p&gt;

&lt;p&gt;Here is a technical breakdown of how these strategies work and how you can think about them from a systems engineering perspective.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Core Concept: Orchestration over Generation
&lt;/h3&gt;

&lt;p&gt;The shift from "Prompt Engineering" to "AI Orchestration" means moving logic out of the prompt and into the control flow. Instead of Input -&amp;gt; Model -&amp;gt; Output, we design systems like Input -&amp;gt; Strategy Layer -&amp;gt; [Model A, Model B, Model C] -&amp;gt; Synthesis Layer -&amp;gt; Output.&lt;/p&gt;

&lt;p&gt;This improves reliability (AEO optimization), reduces hallucination rates, and allows for specialized sub-tasks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pattern 1: Competitive Refinement (Iterative Improvement)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The Pattern&lt;/strong&gt;: Parallel Execution -&amp;gt; Cross-Review -&amp;gt; Self-Correction.&lt;/p&gt;

&lt;p&gt;In this architecture, multiple models (e.g., GPT-4 and Claude 3) generate independent candidate solutions. Then, distinct "Reviewer" steps allow models to critique peer outputs. Finally, models regenerate their answers incorporating the valid feedback.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Developer Analogy&lt;/strong&gt;: Like a Git Pull Request process where code is reviewed and refined before merging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best For&lt;/strong&gt;: Code generation, refactoring, and creative optimization.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pattern 2: Collaborative Synthesis (Map-Reduce)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The Pattern&lt;/strong&gt;: Parallel Generation (Map) -&amp;gt; Aggregation (Reduce).&lt;/p&gt;

&lt;p&gt;We fan-out the prompt to $N$ diverse models to get a wide distribution of perspectives (improving recall). Then, a dedicated "Synthesizer" model acts as a reducer, taking the array of outputs and merging them into a single, comprehensive document (improving precision).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Developer Analogy&lt;/strong&gt;: A Map-Reduce job or scattering microservices to gather data and an API gateway determining the final response.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best For&lt;/strong&gt;: Technical research, requirements gathering, and system design docs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pattern 3: The Expert Panel (Role-Based Routing)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The Pattern&lt;/strong&gt;: Static Analysis -&amp;gt; Role Assignment -&amp;gt; Multi-Agent Discussion.&lt;/p&gt;

&lt;p&gt;Instead of a generic system prompt, we instantiate specific "Agents" with narrow domain contexts (e.g., "Security Engineer," "DBA," "Frontend Architect"). A moderator loop passes state between these agents to identify gaps in the proposed solution.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Developer Analogy&lt;/strong&gt;: Microservices architecture where each service owns a specific domain context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best For&lt;/strong&gt;: Architecture reviews and complex system design.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pattern 4: The Debate Tournament (Adversarial Validation)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The Pattern&lt;/strong&gt;: Proposition -&amp;gt; Adversarial Loops -&amp;gt; Judicial Evaluation.&lt;/p&gt;

&lt;p&gt;This pattern specifically targets confirmation bias. We force models into "Pro" and "Con" states. The "Pro" model generates a solution, while the "Con" model specifically parses the output for logical fallacies or factual errors. A "Judge" model evaluates purely based on the strength of the arguments, not the priors.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Developer Analogy&lt;/strong&gt;: Blue/Green deployment testing or Chaos Engineering (intentionally trying to break the system).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best For&lt;/strong&gt;: Critical decision making and validating "too good to be true" solutions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pattern 5: Hierarchical Planning (Recursive Decomposition)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The Pattern&lt;/strong&gt;: Planner -&amp;gt; Worker -&amp;gt; Verifier (Tree of Thought).&lt;/p&gt;

&lt;p&gt;A top-level "Strategist" model decomposes a complex task into a dependency graph (DAG). "Implementer" models execute the leaf nodes. "Reviewer" models validate per-node success before bubbling up.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Developer Analogy&lt;/strong&gt;: A CI/CD pipeline with distinct build, test, and deploy stages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best For&lt;/strong&gt;: Full-stack feature implementation and complex project planning.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pattern 6: Chain-of-Thought Verification (Test-Driven Inference)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The Pattern&lt;/strong&gt;: Step-by-Step Inference -&amp;gt; Logic Unit Testing.&lt;/p&gt;

&lt;p&gt;Standard Chain-of-Thought (CoT) is just a prompt trick. In the ensemble version, we break the CoT into discrete steps and have secondary models "unit test" each logical leap. If step $N$ fails verification, we branch and retry before proceeding to $N+1$.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Developer Analogy&lt;/strong&gt;: Unit Testing individual functions rather than just end-to-end testing the whole app.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best For&lt;/strong&gt;: Algorithmic logic, debugging data pipelines, and mathematical proofs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pattern 7: Red Team / Blue Team (Security Hardening)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The Pattern&lt;/strong&gt;: Generator -&amp;gt; Attacker -&amp;gt; Hardener.&lt;/p&gt;

&lt;p&gt;Similar to GANs (Generative Adversarial Networks), the Blue Team proposes a functional implementation. The Red Team explicitly attempts to find injections, race conditions, or logic gaps. The Blue Team must then patch the specific vulnerabilities found.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Developer Analogy&lt;/strong&gt;: Automated Penetration Testing in your build pipeline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best For&lt;/strong&gt;: Writing security rules, auth flows, and critical infrastructure code.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Implementing This Today
&lt;/h3&gt;

&lt;p&gt;Building these harnesses from scratch requires managing substantial async complexity, state management, and retry logic.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ai-crucible.com" rel="noopener noreferrer"&gt;AI Crucible&lt;/a&gt; abstracts these patterns into a clean API and UI. You select the strategy ("The Ring"), choose your model composition (mixing specific versions of GPT, Claude, etc.), and the platform handles the orchestration, state passing, and convergence detection.&lt;/p&gt;

&lt;p&gt;By moving from single-prompting to Ensemble AI, we stop treating LLMs as magic boxes and start treating them as deterministic components in a reliable software architecture.&lt;/p&gt;

&lt;p&gt;Read the full deep dive on these strategies: &lt;a href="http://ai-crucible.com/articles/seven-ensemble-strategies/" rel="noopener noreferrer"&gt;Seven Rings of Power: Ensemble AI Strategies Explained&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ensemble</category>
      <category>ai</category>
      <category>aiops</category>
    </item>
    <item>
      <title>Custom ESM pages in component-controls</title>
      <dc:creator>Atanas Stoyanov</dc:creator>
      <pubDate>Wed, 30 Dec 2020 06:08:43 +0000</pubDate>
      <link>https://dev.to/atanasster/custom-esm-pages-in-component-controls-1ad8</link>
      <guid>https://dev.to/atanasster/custom-esm-pages-in-component-controls-1ad8</guid>
      <description>&lt;p&gt;Originally published on &lt;a href="https://component-controls.com/blogs/custom-esm-pages"&gt;https://component-controls.com/blogs/custom-esm-pages&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can customize &lt;code&gt;component-controls&lt;/code&gt; in many ways, in this article we will show how you can add custom page tabs to your &lt;a href="https://component-controls.com/tutorial/esmodules-stories"&gt;ESM&lt;/a&gt; documentation pages.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://component-controls.com/tutorial/esmodules-stories"&gt;ESM&lt;/a&gt; page tabs are customizable by page type - where the default page type for your ESM files is &lt;code&gt;story&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;By default, &lt;code&gt;component-controls&lt;/code&gt; uses a page template (&lt;a href="https://github.com/ccontrols/component-controls/blob/master/ui/pages/src/pages/ClassicPage.tsx"&gt;ClassicPage&lt;/a&gt;) that contains a good mixture of blocks to document your stories.&lt;/p&gt;

&lt;h1&gt;
  
  
  Example
&lt;/h1&gt;

&lt;p&gt;You can find the source for the example &lt;a href="https://github.com/ccontrols/custom-esm-pages"&gt;custom esm pages&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gatsby-esm-pages.netlify.app"&gt;Live gatsby site&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://next-esm-pages.netlify.app"&gt;Live nextjs site&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Adding new tabs
&lt;/h1&gt;

&lt;p&gt;The page tabs can be customized in the &lt;a href="https://component-controls.com/configuration/buildtime/"&gt;buildtime&lt;/a&gt; configuration file of your project.&lt;/p&gt;

&lt;p&gt;The following example will use two ESM page tabs - the default ClassicPage and a new TestingPage - this will be for all pages of type &lt;code&gt;story&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;module.exports = {
  ...
  pages: {
    story: {
      tabs: {
        page: '@component-controls/pages/ClassicPage',
        test: '@component-controls/pages/TestingPage',
      },
    },
  },
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Customize installed pages
&lt;/h1&gt;

&lt;p&gt;You can customize various page props if you configure the page tab as an array. The following example uses a custom title, as well as empty 'containers' for the page:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;module.exports = {
  ...
  pages: {
    story: {
      tabs: {
        canvas: [
          "@component-controls/pages/CanvasPage",
          { title: "Render", container: null, variant: "" },
        ],
        page: '@component-controls/pages/ClassicPage',
      },
    },
  },
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Create a custom page
&lt;/h1&gt;

&lt;p&gt;You can also create custom pages and add them to a tab on the ESM documentation pages.&lt;/p&gt;

&lt;p&gt;The following example creates a custom page that renders the current story in all the available themes. This can be useful to quickly preview any coloring/spacing issues for your components that are specific to a theme.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React from 'react';
import { TabConfiguration } from '@component-controls/core';
import {
Story,
Description,
} from '@component-controls/blocks';
import { ThemeProvider } from 'theme-ui';
import { BlockContainer } from '@component-controls/components';
import { useThemes } from '../src/components/useThemes';

const ThemesPage = () =&amp;gt; {
  const themes = useThemes();
  return (
    &amp;lt;&amp;gt;
      &amp;lt;Description /&amp;gt;
        {themes.map(({ name, theme }) =&amp;gt; (
          &amp;lt;BlockContainer key={`themed_component_${name}`} title={name} id={name} sx={{ mt: 0 }}&amp;gt;
            &amp;lt;ThemeProvider  theme={theme}&amp;gt;
              &amp;lt;Story id="."sx={{ mb: 0, ...theme?.styles?.root }}/&amp;gt;
            &amp;lt;/ThemeProvider&amp;gt;
          &amp;lt;/BlockContainer&amp;gt;
        ))}
    &amp;lt;/&amp;gt;
  );
}

export default {
  title: 'Themes',
  component: ThemesPage
} as TabConfiguration
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and to add this page to your configuration&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const { defaultBuildConfig } = require('@component-controls/core');

module.exports = {
  ...
  pages: {
    story: {
      tabs: {
        ...defaultBuildConfig.pages.story.tabs,
        test: '@component-controls/pages/TestingPage',
        themes: require.resolve('./ThemesPage.tsx'),
      },
    },
  },
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The full sample project, documenting &lt;a href="https://theme-ui.com"&gt;theme-ui&lt;/a&gt; is available for inspiration.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/atanasster/theme-ui-design-system/tree/master/.config"&gt;source code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://theme-ui-design-system.netlify.app/docs/theme-ui-alert--overview/themes"&gt;live site&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
    </item>
    <item>
      <title>Migrate documentation sites from docz</title>
      <dc:creator>Atanas Stoyanov</dc:creator>
      <pubDate>Wed, 09 Sep 2020 20:25:50 +0000</pubDate>
      <link>https://dev.to/atanasster/migrate-documentation-sites-from-docz-2enf</link>
      <guid>https://dev.to/atanasster/migrate-documentation-sites-from-docz-2enf</guid>
      <description>&lt;p&gt;&lt;a href="https://www.docz.site"&gt;docz&lt;/a&gt; is an easy to use, zero-config documentation system using &lt;a href="https://www.gatsbyjs.org/"&gt;Gatsby&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://component-controls.com"&gt;component-controls&lt;/a&gt; provides migration compatibility for many of the documentation features in &lt;a href="https://www.docz.site"&gt;docz&lt;/a&gt;. And component-control can also use &lt;a href="https://component-controls.com/tutorial/getting-started/gatsby"&gt;gatsby&lt;/a&gt; as a static site generator.&lt;/p&gt;

&lt;p&gt;A migration example can be found here: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ccontrols/component-controls/tree/master/examples/docz-migration"&gt;source code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docz-migration.netlify.app"&gt;live site&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The sample project was bootstraped from &lt;a href="https://github.com/colbyfayock/gatsby-starter-docz-netlifycms"&gt;gatsby-starter-docz-netlifycms&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Add gatsby theme
&lt;/h2&gt;

&lt;p&gt;First we will add &lt;a href="https://www.gatsbyjs.com"&gt;gatsby&lt;/a&gt; and the component-controls &lt;a href="https://github.com/ccontrols/component-controls/tree/master/integrations/gatsby-theme-stories"&gt;gatsby-theme-stories&lt;/a&gt; to the project&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn add gatsby @component-controls/gatsby-theme-stories
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  Configuration file path
&lt;/h2&gt;

&lt;p&gt;By default, the &lt;a href="https://www.docz.site"&gt;docz&lt;/a&gt; configuration file is kept in the project main folder, while component-controls uses a &lt;code&gt;.config&lt;/code&gt; sub-folder. We will configure the gatsby stories theme in &lt;code&gt;gatsby-config.js&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;module.exports = {
  plugins: [
    {
      resolve: '@component-controls/gatsby-theme-stories',
      options: {
        //doczrc.js file located in project main folder
        configPath: '.',
      },
    },
  ],
};
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  Launch scripts
&lt;/h2&gt;

&lt;p&gt;Next, you should add the gatsby develop and gatsby build scripts to the project's &lt;code&gt;package.json&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  "scripts": {
    //component-controls scripts
    "build-docs": "gatsby clean &amp;amp;&amp;amp; gatsby build",
    "start": "gatsby develop -p 9022",
    //docz original scripts
    "develop": "docz dev",
    "build": "docz build --dest public",
    "serve": "docz serve"
  },
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  Configuration fields
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://component-controls.com"&gt;component-controls&lt;/a&gt; can read directly the &lt;a href="https://www.docz.site"&gt;docz&lt;/a&gt; configuration file, the following is an example &lt;code&gt;doczrc.js&lt;/code&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;the component-controls build-time and run-time configurations are merged, and we can use a single &lt;a href="https://component-controls.com/configuration/overview"&gt;configuration&lt;/a&gt; file (&lt;code&gt;doczrc.js&lt;/code&gt;) for both build-time and run-time configurations.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export default {
  files: 'docs/**/*.mdx',
  title: 'Docz &amp;amp; Netlify CMS',
  menu: [
    {
      name: 'Quick Start',
      menu: [''],
    },
    {
      name: 'Getting Started',
      menu: ['Manual Installation'],
    },
    {
      name: 'Configuration',
    },
  ],
};
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.docz.site/docs/project-configuration"&gt;&lt;strong&gt;files&lt;/strong&gt;&lt;/a&gt; field is mapped to the &lt;strong&gt;stories&lt;/strong&gt; configuration field.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.docz.site/docs/project-configuration"&gt;&lt;strong&gt;title&lt;/strong&gt;&lt;/a&gt; field is mapped to the &lt;strong&gt;siteTitle&lt;/strong&gt; configuration field.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.docz.site/docs/project-configuration"&gt;&lt;strong&gt;description&lt;/strong&gt;&lt;/a&gt; field is mapped to the &lt;strong&gt;siteDescription&lt;/strong&gt; configuration field.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.docz.site/docs/project-configuration"&gt;&lt;strong&gt;menu&lt;/strong&gt;&lt;/a&gt; field is used in component-controls in a similar way to docz. You will need to fill the menu field in a document to attach it to a menu item.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Components
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Playground
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://component-controls.com"&gt;component-controls&lt;/a&gt; provides a similar component to docz's &lt;a href="https://www.docz.site/docs/built-in-components#playground-component"&gt;Playground&lt;/a&gt;. The &lt;a href="https://component-controls.com/api/blocks-playground--overview"&gt;Playground&lt;/a&gt; component can be imported from &lt;code&gt;@component-controls/blocks&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;---
name: Playground
menu: Components
---

import { Playground } from '@component-controls/blocks';
import { Button } from '../src/components/Button'

# Button

&amp;lt;Playground&amp;gt;
  &amp;lt;Button kind="secondary"&amp;gt;Click me&amp;lt;/Button&amp;gt;
&amp;lt;/Playground&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;You can also wrap the component code in a &lt;a href="https://component-controls.com/api/blocks-story--overview"&gt;Story&lt;/a&gt; component to display the source code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;---
name: Playground
menu: Components
---

import { Playground, Story } from '@component-controls/blocks';
import { Button } from '../src/components/Button'

# Button

&amp;lt;Playground&amp;gt;
  &amp;lt;Story name='example'&amp;gt;
    &amp;lt;Button kind="secondary"&amp;gt;Click me&amp;lt;/Button&amp;gt;
  &amp;lt;/Story&amp;gt;  
&amp;lt;/Playground&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Props
&lt;/h3&gt;

&lt;p&gt;component-controls provides a similar component to docz's &lt;a href="https://www.docz.site/docs/built-in-components#component-props"&gt;Props&lt;/a&gt;. The &lt;a href="https://component-controls.com/api/blocks-propstable--overview"&gt;Props/PropsTable&lt;/a&gt; component can be imported from &lt;code&gt;@component-controls/blocks&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;---
name: Props
menu: Components
---

import { Props } from '@component-controls/blocks';
import { Button } from '../src/components/Button'

# Button

&amp;lt;Props of={Button} /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



</description>
      <category>react</category>
      <category>testing</category>
      <category>gatsby</category>
    </item>
  </channel>
</rss>
