{"id":538,"date":"2017-06-22T09:47:58","date_gmt":"2017-06-22T09:47:58","guid":{"rendered":"https:\/\/devexperts.com\/blog\/?p=538"},"modified":"2022-05-18T10:55:48","modified_gmt":"2022-05-18T10:55:48","slug":"chameleon-a-cozy-palette-management-tool","status":"publish","type":"post","link":"https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/","title":{"rendered":"Chameleon: A Cozy Palette Management Tool"},"content":{"rendered":"\n<p>When a product suite is constantly evolving it can be a challenge to keep under control the combinatorial explosion of colors; particularly when you have to maintain a number of related products. This article describes the challenges, explores the different approaches and unveils the solution our UI designers and developers uncovered while customizing Devexperts trading applications.<\/p>\n\n\n\n<h2 id=\"h-the-problem\" class=\"wp-block-heading\">The Problem<\/h2>\n\n\n\n<p>At Devexperts we produce Desktop, Web and Mobile UI trading applications. These applications look alike and have similar skins. They can be customized on request for a client, and this leads to the development of custom skins. In general, the first release of a custom skin for each customer is based on the initial product and slightly evolves during the product life cycle, which can last many years.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>Now let\u2019s look at the case in question.<\/p><\/blockquote>\n\n\n\n<p>Any trading application is a complex interface, consisting of multiple colors. Assigning different pixel-perfect editions for desktop, tablet, and mobile screens will triple that number. In addition, the designer works with several skins such as \u201cday\u201d and \u201cnight\u201d themes or countless white-labels. This makes the situation difficult to manage and can result in a designer juggling thousands of colors.<\/p>\n\n\n\n<p>Typical use-cases are:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>inspecting colors used in controls across all applications, editions and their white-labels<\/li><li>controlling the opacity of an element<\/li><li>adjusting the color appearance of any element<\/li><li>comparing<\/li><li>finding outdated colors, then updating and recoloring them synchronously in one product lineup<\/li><\/ul>\n\n\n\n<p>The labor intensive work outlined above is achieved by repeating every color occurrence in code. We use semantic names for these occurrences and call them variables. As you can imagine a certain amount of automation and discipline is needed in the color management process. But how can we embed automation? What can be a good instrument for designers to control and manage changes &#8211; and for developers to apply them?<\/p>\n\n\n\n<h2 id=\"h-our-goal\" class=\"wp-block-heading\">Our goal<\/h2>\n\n\n\n<p>We set ourselves the goal of improving navigation, and simplifying (for all the parties involved in the development) the management of one or more color palette at a time.<\/p>\n\n\n\n<p>This issue was uncovered by one of our designers while buried in color palette pages on Confluence wiki. They discovered that the amount of variables became innumerable.<\/p>\n\n\n\n<h2 id=\"h-possible-solutions\" class=\"wp-block-heading\">Possible solutions<\/h2>\n\n\n\n<p>First we turned to some well-known applications.<\/p>\n\n\n\n<h3 id=\"h-1-confluence-or-another-corporate-wiki\" class=\"wp-block-heading\">1. Confluence or another Corporate Wiki<\/h3>\n\n\n\n<p>This is actually where we were stuck for quite some time. Here is why we abandoned Confluence pages:<\/p>\n\n\n\n<p><strong>1.1<\/strong> <strong>Comparison problems<\/strong><\/p>\n\n\n\n<p>When using Confluence pages, one palette of an individual skin takes an entire page. When you have a mobile app with five skins it means you have five separate tabs and need to switch between them. Of course you can put all of the skins into one Confluence page with an aggregated color palette \u2014 just create a column for all five skins. This can solve the problem for some time. But for proper tracking of changes you need to create a new column for each \u201crelease\u201d of the color palette. So the number of columns dramatically grows and as a result \u2014 it decreases the overall page performance in a browser and makes the data harder to scan with the naked eye. In addition, it\u2019s impossible to compare two or more palettes of different projects without odd mouse clicks.<\/p>\n\n\n\n<p><strong>1.2 Time-consuming search of changes<\/strong><\/p>\n\n\n\n<p>A second example: working on a white-label project a designer made changes to a UI element, colored it in red, and after that informed a developer to apply it. In general, palettes do not change all that often between stages. They also stay consistent across editions, and any changes usually touch a small subset of variables. Despite this the developer has to manually find what was changed<strong>, <\/strong>scrolling pages all the way up and down, or, if they are lucky enough, using the search field. Sometimes they may even have to look at the page history of years-old releases, if variables look confusing.<\/p>\n\n\n\n<p>Both a designer and a developer have to check whether the variables across several palettes are aligned, verify that the differences are intentional and a human mistake did not take place. Confluence has a special diff function that can be used to compare versions of color palettes. But it was designed for code or plain text. A table structure with colors and variables often ends up misaligned even when trying to check quite minor changes.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/page_history_Confluence.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"536\" src=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/page_history_Confluence-1024x536.png\" alt=\"Page History in Confluence\" class=\"wp-image-539\" srcset=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/page_history_Confluence-1024x536.png 1024w, https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/page_history_Confluence-300x157.png 300w, https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/page_history_Confluence-768x402.png 768w, https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/page_history_Confluence.png 1543w\" sizes=\"auto, (max-width: 959px) calc(100vw - 30px), 870px\" \/><\/a><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/page_history_Confluence_.png\"><img loading=\"lazy\" decoding=\"async\" width=\"947\" height=\"40\" src=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/page_history_Confluence_.png\" alt=\"one variable relocated\" class=\"wp-image-540\" srcset=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/page_history_Confluence_.png 947w, https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/page_history_Confluence_-300x13.png 300w, https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/page_history_Confluence_-768x32.png 768w\" sizes=\"auto, (max-width: 959px) calc(100vw - 30px), 870px\" \/><\/a><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/page_history_Confluence_2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"66\" src=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/page_history_Confluence_2-300x66.png\" alt=\"one variable relocated\" class=\"wp-image-541\" srcset=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/page_history_Confluence_2-300x66.png 300w, https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/page_history_Confluence_2.png 520w\" sizes=\"auto, (max-width: 959px) calc(100vw - 30px), 870px\" \/><\/a><figcaption> <em>The illustrations above show one variable reallocated. <\/em> <\/figcaption><\/figure><\/div>\n\n\n\n<p>Take note that in addition you cannot name any changes in the history. So if you want to compare a new palette with a certain previous release, you need to remember the exact date and time of the release.<\/p>\n\n\n\n<h3 id=\"h-2-spreadsheets--excellike-software\" class=\"wp-block-heading\">2. Spreadsheets \/ Excel-like Software<\/h3>\n\n\n\n<p>Google Sheets may first spring to mind. That would probably work fine for a small company with 2-3 applications or websites. Particularly, if you\u2019re not expecting to work with multiple versions at the same time, or require a substantial expansion in the future with regards to themes, white-labels <g class=\"gr_ gr_5 gr-alert gr_gramm gr_inline_cards gr_run_anim Punctuation only-ins replaceWithoutSep\" id=\"5\" data-gr-id=\"5\">and<\/g> skins.<\/p>\n\n\n\n<p>However, it has the same weaknesses as a wiki. Let&#8217;s imagine the following situation: you have one color palette for one product consisting of 100 colors. After receiving orders for 10 white-labels and 4 app editions (desktop, web, tablet, smartphone) you will get 4k colors. Multiply this by Development, QA and Production stages and you&#8217;ll end up with 12k colors.<\/p>\n\n\n\n<p>All web-based table\/ spreadsheet software uploads all of the columns of stored color palettes. You can use the hide\/ unhide option to select a specific subset of color palettes, but this is not convenient for the most popular case when you need just two exact color palettes out of 10 or 20+ palettes. Although Excel is a mighty tool, it requires you to perform extra mouse clicks and strain your eyes.<\/p>\n\n\n\n<p>In addition, you also need to be disciplined and follow the same structure, which you defined to pre-existing skins, when you are in the process of creating another palette.<\/p>\n\n\n\n<p>The revision history function in Google Sheets works in a similar way to Confluence pages and cannot visualize useful diff data between two exact versions (releases) of color palette. To compare the differences between the current and the previous version there is a whole class of software called VCS.<\/p>\n\n\n\n<h3 id=\"h-3-version-control-systems\" class=\"wp-block-heading\">3. Version Control Systems<\/h3>\n\n\n\n<p><strong>VCS<\/strong> is a great tool for text files. But here 2 major problems arise:<\/p>\n\n\n\n<p><strong>3.1 Comparison problem<\/strong><\/p>\n\n\n\n<p>VCS helps us to work with multiple revisions of one file. But engineers often need to compare two different palettes, and different palettes are represented with different files. VCS is not much help here, because it doesn\u2019t consider these files as related.<\/p>\n\n\n\n<p><strong>3.2 Color preview<\/strong><\/p>\n\n\n\n<p>VCS cannot depict colors in an accurate way, which is essential for a designer. Without a good preview you have to keep in mind the text color codes and check on them each time, which increases cognitive load. Basic color representation in some code-highlighting systems gives a better understanding of what is going on for one column of text, but it fails in comparison with a table structure with multiple columns and large colored cells.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/Color_codes_in_VCS.png\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"231\" src=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/Color_codes_in_VCS-300x231.png\" alt=\"Color codes in VCS\" class=\"wp-image-542\" srcset=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/Color_codes_in_VCS-300x231.png 300w, https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/Color_codes_in_VCS.png 378w\" sizes=\"auto, (max-width: 959px) calc(100vw - 30px), 870px\" \/><\/a><figcaption> Color codes in VCS <\/figcaption><\/figure><\/div>\n\n\n\n<p>With all of these problems and use-cases in mind and, after thoroughly exploring every possible option, we have developed a tool called Chameleon.<\/p>\n\n\n\n<h2 id=\"h-chameleon\" class=\"wp-block-heading\">Chameleon<\/h2>\n\n\n\n<p>It is a web tool for color management that can be used for white-labels, releases and during all the production stages of new products.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/Inspect-colors-in-Chameleon.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"569\" src=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/Inspect-colors-in-Chameleon-1024x569.png\" alt=\"Inspect colors in Chameleon\" class=\"wp-image-543\" srcset=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/Inspect-colors-in-Chameleon-1024x569.png 1024w, https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/Inspect-colors-in-Chameleon-300x167.png 300w, https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/Inspect-colors-in-Chameleon-768x426.png 768w, https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/Inspect-colors-in-Chameleon.png 1230w\" sizes=\"auto, (max-width: 959px) calc(100vw - 30px), 870px\" \/><\/a><figcaption> Inspect colors in Chameleon <\/figcaption><\/figure><\/div>\n\n\n\n<h3 id=\"h-features-for-the-design-team\" class=\"wp-block-heading\"><strong>Features for the Design Team:<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Observe a list of variables and see how it was used in different color palettes for different projects.<\/li><\/ul>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/variables-names.png\"><img loading=\"lazy\" decoding=\"async\" width=\"237\" height=\"226\" src=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/variables-names.png\" alt=\"variables names Chameleon\" class=\"wp-image-544\"\/><\/a><figcaption> Variables names <\/figcaption><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/edit-Variables-in-Chameleon.png\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"235\" src=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/edit-Variables-in-Chameleon-300x235.png\" alt=\"edit Variables in Chameleon\" class=\"wp-image-545\" srcset=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/edit-Variables-in-Chameleon-300x235.png 300w, https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/edit-Variables-in-Chameleon.png 550w\" sizes=\"auto, (max-width: 959px) calc(100vw - 30px), 870px\" \/><\/a><figcaption> Variables comparison <\/figcaption><\/figure><\/div>\n\n\n\n<ul class=\"wp-block-list\"><li>Observe colors for all variables involved for a particular project.<\/li><\/ul>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/list-of-colors-for-a-particular-project.png\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"278\" src=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/list-of-colors-for-a-particular-project-300x278.png\" alt=\"list of colors for a particular project\" class=\"wp-image-546\" srcset=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/list-of-colors-for-a-particular-project-300x278.png 300w, https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/list-of-colors-for-a-particular-project.png 338w\" sizes=\"auto, (max-width: 959px) calc(100vw - 30px), 870px\" \/><\/a><figcaption> List of colors for a particular project <\/figcaption><\/figure><\/div>\n\n\n\n<ul class=\"wp-block-list\"><li>Control and review changes during a current editing session.<\/li><\/ul>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/save-changes.png\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"152\" src=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/save-changes-300x152.png\" alt=\"save changes in Chameleon\" class=\"wp-image-547\" srcset=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/save-changes-300x152.png 300w, https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/save-changes.png 414w\" sizes=\"auto, (max-width: 959px) calc(100vw - 30px), 870px\" \/><\/a><figcaption> <em>Save changes<\/em> <\/figcaption><\/figure><\/div>\n\n\n\n<ul class=\"wp-block-list\"><li>Compare changes in a current palette with any version of this palette in the past.<\/li><\/ul>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/Diff-view-in-Chameleon.png\"><img loading=\"lazy\" decoding=\"async\" width=\"960\" height=\"349\" src=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/Diff-view-in-Chameleon.png\" alt=\"Diff view\" class=\"wp-image-548\" srcset=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/Diff-view-in-Chameleon.png 960w, https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/Diff-view-in-Chameleon-300x109.png 300w, https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/Diff-view-in-Chameleon-768x279.png 768w\" sizes=\"auto, (max-width: 959px) calc(100vw - 30px), 870px\" \/><\/a><figcaption> Diff view between 2 versions of palette showing additional colors for new \u201cError Tooltip\u201d objects<\/figcaption><\/figure><\/div>\n\n\n\n<h3 id=\"h-features-for-the-development-teams-\" class=\"wp-block-heading\"><strong>Features for the Development teams: <\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Design updates in production releases: Successful business projects go through milestone (releases) which are deployed in a production environment. In this case the color scheme of master and released projects must be separated. Sometimes, development teams get requests for new developments in already released versions. It saves significant time if a designer and a developer are able to load a snapshot of a released color scheme and slightly change it, rather than use color schemes of master versions which may quietly change since the release went to production.<\/li><\/ul>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><a href=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/Snapshots.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/Snapshots.png\" alt=\"Snapshots of color schemes\" class=\"wp-image-549\" width=\"446\" height=\"210\" srcset=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/Snapshots.png 595w, https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/Snapshots-300x141.png 300w\" sizes=\"auto, (max-width: 959px) calc(100vw - 30px), 870px\" \/><\/a><figcaption> <em>Snapshots of released (R0, R1) and current (Head) color schemes<\/em> <\/figcaption><\/figure><\/div>\n\n\n\n<ul class=\"wp-block-list\"><li>Incremental design updates: Development team members should be able to get diff between already applied versions of color schemes, and its current version for each release of their UI component.<\/li><\/ul>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/Diff-function.png\"><img loading=\"lazy\" decoding=\"async\" width=\"230\" height=\"211\" src=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/06\/Diff-function.png\" alt=\"Diff function\" class=\"wp-image-550\"\/><\/a><figcaption> Diff function <\/figcaption><\/figure><\/div>\n\n\n\n<h3 id=\"h-a-few-words-about-the-technologies-we-used\" class=\"wp-block-heading\"><strong>A few words about the technologies we used:<\/strong><\/h3>\n\n\n\n<p>Since this is a typical small-scale enterprise web app, we decided to use the tools which are most familiar to us and which would help us implement the solution quickly. For those who are interested in this particular example, we used:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Spring-boot<\/li><li>H2 Database Engine<\/li><li>jsoup<\/li><li>Junit<\/li><li>WebJars<\/li><li>AngularJS<\/li><li>Bootstrap<\/li><li>Swagger.<\/li><\/ul>\n\n\n\n<p>We opensourced <a href=\"https:\/\/github.com\/Devexperts\/chameleon\">Chameleon<\/a> on GitHub for everyone. If you have thoughts on how to improve Chameleon, we would be pleased to hear from you &#8211; just leave a comment below!<\/p>\n\n\n\n<p>Is the color management process a nightmare for you?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>When a product suite is constantly evolving it can be a challenge to keep under control the combinatorial explosion of &hellip; <\/p>\n","protected":false},"author":7,"featured_media":1619,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2020],"tags":[23,36,22],"class_list":["post-538","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-fintech","tag-design","tag-development","tag-ui"],"acf":{"nifty_post_card_image":null,"nifty_post_card_index_big":null,"nifty_post_inner_image":null,"nifty_post_card_banner":null},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Chameleon: A Cozy Palette Management Tool \u2013 Devexperts Blog<\/title>\n<meta name=\"description\" content=\"When a product suite is constantly evolving it can be a challenge to keep under control the combinatorial explosion of colors. Chameleon solves this task.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Chameleon: A Cozy Palette Management Tool\" \/>\n<meta property=\"og:description\" content=\"When a product suite is constantly evolving it can be a challenge to keep under control the combinatorial explosion of colors. Chameleon solves this task.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/\" \/>\n<meta property=\"og:site_name\" content=\"Devexperts Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/devexperts\/\" \/>\n<meta property=\"article:published_time\" content=\"2017-06-22T09:47:58+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-05-18T10:55:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/10\/blue-full.png\" \/>\n\t<meta property=\"og:image:width\" content=\"3840\" \/>\n\t<meta property=\"og:image:height\" content=\"700\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@devexperts\" \/>\n<meta name=\"twitter:site\" content=\"@devexperts\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/\"},\"headline\":\"Chameleon: A Cozy Palette Management Tool\",\"datePublished\":\"2017-06-22T09:47:58+00:00\",\"dateModified\":\"2022-05-18T10:55:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/\"},\"wordCount\":1542,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/devexperts.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/10\/blue-full.png\",\"keywords\":[\"design\",\"development\",\"UI\"],\"articleSection\":[\"Fintech\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/\",\"url\":\"https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/\",\"name\":\"Chameleon: A Cozy Palette Management Tool \u2013 Devexperts Blog\",\"isPartOf\":{\"@id\":\"https:\/\/devexperts.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/10\/blue-full.png\",\"datePublished\":\"2017-06-22T09:47:58+00:00\",\"dateModified\":\"2022-05-18T10:55:48+00:00\",\"description\":\"When a product suite is constantly evolving it can be a challenge to keep under control the combinatorial explosion of colors. Chameleon solves this task.\",\"breadcrumb\":{\"@id\":\"https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/#primaryimage\",\"url\":\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/10\/blue-full.png\",\"contentUrl\":\"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/10\/blue-full.png\",\"width\":3840,\"height\":700},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/devexperts.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Chameleon: A Cozy Palette Management Tool\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/devexperts.com\/blog\/#website\",\"url\":\"https:\/\/devexperts.com\/blog\/\",\"name\":\"Devexperts Blog\",\"description\":\"We make complex finance ideas on technology, innovation and business simple\",\"publisher\":{\"@id\":\"https:\/\/devexperts.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/devexperts.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/devexperts.com\/blog\/#organization\",\"name\":\"Devexperts LLC\",\"url\":\"https:\/\/devexperts.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/devexperts.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/devexperts.com\/blog\/app\/uploads\/2019\/08\/DX-logo.png\",\"contentUrl\":\"https:\/\/devexperts.com\/blog\/app\/uploads\/2019\/08\/DX-logo.png\",\"width\":167,\"height\":30,\"caption\":\"Devexperts LLC\"},\"image\":{\"@id\":\"https:\/\/devexperts.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/devexperts\/\",\"https:\/\/x.com\/devexperts\",\"https:\/\/www.linkedin.com\/company\/devexperts\",\"https:\/\/www.youtube.com\/channel\/UCF3FRmes2KrcVsTXQ1aAB5w\/featured\"]}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Chameleon: A Cozy Palette Management Tool \u2013 Devexperts Blog","description":"When a product suite is constantly evolving it can be a challenge to keep under control the combinatorial explosion of colors. Chameleon solves this task.","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:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/","og_locale":"en_US","og_type":"article","og_title":"Chameleon: A Cozy Palette Management Tool","og_description":"When a product suite is constantly evolving it can be a challenge to keep under control the combinatorial explosion of colors. Chameleon solves this task.","og_url":"https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/","og_site_name":"Devexperts Blog","article_publisher":"https:\/\/www.facebook.com\/devexperts\/","article_published_time":"2017-06-22T09:47:58+00:00","article_modified_time":"2022-05-18T10:55:48+00:00","og_image":[{"width":3840,"height":700,"url":"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/10\/blue-full.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_creator":"@devexperts","twitter_site":"@devexperts","twitter_misc":{"Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/#article","isPartOf":{"@id":"https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/"},"headline":"Chameleon: A Cozy Palette Management Tool","datePublished":"2017-06-22T09:47:58+00:00","dateModified":"2022-05-18T10:55:48+00:00","mainEntityOfPage":{"@id":"https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/"},"wordCount":1542,"commentCount":0,"publisher":{"@id":"https:\/\/devexperts.com\/blog\/#organization"},"image":{"@id":"https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/#primaryimage"},"thumbnailUrl":"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/10\/blue-full.png","keywords":["design","development","UI"],"articleSection":["Fintech"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/","url":"https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/","name":"Chameleon: A Cozy Palette Management Tool \u2013 Devexperts Blog","isPartOf":{"@id":"https:\/\/devexperts.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/#primaryimage"},"image":{"@id":"https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/#primaryimage"},"thumbnailUrl":"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/10\/blue-full.png","datePublished":"2017-06-22T09:47:58+00:00","dateModified":"2022-05-18T10:55:48+00:00","description":"When a product suite is constantly evolving it can be a challenge to keep under control the combinatorial explosion of colors. Chameleon solves this task.","breadcrumb":{"@id":"https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/#primaryimage","url":"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/10\/blue-full.png","contentUrl":"https:\/\/devexperts.com\/blog\/app\/uploads\/2017\/10\/blue-full.png","width":3840,"height":700},{"@type":"BreadcrumbList","@id":"https:\/\/devexperts.com\/blog\/chameleon-a-cozy-palette-management-tool\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/devexperts.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Chameleon: A Cozy Palette Management Tool"}]},{"@type":"WebSite","@id":"https:\/\/devexperts.com\/blog\/#website","url":"https:\/\/devexperts.com\/blog\/","name":"Devexperts Blog","description":"We make complex finance ideas on technology, innovation and business simple","publisher":{"@id":"https:\/\/devexperts.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/devexperts.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/devexperts.com\/blog\/#organization","name":"Devexperts LLC","url":"https:\/\/devexperts.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/devexperts.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/devexperts.com\/blog\/app\/uploads\/2019\/08\/DX-logo.png","contentUrl":"https:\/\/devexperts.com\/blog\/app\/uploads\/2019\/08\/DX-logo.png","width":167,"height":30,"caption":"Devexperts LLC"},"image":{"@id":"https:\/\/devexperts.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/devexperts\/","https:\/\/x.com\/devexperts","https:\/\/www.linkedin.com\/company\/devexperts","https:\/\/www.youtube.com\/channel\/UCF3FRmes2KrcVsTXQ1aAB5w\/featured"]}]}},"_links":{"self":[{"href":"https:\/\/devexperts.com\/blog\/wp-json\/wp\/v2\/posts\/538","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devexperts.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devexperts.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devexperts.com\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/devexperts.com\/blog\/wp-json\/wp\/v2\/comments?post=538"}],"version-history":[{"count":28,"href":"https:\/\/devexperts.com\/blog\/wp-json\/wp\/v2\/posts\/538\/revisions"}],"predecessor-version":[{"id":2191,"href":"https:\/\/devexperts.com\/blog\/wp-json\/wp\/v2\/posts\/538\/revisions\/2191"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devexperts.com\/blog\/wp-json\/wp\/v2\/media\/1619"}],"wp:attachment":[{"href":"https:\/\/devexperts.com\/blog\/wp-json\/wp\/v2\/media?parent=538"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devexperts.com\/blog\/wp-json\/wp\/v2\/categories?post=538"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devexperts.com\/blog\/wp-json\/wp\/v2\/tags?post=538"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}