{"id":2972,"date":"2021-04-19T16:48:00","date_gmt":"2021-04-19T16:48:00","guid":{"rendered":"https:\/\/radicalbit.ai\/?p=2972"},"modified":"2026-04-23T08:56:51","modified_gmt":"2026-04-23T08:56:51","slug":"design-system-tips","status":"publish","type":"post","link":"https:\/\/radicalbit.ai\/it\/resources\/blog\/design-system-tips\/","title":{"rendered":"Sparking joy in a design system"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Implementing BEM in a cluster of products made with React.js following Marie Kondo\u2019s secret of happiness<br>Any frontend developer will have experienced the pleasure of opening the newly released page with the Chrome inspector finding a clear and semantic clean code. Not even Marie Kondo could do better!<br>How many times has it happened to you to review some old code and think: \u201cgosh, how bad is this? ? who assigned the classes? What a mess!\u201c.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At first glance, it might be the work of the former nice but bungling colleague, but Git doesn\u2019t lie and Visual Studio quickly reveals the author \u2013 what the heck \u2013 it was me to create this obscenity! There might be a positive side: you have improved your skills over the time, and the code you write today is neater than yesterday.<br>When working as a team on a complex and rapidly evolving product, this individual process takes its toll:<br>a shared nomenclature system must be adopted then.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u201c<em>Tidying up should be about re-establishing a balance between people, their belongings and the house they live in<\/em>.\u201d \u2013 Marie Kondo<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Teamwork<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">As naming things is a rare talent, adopting a naming convention helps teamwork and turns the giant question mark about how to name an object into an automatic process that follows precise rules, and that \u2013 at best- someone has defined before you. It\u2019s reassuring to have both a tidy closet and a uniform code, isn\u2019t it?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Designing an interface thinking in BEM<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">An interface designer, able to reach a good level of abstraction, may already have in mind the html structure of components while drawing them, from the draft to Figma.<br>After reasoning about the user experience and the aesthetic research of the interface, the designer can focus on assembling and naming the components and levels to prepare the code development process, anticipating potential development problems.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">BEM provides a model that helps to reason in these terms: association between Figma and BEM<br>component = block,<br>layer \/ group = element,<br>variant = identifier, works well.<br>Just as our cute Japanese heroine suggests organizing spaces in the simplest way possible, dividing the garments according to a logic grouped by type, so also in designing a mockup it is useful to declutter and group by sets and subsets according to a defined protocol.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It is essential to discuss with the technicians to validate feasibility and nomenclature, and with the help of the FE colleagues, to work on functional and shared solutions for this \u201cchest of drawers\u201d \u200b\u200bwhich will mainly serve them.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u201cWords can be bullets, but they can also be rescue teams\u201d \u2013 J\u00f3n Kalman Stef\u00e1nsson<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Block_element \u2014 identifier<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">BEM is a convention created in 2007 (read here how it was born) to improve collaboration in frontend development.<br>Thanks to BEM we are able to assign to the classes of our DOM elements names that are explicit about the type and hierarchy of their content:<br>Block is the main container that contains a set of other elements, even at multiple nesting levels: our \u201cchest of drawers\u201d, to clarify<br>Element is the child of the block and distinguishes each of the main sections that contain other elements, the \u201cbox that divides the socks\u201d, simply<br>Identifier is an indicator that changes the appearance of the block or element, as if the labels of the containers transform the shirts into wool sweaters.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">An example: l-header, a component of our design system, has an intrinsic structure that can contain strings, objects or other independent components.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img fetchpriority=\"high\" decoding=\"async\" width=\"2400\" height=\"789\" src=\"https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/block-identifier.webp\" alt=\"\" class=\"wp-image-2232\" title=\"block-identifier\" srcset=\"https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/block-identifier.webp 2400w, https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/block-identifier-300x99.webp 300w, https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/block-identifier-1024x337.webp 1024w, https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/block-identifier-768x252.webp 768w, https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/block-identifier-1536x505.webp 1536w, https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/block-identifier-2048x673.webp 2048w, https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/block-identifier-1080x355.webp 1080w, https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/block-identifier-1280x421.webp 1280w, https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/block-identifier-980x322.webp 980w, https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/block-identifier-480x158.webp 480w\" sizes=\"(max-width: 2400px) 100vw, 2400px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">styles.less<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>.l-header {\n   display: flex;\n   flex-direction: row;\n   padding: 1rem;\n   flex-wrap: wrap;\n   gap: 1rem;\n   align-items: stretch;\n \n \n   &amp;__title {\n       display: flex;\n       flex-direction: column;\n       justify-content: center;\n       align-items: flex-start;\n       order: 1;\n       flex-grow: 1;\n   }\n \n   &amp;__details {\n       display: flex;\n       flex-direction: row;\n       justify-content: flex-end;\n       align-content: flex-end;\n       order: 2;\n       flex-grow: 2;\n       flex-wrap: wrap;\n       gap: .5rem;\n   }\n \n   &amp;__actions {\n       display: flex;\n       flex-direction: column;\n       justify-content: space-between;\n       order: 3;\n       flex-grow: 0;\n       flex-wrap: wrap;\n       gap: .5rem;\n   }\n  \n   &amp;--dark-mode {\n       background: @rdb-dark;\n       color: @rdb-white;\n   }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">index.js<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;div className={`l-header ${modifier || ''}`}&gt;\n \n     &lt;div className=\"l-header__title\"&gt;\n       &lt;PageTitle\n         subtitle={subtitle}\n         icon={icon}\n         isEditable={isEditable}\n         onTitleChange={onChange}\n         title={text}\n       \/&gt;\n     &lt;\/div&gt;\n     {details &amp;&amp; (\n       &lt;div className=\"l-header__details\"&gt;\n \n         {details.one &amp;&amp; details.one}\n         {details.two &amp;&amp; details.two}\n         {details.three &amp;&amp; details.three}\n \n       &lt;\/div&gt;\n     )}\n     {actions &amp;&amp; (\n       &lt;div className=\"l-header__actions\"&gt;\n \n         {actions.one &amp;&amp; actions.one}\n         {actions.two &amp;&amp; actions.two}\n \n       &lt;\/div&gt;\n     )}\n &lt;\/div&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u201cThere are only two hard problems in Computer Science: cache invalidation and naming things\u201d \u2013 Phil Karlton<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Robust CSS architecture<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In Radicalbit we have chosen BEM as the reference model among the many conventions available (OOCSS, SMACSS, SUITCSS, Atomic) because its peculiarities are perfectly adaptable to the needs of a design system:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Clear Structure<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Having a semantics similar to the React structure allows us to think in terms of components: each component is an easy block to intercept and recognize within the project also in the compiled html.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;div class=\"l-header \"&gt;\n    &lt;div class=\"l-header__title\"&gt;\n        &lt;div class=\"c-section-title\"&gt;\n            &lt;h1 class=\"c-section-title__title\"&gt;\n                Microfrontend Title\n            &lt;\/h1&gt;\n            &lt;div class=\"c-section-title__props\"&gt;\n                Title props \n            &lt;\/div&gt;\n        &lt;\/div&gt;\n     &lt;\/div&gt;\n     &lt;div class=\"l-header__details\"&gt;\n        &lt;div class=\"c-detail\"&gt;\n            &lt;span class=\"c-detail__label\"&gt;Detail label&lt;\/span&gt;\n            &lt;h3 class=\"c-detail__content\"&gt;Detail &lt;\/h3&gt;\n        &lt;\/div&gt;\n        &lt;div class=\"c-detail\"&gt;&lt;\/div&gt;\n        &lt;div class=\"c-detail\"&gt;&lt;\/div&gt;\n    &lt;\/div&gt;\n    &lt;div class=\"l-header__actions\"&gt;&lt;\/div&gt;\n&lt;\/div&gt;<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Modularity<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Each block is made up of distinct units, each performing a specific task and capable of interacting with the others, or being used in different patterns.<br>Below is our l-header used in various sections of the RNA interface, our MLOps Platform.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"1024\" height=\"778\" src=\"https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/modularity.webp\" alt=\"data sources\" class=\"wp-image-2231\" title=\"modularity\" srcset=\"https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/modularity.webp 1024w, https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/modularity-300x228.webp 300w, https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/modularity-768x584.webp 768w, https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/modularity-980x745.webp 980w, https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/modularity-480x365.webp 480w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Reusability<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Each component, while maintaining its properties, can change shape or color to match its parent or its identifier.<br>This is how our l-header changes its appearance based on context and content.In this case the product has the structure of our design system but in light mode and with a different primary color in our product GoLive.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"1024\" height=\"208\" src=\"https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/reusabilty.webp\" alt=\"\" class=\"wp-image-2230\" title=\"reusabilty\" srcset=\"https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/reusabilty.webp 1024w, https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/reusabilty-300x61.webp 300w, https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/reusabilty-768x156.webp 768w, https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/reusabilty-980x199.webp 980w, https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/reusabilty-480x98.webp 480w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">ABEM: a useful adaptation of BEM&nbsp;&nbsp;<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Distinguishing a room from a wardrobe and a wardrobe from a drawer is natural when we tidy up our house. When it comes to a design system, things become more complicated.<br>Fortunately, some specificities of our method come to the rescue.<br>The code shared so far has one more module than the&nbsp;<strong>Block__element\u2013 identifier,<\/strong>&nbsp; in fact a more recent declination called&nbsp;<a href=\"https:\/\/css-tricks.com\/abem-useful-adaptation-bem\/\" target=\"_blank\" rel=\"noreferrer noopener\">ABEM<\/a>&nbsp;(*) allows us a further classification and greater flexibility.<br>A (tomic) BEM defines the type of block with a prefix of a single letter, while the classes&nbsp;<em>atomic<\/em>&nbsp;allows the use of global styles, limiting the known problem of&nbsp; stiffness of the original system.<br>Our pure BEM react component could have looked like this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;div className={`l-header l-header--$ {modifier || ''}`}&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">instead we have chosen to free the modifier class from the constraint of the containing block.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;div className={`l-header $ {modifier || ''}`}&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">In this way, we can also dynamically manage state classes or helpers better described below.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Selector specificity<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The ABEM structure is extremely interesting thanks to the openness of the atomic classes but it\u2019s not close enough to the desired solution.&nbsp; For our structure is ideal to use the self explanatory nomenclature prefix as suggested in&nbsp;<strong><a href=\"https:\/\/www.smashingmagazine.com\/2016\/06\/battling-bem-extended-edition-common-problems-and-how-to-avoid-them\/\" target=\"_blank\" rel=\"noreferrer noopener\">this article<\/a><\/strong>.&nbsp;We can distinguish the type of block in order to recognize the genre of our selector:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Module layout l-<\/strong>\u00a0l-header l -sidebar l-modal<br>These modules have no aesthetic elements and are used exclusively to position components and structure the layout of an application.<\/li>\n\n\n\n<li><strong>Component c-<\/strong>\u00a0c-toolbox c-detail c-tab c-button<br>They form the backbone of an application and contain all the features for a standalone component.<\/li>\n\n\n\n<li><strong>Helpers<\/strong>\u00a0<strong>h-<\/strong>\u00a0h-show h-hide<br>These utility classes have a single function (and are commonly used for positioning or visibility).<\/li>\n\n\n\n<li><strong>States<\/strong>\u00a0<strong>is- has-<\/strong>\u00a0is-visible has-loaded<br>Indicates the different states a c component can have.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Semantics<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Now that you can give your React project a neat style, do you think you can avoid wondering if the element you are using is a title, a paragraph, a label, or a list? Chill out!&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Classifying each object of the dom according to our model does not relieve us from the need to maintain correct semantics in the html by assigning the appropriate tag to the content type, as the style-free page must maintain correct&nbsp;accessibility&nbsp;(<a href=\"https:\/\/www.w3.org\/TR\/WCAG21\/\" target=\"_blank\" rel=\"noreferrer noopener\">web content accessibility guidelines<\/a>)- for example for automatic code reading systems useful for the blind people and google algorithms, among others.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u201cNomen omen (a name, a destiny)\u201d<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Naming consistency<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The hardest task of all: naming objects so that they are generic enough to be modular, while maintaining the descriptive ability of their content.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"46\" src=\"https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/naming-consistency.webp\" alt=\"\" class=\"wp-image-2229\" title=\"naming-consistency\" srcset=\"https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/naming-consistency.webp 1024w, https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/naming-consistency-300x13.webp 300w, https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/naming-consistency-768x35.webp 768w, https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/naming-consistency-980x44.webp 980w, https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/naming-consistency-480x22.webp 480w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Do you really want to call&nbsp;<strong>c-consumptions<\/strong>&nbsp;the bar chart block that shows the consumptions in the table?<br>Indeed, you are creating this new component to show customers\u2019 consumption, but this same component could be useful, for example, to visualize the efficiency detail of a service in another environment where the name could be misleading.<br>So let\u2019s call it&nbsp;<strong>c-chart-micro<\/strong>&nbsp;in order to have a wider level of granularity and, possibly, make the chart an interchangeable component, with a chart area or a small pie chart.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Spring cleaning the codebase<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">As every April in the domestic habits of European households, even here in Radicalbit it\u2019s time to\u201dspring cleaning\u201d: actually, we are giving a refresh to the design system, creating new design patterns, renewing the existing ones and getting rid of those that did not \u201cgive us joy\u201d.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Recently, we are also putting a big effort on moving our Frontend architecture towards a \u201cmicro-frontend\u201d approach. Wanting to hear more?&nbsp;&nbsp;<strong>Stay tuned.<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>For frontend developers a clean design system is a bless; how to avoid messy code strings with best practices and techniques?<\/p>\n","protected":false},"author":1,"featured_media":3376,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[28,30],"tags":[52,116,113,115,114],"class_list":["post-2972","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","category-by-radicalbit","tag-bem","tag-design","tag-design-system","tag-ui","tag-ux"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Design system tips to spark joy<\/title>\n<meta name=\"description\" content=\"For frontend developers a clean design system is a bless; how to avoid messy code strings with best practices and techniques?\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/radicalbit.ai\/it\/resources\/blog\/design-system-tips\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Sparking joy in a design system\" \/>\n<meta property=\"og:description\" content=\"For frontend developers a clean design system is a bless; how to avoid messy code strings with best practices and techniques?\" \/>\n<meta property=\"og:url\" content=\"https:\/\/radicalbit.ai\/it\/resources\/blog\/design-system-tips\/\" \/>\n<meta property=\"og:site_name\" content=\"Radicalbit\" \/>\n<meta property=\"article:published_time\" content=\"2021-04-19T16:48:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-23T08:56:51+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/Sparking-joy-in-a-design-system.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1600\" \/>\n\t<meta property=\"og:image:height\" content=\"900\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"info@radicalbit.io\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Sparking joy in a design system\" \/>\n<meta name=\"twitter:description\" content=\"For frontend developers a clean design system is a bless; how to avoid messy code strings with best practices and techniques?\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/Sparking-joy-in-a-design-system.jpg\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"info@radicalbit.io\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\\\/\\\/radicalbit.ai\\\/it\\\/resources\\\/blog\\\/design-system-tips\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/radicalbit.ai\\\/it\\\/resources\\\/blog\\\/design-system-tips\\\/\"},\"author\":{\"name\":\"info@radicalbit.io\",\"@id\":\"https:\\\/\\\/radicalbit.ai\\\/it\\\/#\\\/schema\\\/person\\\/de74cdd211ec3a7b59a057e090c55775\"},\"headline\":\"Sparking joy in a design system\",\"datePublished\":\"2021-04-19T16:48:00+00:00\",\"dateModified\":\"2026-04-23T08:56:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/radicalbit.ai\\\/it\\\/resources\\\/blog\\\/design-system-tips\\\/\"},\"wordCount\":1381,\"publisher\":{\"@id\":\"https:\\\/\\\/radicalbit.ai\\\/it\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/radicalbit.ai\\\/it\\\/resources\\\/blog\\\/design-system-tips\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/radicalbit.ai\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/Sparking-joy-in-a-design-system.jpg\",\"keywords\":[\"bem\",\"design\",\"design system\",\"UI\",\"UX\"],\"articleSection\":[\"Blog\",\"by Radicalbit\"],\"inLanguage\":\"it-IT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/radicalbit.ai\\\/it\\\/resources\\\/blog\\\/design-system-tips\\\/\",\"url\":\"https:\\\/\\\/radicalbit.ai\\\/it\\\/resources\\\/blog\\\/design-system-tips\\\/\",\"name\":\"Design system tips to spark joy\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/radicalbit.ai\\\/it\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/radicalbit.ai\\\/it\\\/resources\\\/blog\\\/design-system-tips\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/radicalbit.ai\\\/it\\\/resources\\\/blog\\\/design-system-tips\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/radicalbit.ai\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/Sparking-joy-in-a-design-system.jpg\",\"datePublished\":\"2021-04-19T16:48:00+00:00\",\"dateModified\":\"2026-04-23T08:56:51+00:00\",\"description\":\"For frontend developers a clean design system is a bless; how to avoid messy code strings with best practices and techniques?\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/radicalbit.ai\\\/it\\\/resources\\\/blog\\\/design-system-tips\\\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/radicalbit.ai\\\/it\\\/resources\\\/blog\\\/design-system-tips\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/radicalbit.ai\\\/it\\\/resources\\\/blog\\\/design-system-tips\\\/#primaryimage\",\"url\":\"https:\\\/\\\/radicalbit.ai\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/Sparking-joy-in-a-design-system.jpg\",\"contentUrl\":\"https:\\\/\\\/radicalbit.ai\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/Sparking-joy-in-a-design-system.jpg\",\"width\":1600,\"height\":900,\"caption\":\"Sparking joy in a design system\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/radicalbit.ai\\\/it\\\/resources\\\/blog\\\/design-system-tips\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/radicalbit.ai\\\/it\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sparking joy in a design system\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/radicalbit.ai\\\/it\\\/#website\",\"url\":\"https:\\\/\\\/radicalbit.ai\\\/it\\\/\",\"name\":\"Radicalbit\",\"description\":\"Simpler, faster, better MLOps\",\"publisher\":{\"@id\":\"https:\\\/\\\/radicalbit.ai\\\/it\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/radicalbit.ai\\\/it\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/radicalbit.ai\\\/it\\\/#organization\",\"name\":\"Radicalbit\",\"url\":\"https:\\\/\\\/radicalbit.ai\\\/it\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/radicalbit.ai\\\/it\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/radicalbit.ai\\\/wp-content\\\/uploads\\\/2023\\\/11\\\/radicalbit__RGB__logo-horizontal-positive-e1701861883280.webp\",\"contentUrl\":\"https:\\\/\\\/radicalbit.ai\\\/wp-content\\\/uploads\\\/2023\\\/11\\\/radicalbit__RGB__logo-horizontal-positive-e1701861883280.webp\",\"width\":1570,\"height\":405,\"caption\":\"Radicalbit\"},\"image\":{\"@id\":\"https:\\\/\\\/radicalbit.ai\\\/it\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/company\\\/6639929\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/radicalbit.ai\\\/it\\\/#\\\/schema\\\/person\\\/de74cdd211ec3a7b59a057e090c55775\",\"name\":\"info@radicalbit.io\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/de37315918a122d6c01d47d2bb49129107f9f40152dbc5c8272aafd9ed5d5bd7?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/de37315918a122d6c01d47d2bb49129107f9f40152dbc5c8272aafd9ed5d5bd7?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/de37315918a122d6c01d47d2bb49129107f9f40152dbc5c8272aafd9ed5d5bd7?s=96&d=mm&r=g\",\"caption\":\"info@radicalbit.io\"},\"sameAs\":[\"https:\\\/\\\/radicalbit.ai\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Design system tips to spark joy","description":"For frontend developers a clean design system is a bless; how to avoid messy code strings with best practices and techniques?","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/radicalbit.ai\/it\/resources\/blog\/design-system-tips\/","og_locale":"it_IT","og_type":"article","og_title":"Sparking joy in a design system","og_description":"For frontend developers a clean design system is a bless; how to avoid messy code strings with best practices and techniques?","og_url":"https:\/\/radicalbit.ai\/it\/resources\/blog\/design-system-tips\/","og_site_name":"Radicalbit","article_published_time":"2021-04-19T16:48:00+00:00","article_modified_time":"2026-04-23T08:56:51+00:00","og_image":[{"width":1600,"height":900,"url":"http:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/Sparking-joy-in-a-design-system.jpg","type":"image\/jpeg"}],"author":"info@radicalbit.io","twitter_card":"summary_large_image","twitter_title":"Sparking joy in a design system","twitter_description":"For frontend developers a clean design system is a bless; how to avoid messy code strings with best practices and techniques?","twitter_image":"https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/Sparking-joy-in-a-design-system.jpg","twitter_misc":{"Scritto da":"info@radicalbit.io","Tempo di lettura stimato":"9 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/radicalbit.ai\/it\/resources\/blog\/design-system-tips\/#article","isPartOf":{"@id":"https:\/\/radicalbit.ai\/it\/resources\/blog\/design-system-tips\/"},"author":{"name":"info@radicalbit.io","@id":"https:\/\/radicalbit.ai\/it\/#\/schema\/person\/de74cdd211ec3a7b59a057e090c55775"},"headline":"Sparking joy in a design system","datePublished":"2021-04-19T16:48:00+00:00","dateModified":"2026-04-23T08:56:51+00:00","mainEntityOfPage":{"@id":"https:\/\/radicalbit.ai\/it\/resources\/blog\/design-system-tips\/"},"wordCount":1381,"publisher":{"@id":"https:\/\/radicalbit.ai\/it\/#organization"},"image":{"@id":"https:\/\/radicalbit.ai\/it\/resources\/blog\/design-system-tips\/#primaryimage"},"thumbnailUrl":"https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/Sparking-joy-in-a-design-system.jpg","keywords":["bem","design","design system","UI","UX"],"articleSection":["Blog","by Radicalbit"],"inLanguage":"it-IT"},{"@type":"WebPage","@id":"https:\/\/radicalbit.ai\/it\/resources\/blog\/design-system-tips\/","url":"https:\/\/radicalbit.ai\/it\/resources\/blog\/design-system-tips\/","name":"Design system tips to spark joy","isPartOf":{"@id":"https:\/\/radicalbit.ai\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/radicalbit.ai\/it\/resources\/blog\/design-system-tips\/#primaryimage"},"image":{"@id":"https:\/\/radicalbit.ai\/it\/resources\/blog\/design-system-tips\/#primaryimage"},"thumbnailUrl":"https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/Sparking-joy-in-a-design-system.jpg","datePublished":"2021-04-19T16:48:00+00:00","dateModified":"2026-04-23T08:56:51+00:00","description":"For frontend developers a clean design system is a bless; how to avoid messy code strings with best practices and techniques?","breadcrumb":{"@id":"https:\/\/radicalbit.ai\/it\/resources\/blog\/design-system-tips\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/radicalbit.ai\/it\/resources\/blog\/design-system-tips\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/radicalbit.ai\/it\/resources\/blog\/design-system-tips\/#primaryimage","url":"https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/Sparking-joy-in-a-design-system.jpg","contentUrl":"https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/12\/Sparking-joy-in-a-design-system.jpg","width":1600,"height":900,"caption":"Sparking joy in a design system"},{"@type":"BreadcrumbList","@id":"https:\/\/radicalbit.ai\/it\/resources\/blog\/design-system-tips\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/radicalbit.ai\/it\/"},{"@type":"ListItem","position":2,"name":"Sparking joy in a design system"}]},{"@type":"WebSite","@id":"https:\/\/radicalbit.ai\/it\/#website","url":"https:\/\/radicalbit.ai\/it\/","name":"Radicalbit","description":"Simpler, faster, better MLOps","publisher":{"@id":"https:\/\/radicalbit.ai\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/radicalbit.ai\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/radicalbit.ai\/it\/#organization","name":"Radicalbit","url":"https:\/\/radicalbit.ai\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/radicalbit.ai\/it\/#\/schema\/logo\/image\/","url":"https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/11\/radicalbit__RGB__logo-horizontal-positive-e1701861883280.webp","contentUrl":"https:\/\/radicalbit.ai\/wp-content\/uploads\/2023\/11\/radicalbit__RGB__logo-horizontal-positive-e1701861883280.webp","width":1570,"height":405,"caption":"Radicalbit"},"image":{"@id":"https:\/\/radicalbit.ai\/it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/company\/6639929\/"]},{"@type":"Person","@id":"https:\/\/radicalbit.ai\/it\/#\/schema\/person\/de74cdd211ec3a7b59a057e090c55775","name":"info@radicalbit.io","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/secure.gravatar.com\/avatar\/de37315918a122d6c01d47d2bb49129107f9f40152dbc5c8272aafd9ed5d5bd7?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/de37315918a122d6c01d47d2bb49129107f9f40152dbc5c8272aafd9ed5d5bd7?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/de37315918a122d6c01d47d2bb49129107f9f40152dbc5c8272aafd9ed5d5bd7?s=96&d=mm&r=g","caption":"info@radicalbit.io"},"sameAs":["https:\/\/radicalbit.ai"]}]}},"_links":{"self":[{"href":"https:\/\/radicalbit.ai\/it\/wp-json\/wp\/v2\/posts\/2972","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/radicalbit.ai\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/radicalbit.ai\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/radicalbit.ai\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/radicalbit.ai\/it\/wp-json\/wp\/v2\/comments?post=2972"}],"version-history":[{"count":31,"href":"https:\/\/radicalbit.ai\/it\/wp-json\/wp\/v2\/posts\/2972\/revisions"}],"predecessor-version":[{"id":11645,"href":"https:\/\/radicalbit.ai\/it\/wp-json\/wp\/v2\/posts\/2972\/revisions\/11645"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/radicalbit.ai\/it\/wp-json\/wp\/v2\/media\/3376"}],"wp:attachment":[{"href":"https:\/\/radicalbit.ai\/it\/wp-json\/wp\/v2\/media?parent=2972"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/radicalbit.ai\/it\/wp-json\/wp\/v2\/categories?post=2972"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/radicalbit.ai\/it\/wp-json\/wp\/v2\/tags?post=2972"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}