<?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: Adeola Adeyemo</title>
    <description>The latest articles on DEV Community by Adeola Adeyemo (@deolaj).</description>
    <link>https://dev.to/deolaj</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%2F110375%2F594d521f-562b-4340-8561-cd0d7e7bca02.jpeg</url>
      <title>DEV Community: Adeola Adeyemo</title>
      <link>https://dev.to/deolaj</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/deolaj"/>
    <language>en</language>
    <item>
      <title>You Should Skill It: Solving a Year-Old CSS Bottleneck With an AI Skill</title>
      <dc:creator>Adeola Adeyemo</dc:creator>
      <pubDate>Sat, 30 May 2026 08:25:22 +0000</pubDate>
      <link>https://dev.to/epilot/you-should-skill-it-solving-a-year-old-css-bottleneck-with-an-ai-skill-2ioa</link>
      <guid>https://dev.to/epilot/you-should-skill-it-solving-a-year-old-css-bottleneck-with-an-ai-skill-2ioa</guid>
      <description>&lt;p&gt;There's a certain kind of problem that lives rent-free in your head for months. Not urgent enough to drop everything for, but annoying enough that you never quite let it go. This is the story of one of those, and how an AI skill finally gave me the right-sized solution.&lt;/p&gt;

&lt;h2&gt;
  
  
  A bit about where I work
&lt;/h2&gt;

&lt;p&gt;I'm a Senior Product Engineer at &lt;a href="https://www.epilot.cloud/en" rel="noopener noreferrer"&gt;epilot&lt;/a&gt;, a vertical SaaS company built for the energy industry, mostly utilities, municipal suppliers, and grid operators across the DACH region. The core of what we do is what we call an Energy XRM, a 360 platform that handles the relational side of running a utility: sales, service, products, partners, customer portals, regulatory workflows, all in one place. It's built specifically for the messy reality of the energy industry, where a single customer might be enrolling in a tariff, configuring a heat pump, and submitting paperwork to a grid operator in the same week.&lt;/p&gt;

&lt;p&gt;One of our most-used products is called Journeys - a no-code, multi-step form that our users share with their end-customers or embed on their websites to onboard customers, qualify leads, and sell products. If you've ever signed up for an electricity tariff online in Germany, there's a decent chance you walked through an epilot Journey without knowing it. I work on the team that maintains the Journey product.&lt;/p&gt;

&lt;h2&gt;
  
  
  The redesign that led to all of this
&lt;/h2&gt;

&lt;p&gt;A while back I led the redesign of the Journeys design system and component library as part of a much bigger migration away from Material UI. We called the new system Concorde. It's our internal React component library, built around CSS variables and design tokens instead of a tightly coupled JSON theming object, which gave us a lot more flexibility for theming, dark mode, and customer-specific styling. I wrote a bit about that migration last year (&lt;a href="https://dev.to/epilot/building-a-scalable-react-component-library-lessons-from-concorde-elements-kdi"&gt;Building a scalable React component library: lessons from Concorde Elements&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;As part of that work I shipped a feature called Custom CSS. The pitch was simple: let customers style their Journeys as far as their imagination goes. Pill-shaped CTAs on certain steps? Override the discount color on a product tile? Pair light and dark mode tokens to match a brand palette? Custom CSS lets you do all of that. Underneath it sits the full Concorde token library plus a catalog of maintained class names (things like &lt;code&gt;.Concorde-Button__Primary&lt;/code&gt; or &lt;code&gt;.Concorde-SingleChoice-Image-Block&lt;/code&gt;) that survive deploys.&lt;/p&gt;

&lt;p&gt;It was powerful. And that's where the problem started.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bottleneck
&lt;/h2&gt;

&lt;p&gt;Powerful developer tools are only useful if you can actually use them. Custom CSS is, at the end of the day, just CSS. A lot of our customers would check our &lt;a href="https://docs.epilot.io/docs/journeys/custom-css/" rel="noopener noreferrer"&gt;Custom CSS documentation&lt;/a&gt;, which had a lot of examples, and figure it out themselves. However, others just skipped over it and reach out. The documentation has a lot of examples, but it couldn't cover all the possible use cases or questions that would come up.&lt;/p&gt;

&lt;p&gt;So when someone wanted to change a hover state, soften a border, or restyle a specific block on step three of an onboarding flow, they did the natural thing: they asked Customer Success, Product Managers, Project teams etc. Whomever would then forward it to my team, mostly me, and a quietly growing slice of my engineering time was being spent on one-off CSS snippets.&lt;/p&gt;

&lt;p&gt;I saw this problem coming though. About a year ago I built a proof-of-concept: a standalone AI Custom CSS assistant. You'd type what you wanted, it would generate the CSS, referencing the right tokens and selectors, the right Concorde classes. It was built using our internal Generative AI engine and contained enough context for any Large Language Model (LLM) to generate the styles required.&lt;/p&gt;

&lt;p&gt;It worked, but I shelved it anyway. It just felt disproportionate. Shipping a standalone AI assistant meant maintaining it, a UI, observability, model costs, the whole thing. For a problem that wasn't a pressing need, it felt like overkill. I parked it and went back to other priorities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I revisited it
&lt;/h2&gt;

&lt;p&gt;Fast forward to this year. If you've been near the AI space at all, you've probably noticed that skills (sometimes called tools or actions, depending on the ecosystem) have become real. Instead of a general-purpose chatbot reasoning from memory, a skill points the model at specific knowledge and specific instructions for a specific task. It loads only when the user's request actually matches the skill's description, which keeps the model's context lean and the answers focused. Think of it less as a chatbot and more like a specialist you've fully briefed before a meeting.&lt;/p&gt;

&lt;p&gt;The magic isn't the model. It's the framing. A well-written skill knows what it knows, knows what it doesn't, and applies that scoped knowledge reliably every time.&lt;/p&gt;

&lt;p&gt;With the adoption of Claude company-wide, there was also the creation of skills for different purposes.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the skill came together
&lt;/h2&gt;

&lt;p&gt;The spark for the skill itself came from Wilian, a Product Designer on my team. He put together the first draft in response to a new Custom CSS snippet. Great starting point.&lt;/p&gt;

&lt;p&gt;To make it bulletproof I needed to layer in the engineering context. I'd built the Concorde architecture from the ground up, so I knew where the edge cases lived: which selectors are safe to target, which HTML IDs are journey-specific and shouldn't be hard-coded, why &lt;code&gt;display: none&lt;/code&gt; is blocked (we strip it to protect accessibility), why the mobile sticky CTA reads &lt;code&gt;--concorde-primary-color&lt;/code&gt; directly instead of the button background token, how the light and dark mode tokens cascade through the component tree. I took the draft and grew it into something a non-engineer could actually rely on day-to-day.&lt;/p&gt;

&lt;p&gt;The skill now does four things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reads the Custom CSS documentation, including the unsupported-rule list and best practices.&lt;/li&gt;
&lt;li&gt;Knows the full Concorde token library, including the dark mode variants.&lt;/li&gt;
&lt;li&gt;References a maintained catalog of stable &lt;code&gt;.Concorde-*&lt;/code&gt; class names (around 46 components and 50 blocks).&lt;/li&gt;
&lt;li&gt;Loads a template Journey that contains nearly every block in our system, so the agent can reason about the real DOM, not a theoretical structure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There were a few technical wrinkles along the way (a browser-MCP integration that turned out to be flakier than we hoped, so we ended up using a headless-browser approach to inspect the live DOM), but those are a story for another post. The skill itself just works.&lt;/p&gt;

&lt;p&gt;The skill was distributed to everyone's Claude account by the IT team.&lt;/p&gt;

&lt;h2&gt;
  
  
  What that looks like in practice
&lt;/h2&gt;

&lt;p&gt;A customer asks Customer Success: "&lt;em&gt;Can we make the buttons round on this journey, but not the toggle group?&lt;/em&gt;"&lt;/p&gt;

&lt;p&gt;CS drops it into Claude. The skill comes back with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.Concorde-Button&lt;/span&gt;&lt;span class="nd"&gt;:not&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;.Concorde-ToggleButton&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;999px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Plus a one-line comment explaining why the toggle group is excluded (it has its own pill shape and would double-style). No engineering escalation, a production-ready snippet.&lt;/p&gt;

&lt;p&gt;That round trip used to bounce between teams. Now it takes one paste.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bigger picture
&lt;/h2&gt;

&lt;p&gt;The interesting shift isn't that AI tools got more useful. It's that they got more specific. A general AI assistant that vaguely knows CSS is not as valuable as a skill that deeply knows &lt;em&gt;your&lt;/em&gt; CSS system, your tokens, your conventions, and your docs. The model is the same. The framing is what makes it useful.&lt;/p&gt;

&lt;p&gt;A year ago, the right answer to this problem looked like a separate product. This year, it's a Markdown file. That gap, same payload and two very different shipping costs, is the actual lesson in product thinking leading to time saved.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;If you have documentation, an internal process, or a slice of engineering know-how that currently lives in a handful of people's heads, it might be worth asking the same question I asked: &lt;em&gt;could this just be a skill?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Not every problem needs an app. Sometimes it needs the right context, pointed at the right model, with the right guardrails. The result can quietly take hours of work off the team every week and free you up to work on the things only you can actually do.&lt;/p&gt;

&lt;p&gt;That's what this build did for me. Honestly, one of the more satisfying things I've shipped this year.&lt;/p&gt;

&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@juliorionaldo?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Julio Rionaldo&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/person-playing-violin-xIoze9dH4WI?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>css</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Building a Scalable React Component Library: Lessons From Concorde Elements</title>
      <dc:creator>Adeola Adeyemo</dc:creator>
      <pubDate>Wed, 23 Jul 2025 14:02:23 +0000</pubDate>
      <link>https://dev.to/epilot/building-a-scalable-react-component-library-lessons-from-concorde-elements-kdi</link>
      <guid>https://dev.to/epilot/building-a-scalable-react-component-library-lessons-from-concorde-elements-kdi</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;We recently embarked on the complete redesign of our Journeys, aiming for a modern, state-of-the-art look - &lt;strong&gt;Project Concorde&lt;/strong&gt;. This wasn't just a UI overhaul; we sought the flexibility for future modifications, knowing that simply patching our existing UI, heavily reliant on Material UI, wouldn't suffice. We needed to build a new foundation from the ground up.&lt;/p&gt;

&lt;p&gt;The full Project Concorde story is larger, but in this article, we'll dive into the story of &lt;code&gt;@epilot/concorde-elements&lt;/code&gt;, the new component library born from that need, and how we built a system that not only powers our new interface, but also empowers our development team.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why did we need a new component library?
&lt;/h3&gt;

&lt;p&gt;Our existing component library, &lt;code&gt;@epilot/journey-elements&lt;/code&gt;, was based on Material UI. While it served its purpose, our goal was to reduce our reliance on Material UI to gain several crucial benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reduce performance overhead from Material UI's style generation in favour of CSS modules&lt;/li&gt;
&lt;li&gt;React version constraints tied to MUI releases.&lt;/li&gt;
&lt;li&gt;Styling limitations blocking modern CSS features.&lt;/li&gt;
&lt;li&gt;Remove the use of the Material UI theme object in saved custom Designs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The image below shows the overhead to create custom designs:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa3ohs2uri818vjj407ia.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa3ohs2uri818vjj407ia.png" alt="Showing the MUI overhead" width="800" height="606"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why not use existing design systems?
&lt;/h3&gt;

&lt;p&gt;We found that most off-the-shelf design systems are quite opinionated with their styling and theming. Our philosophy was that it's easier to replace a single unit than an entire factory. Our primary goal was to keep our new system &lt;strong&gt;simple and extensible&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Challenge
&lt;/h3&gt;

&lt;p&gt;The path forward was not without its hurdles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We needed to build &lt;strong&gt;37+ components&lt;/strong&gt; with various potential variants.&lt;/li&gt;
&lt;li&gt;All Journey blocks had to be &lt;strong&gt;migrated&lt;/strong&gt; to the new design, and we anticipated new complexities during integration due to component usage.&lt;/li&gt;
&lt;li&gt;We had to ensure that custom themes built with the previous design system worked &lt;strong&gt;seamlessly&lt;/strong&gt; with the new one.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Phases of Developments
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1: Pursuit of Purity
&lt;/h3&gt;

&lt;p&gt;In the initial phase, our approach was to create every component from scratch. We desired control over every pixel and line of code. Our first significant task was migrating the &lt;code&gt;Product Tile&lt;/code&gt; to enable a new "Recommended Product" feature. We began with the basics.&lt;/p&gt;

&lt;p&gt;Our early &lt;code&gt;Button&lt;/code&gt; component perfectly illustrates this "purity" approach—simple, direct, and completely self-contained.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="cm"&gt;/* An early Button.tsx */&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;classes&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./Button.module.scss&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ButtonProps&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./types.ts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// ...&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;forwardRef&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;HTMLButtonElement&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ButtonProps&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;
      &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;classNames&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Concorde-Button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;classes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="cm"&gt;/* ... */&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, we successfully built our &lt;code&gt;Link&lt;/code&gt;, &lt;code&gt;Card&lt;/code&gt;, &lt;code&gt;TextField&lt;/code&gt;, &lt;code&gt;StepperInput&lt;/code&gt;, &lt;code&gt;Image&lt;/code&gt;, &lt;code&gt;ImageStepper&lt;/code&gt;, &lt;code&gt;MobileStepper&lt;/code&gt;, and the &lt;code&gt;ThemeProvider&lt;/code&gt;. With these foundational components, we successfully released the "Recommended Product" feature, receiving excellent feedback.&lt;/p&gt;

&lt;p&gt;Our next milestone involved migrating the Date field and adding a Time select, which led to the &lt;code&gt;DatePicker&lt;/code&gt; component. The design for this component had unique custom requirements that made building it entirely from scratch impractical. After some research, we opted to extend an existing library, &lt;a href="https://reactdatepicker.com/" rel="noopener noreferrer"&gt;React DatePicker&lt;/a&gt;, with custom functionalities to suit our use cases.&lt;/p&gt;

&lt;p&gt;The resulting &lt;a href="https://portal.epilot.cloud/concorde-elements/?path=/docs/elements-datepicker--docs" rel="noopener noreferrer"&gt;DatePicker&lt;/a&gt; involved creating new sections like the Footer and Time Select, and replacing the TextField and Header. While functional, the process was cumbersome, and the result felt more like a series of patches than a cohesive part of our system. This experience was our wake-up call: our "from-scratch" purity, and even our one-off extension approach, was simply not scalable.&lt;/p&gt;

&lt;h3&gt;
  
  
  2: The Pivot - 'Headless UI &amp;amp; Purity' Hybrid
&lt;/h3&gt;

&lt;p&gt;This realization prompted a strategic shift. Speed became as crucial as purity. This quest led us to a breakthrough: &lt;strong&gt;headless components&lt;/strong&gt;. These were libraries that provided the complex logic, state management, and accessibility of common widgets, but shipped with absolutely no styles. This was our "aha!" moment.&lt;/p&gt;

&lt;p&gt;After further research, we settled on two incredible libraries: &lt;strong&gt;&lt;a href="https://www.radix-ui.com/primitives" rel="noopener noreferrer"&gt;Radix UI Primitives&lt;/a&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;a href="https://mui.com/base-ui/" rel="noopener noreferrer"&gt;MUI Base&lt;/a&gt;&lt;/strong&gt; (which recently became &lt;a href="https://base-ui.com/react/overview/quick-start" rel="noopener noreferrer"&gt;Base UI&lt;/a&gt;). They offered us the best of both worlds. We could now build our components by composing these primitives and applying our own distinct design system on top.&lt;/p&gt;

&lt;p&gt;Consider our &lt;code&gt;Autocomplete&lt;/code&gt; component, for instance, it leverages a hook from MUI Base for its core logic, while we provide the entire UI.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// A simplified look at our Autocomplete component&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useAutocomplete&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@mui/base/AutocompleteUnstyled&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;forwardRef&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Menu&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;MenuItem&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;..&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// ...&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Autocomplete&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;forwardRef&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Autocomplete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;getRootProps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;getInputProps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;getListboxProps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;getOptionProps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;groupedOptions&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useAutocomplete&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nf"&gt;getRootProps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;other&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Input&lt;/span&gt; &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nf"&gt;getInputProps&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;groupedOptions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Menu&lt;/span&gt; &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nf"&gt;getListboxProps&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;groupedOptions&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;[]).&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;option&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;MenuItem&lt;/span&gt; &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nf"&gt;getOptionProps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;option&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;option&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;label&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Menu&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We were no longer reinventing the wheel for every single component. This allowed us to focus our efforts on what truly made our library unique: our design and the developer experience. We only created components from scratch when absolutely necessary.&lt;/p&gt;

&lt;p&gt;This hybrid model significantly accelerated the development of the remaining components.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Principles
&lt;/h2&gt;

&lt;p&gt;Throughout the creation of our component library, we adhered to several core principles that ensured our team worked in unison. These principles were internally documented in our contribution guidelines and are outlined below.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Consistent Component Structure
&lt;/h3&gt;

&lt;p&gt;To keep our codebase organized and predictable, we established a standard folder structure for every component. For example,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;/_ src/components/Button/
  ├── Button.tsx            // Logic
  ├── Button.module.scss    // Styles
  ├── Button.test.tsx       // Tests
  ├── types.ts              // Type definitions
  └── index.ts              // Exports
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This simple convention meant that any developer could  easily navigate to any component and immediately locate its logic, styles, and type definitions with &lt;strong&gt;reducing collaboration overhead&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Button&lt;/span&gt;

&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Component&lt;/span&gt;
   &lt;span class="nx"&gt;aria&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;disabled&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;isDisabled&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;variant&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;disabled&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;classNames&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
     &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Concorde-Button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="nx"&gt;classes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="nx"&gt;variant&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;classes&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;`variant-&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;variant&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
     &lt;span class="nx"&gt;variant&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;primary&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Concorde-Button__Primary&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="p"&gt;...&lt;/span&gt;
     &lt;span class="nx"&gt;className&lt;/span&gt;
   &lt;span class="p"&gt;)}&lt;/span&gt;
   &lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;customStyles&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="p"&gt;...&lt;/span&gt;
 &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Component&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Card&lt;/span&gt;

&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;
   &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;
     &lt;span class="nf"&gt;classNames&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
       &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Concorde-Card&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
       &lt;span class="nx"&gt;classes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
       &lt;span class="nx"&gt;className&lt;/span&gt;
     &lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="si"&gt;}&lt;/span&gt;
   &lt;span class="na"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
   &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;customStyles&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
   &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice the use of the &lt;code&gt;Concorde&lt;/code&gt; prefix in the static HTML classes. This served as a foundational element for easy custom styling, a topic not covered in detail here.&lt;/p&gt;

&lt;h3&gt;
  
  
  Design Tokens &amp;amp; Theming
&lt;/h3&gt;

&lt;p&gt;The next pillar was unifying our design system. We created a comprehensive set of global &lt;strong&gt;design tokens&lt;/strong&gt; using CSS variables for every aspect of our UI: colors, spacing, typography, transitions, shape and more. This became the language of our design system.&lt;/p&gt;

&lt;p&gt;By coding colors, typography and dimensions as CSS custom properties, we guaranteed every component would be visually consistent, utilizing the same set of values. We also enabled these values to be extended and customized externally as local variables, preventing hard-coded styles and ensuring maximum flexibility.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--concorde-primary-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#0070f3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--concorde-secondary-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#ff7e1b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--concorde-font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;'Proxima-Nova'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--concorde-spacing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.25rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, all our components can simply use &lt;code&gt;color: var(--concorde-primary-color)&lt;/code&gt; or &lt;code&gt;margin: var(--concorde-spacing)&lt;/code&gt;. This setup dramatically simplified theming. For example, toggling the typography tokens automatically affects all text on the screen.&lt;/p&gt;

&lt;p&gt;Beyond the tokens used internally, we also exposed custom tokens for each component. These external tokens provide powerful ways to extend a component's functionalities.&lt;/p&gt;

&lt;p&gt;For example, the &lt;code&gt;Button&lt;/code&gt; component has the following custom tokens:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;customColors&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ButtonCSSProperties&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--concorde-button-label-color&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--concorde-button-background-color&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--concorde-button-hover-bg-color&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;hoverBgColor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--concorde-button-active-bg-color&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;activeBgColor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--concorde-button-gap&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;gap&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;px`&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As an example, the CSS styles below will specifically modify the Button and Card:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c"&gt;/* Button styles */&lt;/span&gt;
  &lt;span class="py"&gt;--concorde-button-label-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#ffffff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--concorde-button-background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#ff7e1b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--concorde-button-gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.5rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c"&gt;/* Card styles */&lt;/span&gt;
  &lt;span class="py"&gt;--concorde-card-background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#e34590&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note the consistent use of the &lt;code&gt;concorde&lt;/code&gt; prefix for the token naming for consistency and scoping.&lt;/p&gt;

&lt;p&gt;All tokens (default and custom tokens) are thoroughly documented in &lt;a href="https://portal.epilot.cloud/concorde-elements/?path=/docs/welcome-overview--docs" rel="noopener noreferrer"&gt;Storybook&lt;/a&gt; and our &lt;a href="https://docs.epilot.io/docs/ui-design/concorde-design-tokens" rel="noopener noreferrer"&gt;developer documentation&lt;/a&gt; for clarity.&lt;/p&gt;

&lt;h3&gt;
  
  
  TypeScript: Our Shield and Guide
&lt;/h3&gt;

&lt;p&gt;From day one, we committed to writing everything in TypeScript. More than just providing type safety, our type files became a form of documentation. We commented our types extensively, enabling any developer using a component to understand the purpose of each prop right from their IDE.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// An excerpt from our Autocomplete types.ts&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;AutocompleteProps&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;UseAutocompleteProps&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Multiple&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;DisableClearable&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;FreeSolo&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="cm"&gt;/**
   * The label content.
   */&lt;/span&gt;
  &lt;span class="nx"&gt;label&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ReactNode&lt;/span&gt;
  &lt;span class="cm"&gt;/**
   * If `true`, the component is disabled.
   * @default false
   */&lt;/span&gt;
  &lt;span class="nx"&gt;disabled&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt;
  &lt;span class="c1"&gt;// ... and so on&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Composition: Building Blocks for Complex UI
&lt;/h3&gt;

&lt;p&gt;A fundamental principle guiding our development was composition. Our base components were designed to be flexible building blocks. By combining them, we could construct more complex and specialized UIs without adding bloat to the core library. This allowed us to build sophisticated features by assembling simple, well-tested parts - a true "change one, change all" approach.&lt;/p&gt;

&lt;p&gt;A simple &lt;code&gt;Input&lt;/code&gt; could be composed to &lt;code&gt;PatternInput&lt;/code&gt;, &lt;code&gt;IbanInput&lt;/code&gt;, &lt;code&gt;NumberInput&lt;/code&gt; and more complex components like a &lt;code&gt;ProductTile&lt;/code&gt; could look be structured as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// A conceptual ProductTile built with composition&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Card&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Image&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Typography&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@epilot/concorde-elements&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;styles&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./ProductTile.module.scss&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ProductTile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;product&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Card&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tile&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Image&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;imageUrl&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Typography&lt;/span&gt; &lt;span class="na"&gt;as&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"h4"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Typography&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Typography&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;description&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Typography&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt; &lt;span class="na"&gt;variant&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"primary"&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Add to Cart"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Card&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Developer Experience
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Vite
&lt;/h4&gt;

&lt;p&gt;Vite powered our local development with a lightning-fast dev server and HMR, greatly benefiting from our monorepo setup&lt;/p&gt;

&lt;h4&gt;
  
  
  Storybook: The Living Documentation
&lt;/h4&gt;

&lt;p&gt;How could we ensure quality and consistency across our components? The answer was &lt;strong&gt;&lt;a href="https://portal.epilot.cloud/concorde-elements/" rel="noopener noreferrer"&gt;Storybook&lt;/a&gt;&lt;/strong&gt;. It became far more than just a component gallery; it became the living, breathing heart of our project. For every component, we wrote stories that showcased all its variants and states.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// A story from Input.stories.tsx&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Meta&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;StoryObj&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@storybook/react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Input&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./Input&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Meta&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;Input&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Components/Input&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Input&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;meta&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;WithLabel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Story&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Email Address&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;placeholder&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Enter your email...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Disabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Story&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;WithLabel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;disabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Critically, every story also served as an accessibility test. We integrated the &lt;code&gt;@storybook/addon-a11y&lt;/code&gt; addon, which runs &lt;a href="https://storybook.js.org/docs/8/writing-tests/accessibility-testing" rel="noopener noreferrer"&gt;automated accessibility&lt;/a&gt; checks on every story against WCAG standards. This proactive approach allowed us to catch issues with color contrast, ARIA attributes, and keyboard navigation right within our development environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Testing &amp;amp; Accessibility
&lt;/h3&gt;

&lt;p&gt;To build components that last, they must be reliable. Alongside the real-time accessibility checks in Storybook, we built a robust testing foundation. We used &lt;strong&gt;Vitest&lt;/strong&gt; as our test runner and &lt;strong&gt;React Testing Library&lt;/strong&gt; to write unit and integration tests for every component. We also used &lt;strong&gt;vitest-axe&lt;/strong&gt; and &lt;strong&gt;React Testing Library&lt;/strong&gt; for more intricate accessibility checks.&lt;/p&gt;

&lt;p&gt;These tests were not just about preventing regressions, they were about enforcing correctness. We tested component logic, ensuring that each part behaved exactly as expected under various conditions. This combination of automated accessibility checks and functional testing was crucial. It gave us the confidence to refactor, add features, and scale the library, knowing that our foundation of quality would hold strong.&lt;/p&gt;

&lt;p&gt;These automated tests run in our CI to catch regressions early.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Payoff: Scalability in Action
&lt;/h2&gt;

&lt;p&gt;The true test of &lt;code&gt;concorde-elements&lt;/code&gt; came as we started integrating it in our main application, specifically in the &lt;code&gt;concorde-renderers&lt;/code&gt; package. The work of setting up tokens, using primitives, and embedding quality through testing and documentation paid off.&lt;/p&gt;

&lt;p&gt;Developing new features for Project Concorde transformed from a chore into a delight. Need a &lt;code&gt;Modal&lt;/code&gt;? Pull in the component. Need a complex form field? Compose it with our &lt;code&gt;TextField&lt;/code&gt;, &lt;code&gt;Autocomplete&lt;/code&gt;, and &lt;code&gt;Button&lt;/code&gt; components. They all looked consistent and behaved predictably.&lt;/p&gt;

&lt;p&gt;This became the foundation for more interesting features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Custom CSS: custom styling for resulting Journeys&lt;/li&gt;
&lt;li&gt;Consistent design for Custom Journey Apps using the published library&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Building a component library is a journey. Ours taught us that a little upfront systematization goes a long way. The initial purity of building "from scratch" gave way to the pragmatic wisdom of building on top of a solid, accessible foundation.&lt;/p&gt;

&lt;p&gt;This yielded a few key principles we now live by:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Start with design tokens:&lt;/strong&gt; They are the bedrock of a consistent and scalable design system.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Embrace headless primitives:&lt;/strong&gt; Don't reinvent the wheel for everything, but leverage existing, well-tested solutions for speed and robustness.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Make TypeScript non-negotiable:&lt;/strong&gt; The safety and developer experience benefits are immeasurable.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Testing:&lt;/strong&gt; A combination of unit, integration, and automated accessibility testing is crucial for a reliable library.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Build with composition in mind:&lt;/strong&gt; Create simple, flexible blocks that can be assembled into complex UIs, promoting reusability and maintainability.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Document thoroughly:&lt;/strong&gt; A living, tested, and accessible documentation hub aligns everyone and accelerates development.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Be adaptable:&lt;/strong&gt; The perfect plan rarely survives contact with reality. Be ready to pivot and embrace better ideas.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The &lt;code&gt;@epilot/concorde-elements&lt;/code&gt; library is more than just a collection of React components. It's a testament to our team's journey, a foundation for our product's future, and a system that helps us build better, faster, and more consistently. We hope our story can help guide you on your own path to building a scalable and resilient component library.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/epilot-dev/concorde-elements" rel="noopener noreferrer"&gt;Concorde Elements GitHub Repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.epilot.io/docs/ui-design/concorde-design-tokens" rel="noopener noreferrer"&gt;Design Tokens Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://portal.epilot.cloud/concorde-elements/?path=/docs/welcome-overview--docs" rel="noopener noreferrer"&gt;Storybook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.epilot.io/docs/ui-design/concorde-html-structure" rel="noopener noreferrer"&gt;HTML Structure Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.epilot.io/docs/journeys/custom-css/" rel="noopener noreferrer"&gt;Custom CSS Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Cover Photo by &lt;a href="https://unsplash.com/@ryanquintal?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Ryan Quintal&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/blue-cube-toy-lot-close-up-photography-US9Tc9pKNBU?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>css</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
