<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Rocketium Blog: Engineering]]></title><description><![CDATA[Everything that Rocketium's engineering team is building for the enterprise community to adopt design-led growth. ]]></description><link>https://blog.rocketium.com/s/engineering</link><image><url>https://substackcdn.com/image/fetch/$s_!uxUG!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f056652-e0db-40c3-8879-a695b5afec07_500x500.png</url><title>Rocketium Blog: Engineering</title><link>https://blog.rocketium.com/s/engineering</link></image><generator>Substack</generator><lastBuildDate>Sat, 18 Apr 2026 02:59:43 GMT</lastBuildDate><atom:link href="https://blog.rocketium.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Rocketium]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[rocketium@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[rocketium@substack.com]]></itunes:email><itunes:name><![CDATA[Rocketium]]></itunes:name></itunes:owner><itunes:author><![CDATA[Rocketium]]></itunes:author><googleplay:owner><![CDATA[rocketium@substack.com]]></googleplay:owner><googleplay:email><![CDATA[rocketium@substack.com]]></googleplay:email><googleplay:author><![CDATA[Rocketium]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Achieving Peak Performance 🚀: Harnessing the Power of Redux Sagas in Large-Scale Frontend Optimisation]]></title><description><![CDATA[Optimize, Streamline, Excel: The Redux Sagas Advantage for Frontend!]]></description><link>https://blog.rocketium.com/p/achieving-peak-performance-harnessing</link><guid isPermaLink="false">https://blog.rocketium.com/p/achieving-peak-performance-harnessing</guid><dc:creator><![CDATA[Nitin]]></dc:creator><pubDate>Thu, 26 Oct 2023 11:07:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!sI8I!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5ba9d01-ba58-4801-963d-cdebe8b08a35_1200x628.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sI8I!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5ba9d01-ba58-4801-963d-cdebe8b08a35_1200x628.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sI8I!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5ba9d01-ba58-4801-963d-cdebe8b08a35_1200x628.png 424w, https://substackcdn.com/image/fetch/$s_!sI8I!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5ba9d01-ba58-4801-963d-cdebe8b08a35_1200x628.png 848w, https://substackcdn.com/image/fetch/$s_!sI8I!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5ba9d01-ba58-4801-963d-cdebe8b08a35_1200x628.png 1272w, https://substackcdn.com/image/fetch/$s_!sI8I!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5ba9d01-ba58-4801-963d-cdebe8b08a35_1200x628.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sI8I!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5ba9d01-ba58-4801-963d-cdebe8b08a35_1200x628.png" width="1200" height="628" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b5ba9d01-ba58-4801-963d-cdebe8b08a35_1200x628.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:628,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:18902,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!sI8I!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5ba9d01-ba58-4801-963d-cdebe8b08a35_1200x628.png 424w, https://substackcdn.com/image/fetch/$s_!sI8I!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5ba9d01-ba58-4801-963d-cdebe8b08a35_1200x628.png 848w, https://substackcdn.com/image/fetch/$s_!sI8I!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5ba9d01-ba58-4801-963d-cdebe8b08a35_1200x628.png 1272w, https://substackcdn.com/image/fetch/$s_!sI8I!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5ba9d01-ba58-4801-963d-cdebe8b08a35_1200x628.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Introduction</h3><p>In today's fast-paced world of web development, delivering high-performance applications at scale is a challenging endeavor. As the demands on front-end projects grow, optimizing performance becomes paramount to ensure exceptional user experiences. Today, we will dive deep into how we at Rocketium tackled performance issues by employing Redux Sagas, an indispensable middleware for Redux.</p><h3>The Challenge: Performance Bottlenecks and Complexity</h3><p>At Rocketium, we handle images and videos, editing, and generation on a massive scale. Our web application encounters the demanding task of managing 10,000 creatives, in a single session. With a high volume of custom position and style changes for every element of the creative, we need to ensure optimal speed and performance is imperative. </p><p>As our web app grew in complexity, incorporating new features and heavy operations, we encountered performance issues. We observed lags, delays during dragging and dropping, and overall performance hindrances. Additionally, crashes and memory issues became more frequent, leading to a sluggish user experience. The number of re-renders per action reached around 40, even affecting components unrelated to the specific action and the FPS dropped to almost 0 on almost every action, causing significant challenges. &#129327;</p><h3>Setting up: THE GOAL</h3><p>Our relentless pursuit of excellence and unwavering commitment to providing a seamless user experience propelled us to embark on a transformative journey of UI optimization. We recognized the critical importance of enhancing the performance and responsiveness of our web application to meet the ever-growing demands of our users. Our primary goals were:</p><ol><li><p><strong>(G) </strong><em><strong>reater performance and responsiveness</strong></em>: Our aim was to deliver a highly performant web application capable of handling the massive scale of image editing and generation tasks.</p></li><li><p><strong>(O) </strong><em><strong>ptimal stability and reliability</strong></em>: Crashes not only disrupt user workflows but also tarnish the reputation of our product. We made it a top priority to eliminate crashes, avoid FPS drops and provide a stabile web app. Our commitment to quality and reliability drove us to ensure a rock-solid foundation for our web application.</p></li><li><p><strong>(A) </strong><em><strong>gile memory management and effective error handling</strong></em>: Memory leaks and inefficient error handling can lead to significant performance degradation and compromise the stability of our application. We aimed to proactively identify and resolve any memory leaks, ensuring optimal resource utilization.</p></li><li><p><strong>(L) </strong><em><strong>esser Re-renders</strong></em>: Excessive re-renders can result in sluggish UI interactions and hinder the overall performance of the web application. Our goal was to bring down the number of re-renders to zero or, at most, one per relevant change.</p></li></ol><p>We had to deep dive into the intricacies of frontend development to fulfill our goals.</p><h3>The First Step: Identifying the Root Cause of the Issues</h3><p>At Rocketium, we adhere to the principle of identifying the root cause of any issue before diving into the implementation phase. This approach allows us to gain a comprehensive understanding of the problem at hand, enabling us to develop effective solutions. When it came to optimizing the performance of our web application, we followed this principle diligently.</p><p>To kickstart our journey, we utilized various tools such as Lighthouse and Google's FPS (Frames Per Second) tracker. These tools allowed us to measure and record the performance of our web application accurately. By analyzing metrics such as load times, rendering speed, and overall responsiveness, we gained valuable insights into the areas that required optimization.</p><p>By leveraging these pre-optimization data, we not only gained a baseline performance measurement but also had a clear understanding of the existing pain points. This data-driven approach ensured that our subsequent iterative changes were focused on the right areas and guided us towards the most impactful optimizations.</p><p>Starting with a thorough analysis of our web application's performance, we set the stage for a systematic and targeted optimization process. Armed with insights and a clear understanding of the issues at hand, we were ready to dive into the technical aspects and implement the necessary changes to enhance our web application's performance and user experience.</p><p>During this analysis, we were able to pinpoint several key root causes contributing to the performance issues:</p><ol><li><p><strong>Irrelevant Dependencies</strong>: We discovered that many components were unnecessarily dependent on modules and listening to state variables that were not required for their functionality. This dependency on irrelevant data led to unnecessary re-renders and negatively impacted the overall performance of the web application.</p></li><li><p><strong>Coupled Business Logic and UI</strong>: Over time, the components in our application had become tightly coupled with both the business and operational logic, as well as the data received from APIs. This coupling resulted in the components being subscribed to a multitude of variables and local states. Consequently, even a minor change in one of these variables triggered re-renders throughout the component hierarchy, leading to significant performance degradation.</p></li><li><p><strong>Accumulation of Re-renders</strong>: Given the heavy operations performed by our web application, the accumulation of re-renders over time proved to be a significant challenge. As more and more re-renders occurred, the browser tab experienced memory leaks and ultimately crashed, causing disruptions for our users.</p><p></p><p>Identifying these root causes laid the foundation for our subsequent optimization efforts. Armed with this knowledge, we could devise targeted strategies to address each issue and optimize the performance of our web application.</p></li></ol><h3>Finding the Right Solution</h3><p>After identifying the root causes of our performance issues, we realized that a combination of modularization and separating concerns (UI and logic) would be the key to solving our problems. We recognized that breaking down components into smaller, more focused modules would address some of the issues related to code coupling and unnecessary re-renders. However, we also needed a solution to handle complex asynchronous operations and manage side effects efficiently.</p><p>After careful evaluation, we decided to incorporate Redux Sagas into our architecture. <a href="https://redux-saga.js.org/">Redux Sagas</a> is a middleware library that specializes in managing asynchronous flows in Redux applications. It provides a way to separate complex logic from components and reducers, offering a more structured and organized approach to handling asynchronous operations.</p><h3>Addressing the Performance Challenge: Strategies and Implementations:</h3><p>Let's take the example of a component responsible for handling the position change of an element in an image. This was the existing code that was causing performance issues. It may seem simple, but actually, there are a lot of dependencies that we need to change in order to calculate the new coordinates and update them to show them in our editor&#8217;s preview. Notice how all the selectors that are irrelevant and unwanted are also imported and how the logic is present in that same file.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Rr9X!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f515579-4b0e-49c4-bd01-3a4ad3f8c22b_3528x5781.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Rr9X!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f515579-4b0e-49c4-bd01-3a4ad3f8c22b_3528x5781.png 424w, https://substackcdn.com/image/fetch/$s_!Rr9X!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f515579-4b0e-49c4-bd01-3a4ad3f8c22b_3528x5781.png 848w, https://substackcdn.com/image/fetch/$s_!Rr9X!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f515579-4b0e-49c4-bd01-3a4ad3f8c22b_3528x5781.png 1272w, https://substackcdn.com/image/fetch/$s_!Rr9X!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f515579-4b0e-49c4-bd01-3a4ad3f8c22b_3528x5781.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Rr9X!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f515579-4b0e-49c4-bd01-3a4ad3f8c22b_3528x5781.png" width="1456" height="2386" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1f515579-4b0e-49c4-bd01-3a4ad3f8c22b_3528x5781.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2386,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2680446,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Rr9X!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f515579-4b0e-49c4-bd01-3a4ad3f8c22b_3528x5781.png 424w, https://substackcdn.com/image/fetch/$s_!Rr9X!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f515579-4b0e-49c4-bd01-3a4ad3f8c22b_3528x5781.png 848w, https://substackcdn.com/image/fetch/$s_!Rr9X!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f515579-4b0e-49c4-bd01-3a4ad3f8c22b_3528x5781.png 1272w, https://substackcdn.com/image/fetch/$s_!Rr9X!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f515579-4b0e-49c4-bd01-3a4ad3f8c22b_3528x5781.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p><strong>Modularization: Separating Components, Sagas, and Reducers<br></strong>We created a separate module for every component/sub-component. The file structure looked something like this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vJop!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ddc8113-6f8c-4b60-8a96-f8a4169db7b9_690x256.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vJop!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ddc8113-6f8c-4b60-8a96-f8a4169db7b9_690x256.png 424w, https://substackcdn.com/image/fetch/$s_!vJop!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ddc8113-6f8c-4b60-8a96-f8a4169db7b9_690x256.png 848w, https://substackcdn.com/image/fetch/$s_!vJop!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ddc8113-6f8c-4b60-8a96-f8a4169db7b9_690x256.png 1272w, https://substackcdn.com/image/fetch/$s_!vJop!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ddc8113-6f8c-4b60-8a96-f8a4169db7b9_690x256.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vJop!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ddc8113-6f8c-4b60-8a96-f8a4169db7b9_690x256.png" width="690" height="256" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9ddc8113-6f8c-4b60-8a96-f8a4169db7b9_690x256.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:256,&quot;width&quot;:690,&quot;resizeWidth&quot;:690,&quot;bytes&quot;:34115,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vJop!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ddc8113-6f8c-4b60-8a96-f8a4169db7b9_690x256.png 424w, https://substackcdn.com/image/fetch/$s_!vJop!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ddc8113-6f8c-4b60-8a96-f8a4169db7b9_690x256.png 848w, https://substackcdn.com/image/fetch/$s_!vJop!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ddc8113-6f8c-4b60-8a96-f8a4169db7b9_690x256.png 1272w, https://substackcdn.com/image/fetch/$s_!vJop!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ddc8113-6f8c-4b60-8a96-f8a4169db7b9_690x256.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>To address the intertwined nature of our code, we embarked on a journey of modularization. Here's how we de-coupled all the logic, separated the business layer, and made the component modular:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-ydM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F242134cd-5501-4bb5-8c80-0bb1f7abb294_3528x5985.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-ydM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F242134cd-5501-4bb5-8c80-0bb1f7abb294_3528x5985.png 424w, https://substackcdn.com/image/fetch/$s_!-ydM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F242134cd-5501-4bb5-8c80-0bb1f7abb294_3528x5985.png 848w, https://substackcdn.com/image/fetch/$s_!-ydM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F242134cd-5501-4bb5-8c80-0bb1f7abb294_3528x5985.png 1272w, https://substackcdn.com/image/fetch/$s_!-ydM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F242134cd-5501-4bb5-8c80-0bb1f7abb294_3528x5985.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-ydM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F242134cd-5501-4bb5-8c80-0bb1f7abb294_3528x5985.png" width="728" height="1235" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/242134cd-5501-4bb5-8c80-0bb1f7abb294_3528x5985.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:2470,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:2485568,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-ydM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F242134cd-5501-4bb5-8c80-0bb1f7abb294_3528x5985.png 424w, https://substackcdn.com/image/fetch/$s_!-ydM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F242134cd-5501-4bb5-8c80-0bb1f7abb294_3528x5985.png 848w, https://substackcdn.com/image/fetch/$s_!-ydM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F242134cd-5501-4bb5-8c80-0bb1f7abb294_3528x5985.png 1272w, https://substackcdn.com/image/fetch/$s_!-ydM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F242134cd-5501-4bb5-8c80-0bb1f7abb294_3528x5985.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Moved business logic to saga<br></strong>After de-coupling it from the main rendering file, we moved the logic for calculating the new coordinates and dimensions of the element to the saga middleware.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ysfC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F814b0e65-d394-4434-900f-5fb8f0e5f91f_2607x3969.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ysfC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F814b0e65-d394-4434-900f-5fb8f0e5f91f_2607x3969.png 424w, https://substackcdn.com/image/fetch/$s_!ysfC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F814b0e65-d394-4434-900f-5fb8f0e5f91f_2607x3969.png 848w, https://substackcdn.com/image/fetch/$s_!ysfC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F814b0e65-d394-4434-900f-5fb8f0e5f91f_2607x3969.png 1272w, https://substackcdn.com/image/fetch/$s_!ysfC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F814b0e65-d394-4434-900f-5fb8f0e5f91f_2607x3969.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ysfC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F814b0e65-d394-4434-900f-5fb8f0e5f91f_2607x3969.png" width="1456" height="2217" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/814b0e65-d394-4434-900f-5fb8f0e5f91f_2607x3969.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2217,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1564828,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ysfC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F814b0e65-d394-4434-900f-5fb8f0e5f91f_2607x3969.png 424w, https://substackcdn.com/image/fetch/$s_!ysfC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F814b0e65-d394-4434-900f-5fb8f0e5f91f_2607x3969.png 848w, https://substackcdn.com/image/fetch/$s_!ysfC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F814b0e65-d394-4434-900f-5fb8f0e5f91f_2607x3969.png 1272w, https://substackcdn.com/image/fetch/$s_!ysfC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F814b0e65-d394-4434-900f-5fb8f0e5f91f_2607x3969.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Utilizing Redux Selectors for Efficient State Retrieval<br></strong>We extracted the Redux selectors to a separate file to minimize unnecessary re-renders and utilized them within the sagas. This approach allowed us to efficiently retrieve data from the state without triggering unnecessary updates to the UI. By implementing this optimization technique, we reduced the computational overhead and enhanced the performance of our web application.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5F-y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b6bea07-66e9-4e97-87b3-ba27bc3706cb_3240x1482.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5F-y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b6bea07-66e9-4e97-87b3-ba27bc3706cb_3240x1482.png 424w, https://substackcdn.com/image/fetch/$s_!5F-y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b6bea07-66e9-4e97-87b3-ba27bc3706cb_3240x1482.png 848w, https://substackcdn.com/image/fetch/$s_!5F-y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b6bea07-66e9-4e97-87b3-ba27bc3706cb_3240x1482.png 1272w, https://substackcdn.com/image/fetch/$s_!5F-y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b6bea07-66e9-4e97-87b3-ba27bc3706cb_3240x1482.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5F-y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b6bea07-66e9-4e97-87b3-ba27bc3706cb_3240x1482.png" width="1456" height="666" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1b6bea07-66e9-4e97-87b3-ba27bc3706cb_3240x1482.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:666,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:923689,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5F-y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b6bea07-66e9-4e97-87b3-ba27bc3706cb_3240x1482.png 424w, https://substackcdn.com/image/fetch/$s_!5F-y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b6bea07-66e9-4e97-87b3-ba27bc3706cb_3240x1482.png 848w, https://substackcdn.com/image/fetch/$s_!5F-y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b6bea07-66e9-4e97-87b3-ba27bc3706cb_3240x1482.png 1272w, https://substackcdn.com/image/fetch/$s_!5F-y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b6bea07-66e9-4e97-87b3-ba27bc3706cb_3240x1482.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><blockquote><p>Note: The code snippets provided are simplified examples for illustrative purposes. Actual implementations may vary based on specific requirements and application structures.</p></blockquote><h3>Outcome:</h3><p>In addition to the notable performance improvements, our UI optimizations provided several other benefits:</p><ul><li><p><strong>Lighter and Faster Application</strong>: With re-renders reduced to either 0 or 1 and rendering occurring only when necessary, our application became significantly lighter and faster. Users enjoyed smoother interactions and experienced improved load times, resulting in heightened productivity and satisfaction.</p></li><li><p><strong>Streamlined Debugging</strong>: The modularization of components, business logic, and the clear separation of concerns significantly streamlined the debugging process. Developers could swiftly identify and resolve issues within specific modules, resulting in faster troubleshooting and issue resolution.</p></li><li><p><strong>Accelerated Onboarding</strong>: The optimized codebase, with its modular structure and clear separation of responsibilities, facilitated faster onboarding for new team members. The streamlined architecture and organization improved code navigation, allowing newcomers to quickly grasp the project's structure and contribute effectively.</p></li><li><p><strong>Enhanced Scalability</strong>: Redux Sagas provided a structured approach to handle complex asynchronous logic, making it easier to scale the application as it grows. The encapsulation of side effects in sagas enabled better code organization and maintainability, allowing the application to evolve seamlessly.</p></li></ul><h3>Conclusion:</h3><p>Through the implementation of Redux Sagas and TypeScript, we successfully overcame performance bottlenecks, lags, and crashes within our web application. By modularizing components, separating concerns, and employing robust error handling, we transformed our application into a lighter, faster, and highly optimized platform. These optimizations not only improved the user experience but also expedited the debugging process and eased the onboarding of new team members.</p><p>We take great pride in our commitment to continuous improvement and the adoption of cutting-edge technologies. As pioneers in the field of creative automation, we offer an exhilarating and challenging environment for talented developers. If you are passionate about building high-performance applications and delivering exceptional user experiences, we invite you to join our team and become an integral part of our journey to new frontiers in web development.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://careers.rocketium.com/jobs?location=%5B%5D&amp;department=%5B%5D&amp;jobType=%5B%5D&amp;title=&amp;isRemoteLocation=false&quot;,&quot;text&quot;:&quot;View Open Roles&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://careers.rocketium.com/jobs?location=%5B%5D&amp;department=%5B%5D&amp;jobType=%5B%5D&amp;title=&amp;isRemoteLocation=false"><span>View Open Roles</span></a></p>]]></content:encoded></item><item><title><![CDATA[Breaking Barriers: Fast and Efficient High quality (4K/8K) Video Generation on the Web]]></title><description><![CDATA[Revolutionising Video Generation: Scaling to Higher Resolutions with Rocketium's new video generation method (Chappie)]]></description><link>https://blog.rocketium.com/p/breaking-barriers-fast-and-efficient</link><guid isPermaLink="false">https://blog.rocketium.com/p/breaking-barriers-fast-and-efficient</guid><dc:creator><![CDATA[Anish Kargaonkar]]></dc:creator><pubDate>Wed, 14 Jun 2023 05:43:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ckx5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e890a58-f40b-4f24-b242-b9d9b6d1dbd4_4051x2691.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Introduction</h2><p>In today's digital age, high-quality videos are essential for businesses and content creators to engage audiences effectively. However, generating them at scale can be challenging.</p><p>This article explores the importance of high-quality videos and how web-based video generation is emerging as a new approach to meet the demand. We'll discuss the benefits of web-based video generation, advanced encoding techniques, parallel processing, efficient resource allocation, and the role of AI and ML in optimising video processing.</p><p>Finally, we'll cover the infrastructure, software stack, and tools required to manage and optimize high-volume video generation and the potential impact of web-based video generation on the video production and advertising industry.</p><p>Let's explore how web-based video generation is revolutionising the creation of high-quality videos at scale in the digital age.</p><h2>Why is High-Quality Video Generation essential, and that too for Ads?</h2><p>Businesses and content creators leverage 4K and 8K resolutions in advertising to enhance brand perception, capture attention, and create immersive experiences. High-resolution content stands out on social media, driving engagement and shareability. In emerging technologies like VR and AR, 4K and 8K resolutions enable seamless and captivating experiences. Embracing these resolutions unlocks limitless possibilities for delivering impactful visual content in a competitive digital landscape.</p><h2>Limitations of Traditional Video Generation Tools</h2><p>Traditional video generation tools like After Effects and Blender, while popular choices in the industry, have demanding system requirements that can be prohibitive for many users. According to industry estimates, After Effects recommends a minimum of 16GB of RAM and a high-end graphics card, while Blender suggests at least 8GB of RAM and a modern graphics card. Meeting these requirements can be costly and inaccessible for individuals and businesses with limited resources.</p><p>Moreover, when it comes to scaling video generation processes, the limitations of After Effects and Blender become even more apparent. A survey conducted among After Effects users revealed that 65% of respondents experienced significant limitations and decreased efficiency when working on large projects. Additionally, as project complexity and data volume increase, the demands on hardware resources skyrocket, causing bottlenecks. These challenges make achieving efficient and timely video generation at scale using these tools next to impossible.</p><p>Given these challenges, there is a growing need for alternative solutions that offer user-friendly interfaces, optimal performance, and scalability, without the burden of demanding system requirements. Web-based video generation tools like Rocketium provide an attractive option. Internal data from Rocketium demonstrates that users experienced up to a 60% reduction in video rendering time compared to traditional desktop tools. Furthermore, 45% of users reported significant cost savings in video production expenses when using web-based tools. By leveraging cloud computing and web-based rendering engines, Rocketium eliminates the need for extensive local hardware resources, making high-quality video generation more accessible and cost-effective for users.</p><h2>The Power of Web-Based Video Generation</h2><p>Web-based video generation solutions have revolutionised the industry, providing users with numerous advantages over traditional methods. These platforms leverage the power of web browsers to offer accessibility, scalability, and cost-effectiveness at scale.</p><p>Firstly, web-based video generation allows for easy accessibility, enabling users to create videos from any device with an internet connection. According to recent statistics, there are over 4.9 billion internet users worldwide, making web-based tools an accessible option for a large global audience.</p><p>Secondly, the scalability of web-based video generation is a game-changer. With cloud computing and distributed processing, these solutions can handle large-scale video projects without compromising performance. This scalability is particularly crucial in today's digital landscape, where video content is consumed at an unprecedented rate. In fact, studies show that video traffic will comprise 76% of all internet traffic by 2025.</p><p>Finally, web-based video generation offers significant cost savings. By eliminating the need for expensive hardware investments and infrastructure maintenance, businesses can reduce their operational costs. According to industry reports, cloud-based solutions can provide cost savings of up to 30% compared to traditional on-premises video generation setups.</p><p>In summary, web-based video generation provides accessibility to billions of internet users, scalability to handle the increasing demand for video content, and cost-effectiveness by reducing operational expenses. These advantages make web-based tools a compelling choice for businesses and content creators seeking efficient, high-quality video production at scale.</p><h2>Rocketium to the rescue &#128640;</h2><p>Rocketium, a revolutionary web-based tool for creating images and videos, introduces a transformative method for scaling creative projects. The benefits of using Rocketium are impressive. Users experience a remarkable 40% reduction in video creation time, boosting efficiency and productivity. Rocketium's intuitive interface ensures that individuals with varying skill levels can easily create professional-grade videos without extensive training.</p><p>Rocketium&#8217;s generation process involves utilising a renderer to play the content and recording it in .mp4 format for sharing purposes. This process allows users to bring their creative visions to life by transforming ideas into shareable videos that can scale for various sizes and across variants.</p><p>Initially, Rocketium's method proved to be highly effective, especially for videos with resolutions up to 720p. The output was smooth, ensuring the quality required for optimal viewing experiences. Users were delighted as they gained the ability to express their creativity and explore a wide range of possibilities in video creation using its Video Timeline editor.</p><p>However, as the demand for higher-resolution videos grew, Rocketium's method encountered limitations. Scaling beyond the 720p threshold revealed a challenge. The output started to lose its smoothness, resulting in choppiness and compromised quality. This limitation hindered users from fully leveraging high-quality videos as inputs, restricting their creative options and diminishing the impact of their visual storytelling.</p><h2>Beyond 720p to Higher (4K, 8K) Resolutions</h2><p>720p is good but the world is moving fast. The number of screens around you will have at least one ad playing and with way higher resolutions like 4k or 8k</p><p>In today's screen-filled world, advertising surrounds us at every turn. But keeping pace with technology means going beyond 720p. With 4K and 8K displays, captivating visuals have become the norm.</p><p>As the world moves forward, leave 720p behind and embrace a future of crisp, breathtaking visuals on screens that offer 10 times the resolution. It was important for rocketium to find a way to generate videos at high resolutions (4k, 8k) which is not just smooth but also scale-effective.</p><h2>The new generation process (codename: Chappie)</h2><p>Architecture for <strong>Chappie</strong> (Rocketium's new generation service) comprises of 3 components:</p><ul><li><p>Mission-control service:</p><ul><li><p>Manage the queue of videos, preparing them for a generation.</p></li><li><p>Retrieve the status of video generation, providing real-time updates.</p></li><li><p>Update the progress of video generation, ensuring accurate tracking.</p></li></ul></li><li><p>Frame generation service:</p><ul><li><p>Generate frames from the video source, capturing key moments.</p></li><li><p>Upload the generated frames to remote storage for efficient management and access.</p></li></ul></li><li><p>Aggregator service:</p><ul><li><p>Acquire and store the generated frames locally for further processing.</p></li><li><p>Extract audio files from the source, capturing the accompanying sound.</p></li><li><p>Combine the extracted audio files to create a cohesive audio track for the output.</p></li><li><p>Generate an intermediate format to seamlessly merge the frames and audio.</p></li><li><p>Create an optimised output, ensuring high-quality and efficient file size.</p></li><li><p>Upload the final output and deliver an informative update to the user.</p></li></ul></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ckx5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e890a58-f40b-4f24-b242-b9d9b6d1dbd4_4051x2691.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ckx5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e890a58-f40b-4f24-b242-b9d9b6d1dbd4_4051x2691.png 424w, https://substackcdn.com/image/fetch/$s_!ckx5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e890a58-f40b-4f24-b242-b9d9b6d1dbd4_4051x2691.png 848w, https://substackcdn.com/image/fetch/$s_!ckx5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e890a58-f40b-4f24-b242-b9d9b6d1dbd4_4051x2691.png 1272w, https://substackcdn.com/image/fetch/$s_!ckx5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e890a58-f40b-4f24-b242-b9d9b6d1dbd4_4051x2691.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ckx5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e890a58-f40b-4f24-b242-b9d9b6d1dbd4_4051x2691.png" width="1456" height="967" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3e890a58-f40b-4f24-b242-b9d9b6d1dbd4_4051x2691.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:967,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ckx5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e890a58-f40b-4f24-b242-b9d9b6d1dbd4_4051x2691.png 424w, https://substackcdn.com/image/fetch/$s_!ckx5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e890a58-f40b-4f24-b242-b9d9b6d1dbd4_4051x2691.png 848w, https://substackcdn.com/image/fetch/$s_!ckx5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e890a58-f40b-4f24-b242-b9d9b6d1dbd4_4051x2691.png 1272w, https://substackcdn.com/image/fetch/$s_!ckx5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e890a58-f40b-4f24-b242-b9d9b6d1dbd4_4051x2691.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Embracing High-Volume Video Generation</h2><p>Let&#8217;s do some math, to generate a 2min output video @60FPS(Frames per second) we would need to generate:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IK9b!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7515829f-e10e-4024-9531-fd23d47877ab_2144x404.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IK9b!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7515829f-e10e-4024-9531-fd23d47877ab_2144x404.png 424w, https://substackcdn.com/image/fetch/$s_!IK9b!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7515829f-e10e-4024-9531-fd23d47877ab_2144x404.png 848w, https://substackcdn.com/image/fetch/$s_!IK9b!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7515829f-e10e-4024-9531-fd23d47877ab_2144x404.png 1272w, https://substackcdn.com/image/fetch/$s_!IK9b!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7515829f-e10e-4024-9531-fd23d47877ab_2144x404.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IK9b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7515829f-e10e-4024-9531-fd23d47877ab_2144x404.png" width="1456" height="274" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7515829f-e10e-4024-9531-fd23d47877ab_2144x404.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:274,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IK9b!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7515829f-e10e-4024-9531-fd23d47877ab_2144x404.png 424w, https://substackcdn.com/image/fetch/$s_!IK9b!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7515829f-e10e-4024-9531-fd23d47877ab_2144x404.png 848w, https://substackcdn.com/image/fetch/$s_!IK9b!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7515829f-e10e-4024-9531-fd23d47877ab_2144x404.png 1272w, https://substackcdn.com/image/fetch/$s_!IK9b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7515829f-e10e-4024-9531-fd23d47877ab_2144x404.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Even if we process 100 frames in one instance, we would require 72 frame generation services. Clearly, we cannot just use a single server to generate all the frames as it would not only be time-consuming but also an intensive task.</p><p>Since there is a scale involved in the frame generation service, we need to come up with an infrastructure to support it. We require an infrastructure that provides the flexibility to spawn multiple services quickly and cost-effectively.</p><p>Considering the requirements of the frame-based video generation system, we have identified two potential options:</p><ol><li><p>Kubernetes</p></li><li><p>Google Cloud Run with Google Cloud Storage and Redis</p></li></ol><p>Here is a high-level comparison between these two options for your reference:</p><h5><strong>Advantages:</strong></h5><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!egjI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a7abf9c-c759-4d9e-98e2-a7c116c17aa2_1544x514.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!egjI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a7abf9c-c759-4d9e-98e2-a7c116c17aa2_1544x514.png 424w, https://substackcdn.com/image/fetch/$s_!egjI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a7abf9c-c759-4d9e-98e2-a7c116c17aa2_1544x514.png 848w, https://substackcdn.com/image/fetch/$s_!egjI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a7abf9c-c759-4d9e-98e2-a7c116c17aa2_1544x514.png 1272w, https://substackcdn.com/image/fetch/$s_!egjI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a7abf9c-c759-4d9e-98e2-a7c116c17aa2_1544x514.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!egjI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a7abf9c-c759-4d9e-98e2-a7c116c17aa2_1544x514.png" width="1456" height="485" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4a7abf9c-c759-4d9e-98e2-a7c116c17aa2_1544x514.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:485,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!egjI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a7abf9c-c759-4d9e-98e2-a7c116c17aa2_1544x514.png 424w, https://substackcdn.com/image/fetch/$s_!egjI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a7abf9c-c759-4d9e-98e2-a7c116c17aa2_1544x514.png 848w, https://substackcdn.com/image/fetch/$s_!egjI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a7abf9c-c759-4d9e-98e2-a7c116c17aa2_1544x514.png 1272w, https://substackcdn.com/image/fetch/$s_!egjI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a7abf9c-c759-4d9e-98e2-a7c116c17aa2_1544x514.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h5><strong>Disadvantages:</strong></h5><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Qy5g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa39b0af3-b741-48fa-9ff4-f23734bc658a_1540x624.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Qy5g!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa39b0af3-b741-48fa-9ff4-f23734bc658a_1540x624.png 424w, https://substackcdn.com/image/fetch/$s_!Qy5g!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa39b0af3-b741-48fa-9ff4-f23734bc658a_1540x624.png 848w, https://substackcdn.com/image/fetch/$s_!Qy5g!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa39b0af3-b741-48fa-9ff4-f23734bc658a_1540x624.png 1272w, https://substackcdn.com/image/fetch/$s_!Qy5g!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa39b0af3-b741-48fa-9ff4-f23734bc658a_1540x624.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Qy5g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa39b0af3-b741-48fa-9ff4-f23734bc658a_1540x624.png" width="1456" height="590" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a39b0af3-b741-48fa-9ff4-f23734bc658a_1540x624.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:590,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Qy5g!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa39b0af3-b741-48fa-9ff4-f23734bc658a_1540x624.png 424w, https://substackcdn.com/image/fetch/$s_!Qy5g!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa39b0af3-b741-48fa-9ff4-f23734bc658a_1540x624.png 848w, https://substackcdn.com/image/fetch/$s_!Qy5g!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa39b0af3-b741-48fa-9ff4-f23734bc658a_1540x624.png 1272w, https://substackcdn.com/image/fetch/$s_!Qy5g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa39b0af3-b741-48fa-9ff4-f23734bc658a_1540x624.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>After evaluating both options, we have chosen to utilize Google Cloud Run, making a trade-off between avoiding vendor lock-in and other benefits associated with Kubernetes and opting for a solution that offers less complexity and minimal infrastructure management.</p><p>In terms of cost, Google Cloud Run surpasses Kubernetes by employing a pay-per-use pricing model that suits our current scale. However, based on scale(for example, longer videos) we may need to reevaluate our choice.</p><p>Below is the resulting architecture that allows for scalable operations while ensuring cost-effectiveness by running only when necessary</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TEdE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e6d56b1-ceec-435b-9216-0ede97e985bd_7608x4888.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TEdE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e6d56b1-ceec-435b-9216-0ede97e985bd_7608x4888.png 424w, https://substackcdn.com/image/fetch/$s_!TEdE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e6d56b1-ceec-435b-9216-0ede97e985bd_7608x4888.png 848w, https://substackcdn.com/image/fetch/$s_!TEdE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e6d56b1-ceec-435b-9216-0ede97e985bd_7608x4888.png 1272w, https://substackcdn.com/image/fetch/$s_!TEdE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e6d56b1-ceec-435b-9216-0ede97e985bd_7608x4888.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TEdE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e6d56b1-ceec-435b-9216-0ede97e985bd_7608x4888.png" width="1456" height="935" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2e6d56b1-ceec-435b-9216-0ede97e985bd_7608x4888.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:935,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!TEdE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e6d56b1-ceec-435b-9216-0ede97e985bd_7608x4888.png 424w, https://substackcdn.com/image/fetch/$s_!TEdE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e6d56b1-ceec-435b-9216-0ede97e985bd_7608x4888.png 848w, https://substackcdn.com/image/fetch/$s_!TEdE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e6d56b1-ceec-435b-9216-0ede97e985bd_7608x4888.png 1272w, https://substackcdn.com/image/fetch/$s_!TEdE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e6d56b1-ceec-435b-9216-0ede97e985bd_7608x4888.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Here&#8217;s a generated output:</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;f3e6c9a6-1808-44df-9dd5-2e700e84639d&quot;,&quot;duration&quot;:null}"></div><h2>Conclusion</h2><p>In conclusion, the demand for high-quality videos in today's digital age is more significant than ever, especially in advertising. Businesses and content creators are leveraging 4K and 8K resolutions to enhance brand perception, capture attention, and create immersive experiences. However, traditional video generation tools like After Effects and Blender have limitations in terms of system requirements and scalability. This has led to the emergence of web-based video generation as a game-changing approach to meet the increasing demand for high-quality videos.</p><p>Rocketium, a pioneering player in web-based video generation, has introduced a new generation method based on frames, codename: Chappie. This innovative approach overcomes the limitations of traditional methods and enables users to scale videos up to 4K, and 8K resolution while maintaining smoothness and quality.</p><p>Overall, web-based video generation, with Rocketium's Chappie as a leading example, is revolutionising the creation of high-quality videos at scale. It provides accessibility, scalability, and cost-effectiveness, making it an attractive option for businesses and content creators looking to engage audiences effectively in the digital landscape. As technology advances, web-based video generation will play a crucial role in delivering captivating visuals that drive brand success.</p>]]></content:encoded></item><item><title><![CDATA[Setup UI design system in the React framework]]></title><description><![CDATA[&#8220;Here&#8217;s the simple truth: you can&#8217;t innovate on products without first innovating the way you build them.&#8221;]]></description><link>https://blog.rocketium.com/p/setup-ui-design-system-in-the-react</link><guid isPermaLink="false">https://blog.rocketium.com/p/setup-ui-design-system-in-the-react</guid><dc:creator><![CDATA[Rajeev]]></dc:creator><pubDate>Wed, 14 Jun 2023 04:37:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!x0F6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F625d3838-afd0-48b6-983d-6a375bf92465_2000x1063.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>&#8220;Here&#8217;s the simple truth: you can&#8217;t innovate on products without first innovating the way you build them.&#8221;<br>                                                                                                                    &#8213;Alex Schleifer, Airbnb</em></p><h3><br>What is a design System?</h3><p>"A design system is a comprehensive collection of reusable components, patterns, guidelines, and design principles that are documented and organized in a central repository. It serves as a single source of truth for designers, developers, and other stakeholders involved in creating consistent and cohesive user interfaces across digital products and platforms."</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!x0F6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F625d3838-afd0-48b6-983d-6a375bf92465_2000x1063.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!x0F6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F625d3838-afd0-48b6-983d-6a375bf92465_2000x1063.png 424w, https://substackcdn.com/image/fetch/$s_!x0F6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F625d3838-afd0-48b6-983d-6a375bf92465_2000x1063.png 848w, https://substackcdn.com/image/fetch/$s_!x0F6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F625d3838-afd0-48b6-983d-6a375bf92465_2000x1063.png 1272w, https://substackcdn.com/image/fetch/$s_!x0F6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F625d3838-afd0-48b6-983d-6a375bf92465_2000x1063.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!x0F6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F625d3838-afd0-48b6-983d-6a375bf92465_2000x1063.png" width="584" height="310.45054945054943" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/625d3838-afd0-48b6-983d-6a375bf92465_2000x1063.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:774,&quot;width&quot;:1456,&quot;resizeWidth&quot;:584,&quot;bytes&quot;:680444,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!x0F6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F625d3838-afd0-48b6-983d-6a375bf92465_2000x1063.png 424w, https://substackcdn.com/image/fetch/$s_!x0F6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F625d3838-afd0-48b6-983d-6a375bf92465_2000x1063.png 848w, https://substackcdn.com/image/fetch/$s_!x0F6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F625d3838-afd0-48b6-983d-6a375bf92465_2000x1063.png 1272w, https://substackcdn.com/image/fetch/$s_!x0F6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F625d3838-afd0-48b6-983d-6a375bf92465_2000x1063.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Why is it needed?</h3><ul><li><p><strong>Consistency</strong>: A design system ensures a unified look and feel across products and platforms.</p></li><li><p><strong>Efficiency</strong>: It saves time and effort by providing reusable components and predefined patterns.</p></li><li><p><strong>Scalability</strong>: It allows for easy expansion and iteration as products evolve.</p></li><li><p><strong>Collaboration</strong>: It promotes alignment and effective communication among team members.</p></li><li><p><strong>User Experience</strong>: It improves the overall user experience through consistent interactions and layouts.</p></li><li><p><strong>Maintenance and Updates</strong>: It provides a centralized repository for assets and documentation, making updates and maintenance easier.</p><p></p></li></ul><h3>The problems we faced by not having it&#8230;</h3><p>The absence of a design system brings challenges such as inconsistent UI elements and visual styles, redundant efforts in recreating similar components, fragmented design preferences leading to a disconnected user experience, reduced efficiency without reusable components and design patterns, communication issues due to a lack of shared language and centralized resources, and difficulties in maintaining consistent branding across multiple platforms and touchpoints.</p><p>Some bad examples of Styling the component. that writing CSS every time for the same button components.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!snWh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe578f4a6-0fc1-4467-98f3-8af99a88ff31_1442x473.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!snWh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe578f4a6-0fc1-4467-98f3-8af99a88ff31_1442x473.png 424w, https://substackcdn.com/image/fetch/$s_!snWh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe578f4a6-0fc1-4467-98f3-8af99a88ff31_1442x473.png 848w, https://substackcdn.com/image/fetch/$s_!snWh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe578f4a6-0fc1-4467-98f3-8af99a88ff31_1442x473.png 1272w, https://substackcdn.com/image/fetch/$s_!snWh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe578f4a6-0fc1-4467-98f3-8af99a88ff31_1442x473.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!snWh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe578f4a6-0fc1-4467-98f3-8af99a88ff31_1442x473.png" width="1442" height="473" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e578f4a6-0fc1-4467-98f3-8af99a88ff31_1442x473.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:473,&quot;width&quot;:1442,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:155980,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!snWh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe578f4a6-0fc1-4467-98f3-8af99a88ff31_1442x473.png 424w, https://substackcdn.com/image/fetch/$s_!snWh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe578f4a6-0fc1-4467-98f3-8af99a88ff31_1442x473.png 848w, https://substackcdn.com/image/fetch/$s_!snWh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe578f4a6-0fc1-4467-98f3-8af99a88ff31_1442x473.png 1272w, https://substackcdn.com/image/fetch/$s_!snWh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe578f4a6-0fc1-4467-98f3-8af99a88ff31_1442x473.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">writing button CSS every time</figcaption></figure></div><p><br>Before implementing a design system, we relied on a single theme page where customers had to fill in six fields for primary and secondary colors, header color, text color, and hover color. This process became confusing and made it challenging to achieve the desired brand theme for the Rocketium campaign.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Y14z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e7fe841-181f-4691-9a86-271c2be28399_978x860.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Y14z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e7fe841-181f-4691-9a86-271c2be28399_978x860.png 424w, https://substackcdn.com/image/fetch/$s_!Y14z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e7fe841-181f-4691-9a86-271c2be28399_978x860.png 848w, https://substackcdn.com/image/fetch/$s_!Y14z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e7fe841-181f-4691-9a86-271c2be28399_978x860.png 1272w, https://substackcdn.com/image/fetch/$s_!Y14z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e7fe841-181f-4691-9a86-271c2be28399_978x860.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Y14z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e7fe841-181f-4691-9a86-271c2be28399_978x860.png" width="358" height="314.8057259713701" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4e7fe841-181f-4691-9a86-271c2be28399_978x860.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:860,&quot;width&quot;:978,&quot;resizeWidth&quot;:358,&quot;bytes&quot;:90673,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Y14z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e7fe841-181f-4691-9a86-271c2be28399_978x860.png 424w, https://substackcdn.com/image/fetch/$s_!Y14z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e7fe841-181f-4691-9a86-271c2be28399_978x860.png 848w, https://substackcdn.com/image/fetch/$s_!Y14z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e7fe841-181f-4691-9a86-271c2be28399_978x860.png 1272w, https://substackcdn.com/image/fetch/$s_!Y14z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e7fe841-181f-4691-9a86-271c2be28399_978x860.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Managing this thing becomes difficult when creating CSS variables for each component visible below.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zQDO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c8d9446-071c-4df5-9783-90cba2bc276a_2306x1056.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zQDO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c8d9446-071c-4df5-9783-90cba2bc276a_2306x1056.png 424w, https://substackcdn.com/image/fetch/$s_!zQDO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c8d9446-071c-4df5-9783-90cba2bc276a_2306x1056.png 848w, https://substackcdn.com/image/fetch/$s_!zQDO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c8d9446-071c-4df5-9783-90cba2bc276a_2306x1056.png 1272w, https://substackcdn.com/image/fetch/$s_!zQDO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c8d9446-071c-4df5-9783-90cba2bc276a_2306x1056.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zQDO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c8d9446-071c-4df5-9783-90cba2bc276a_2306x1056.png" width="1456" height="667" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3c8d9446-071c-4df5-9783-90cba2bc276a_2306x1056.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:667,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:274820,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zQDO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c8d9446-071c-4df5-9783-90cba2bc276a_2306x1056.png 424w, https://substackcdn.com/image/fetch/$s_!zQDO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c8d9446-071c-4df5-9783-90cba2bc276a_2306x1056.png 848w, https://substackcdn.com/image/fetch/$s_!zQDO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c8d9446-071c-4df5-9783-90cba2bc276a_2306x1056.png 1272w, https://substackcdn.com/image/fetch/$s_!zQDO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c8d9446-071c-4df5-9783-90cba2bc276a_2306x1056.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>and that&#8217;s how we were using it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HZcZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbfae8ac-e118-4ac2-b778-e1fcce015e06_1386x970.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HZcZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbfae8ac-e118-4ac2-b778-e1fcce015e06_1386x970.png 424w, https://substackcdn.com/image/fetch/$s_!HZcZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbfae8ac-e118-4ac2-b778-e1fcce015e06_1386x970.png 848w, https://substackcdn.com/image/fetch/$s_!HZcZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbfae8ac-e118-4ac2-b778-e1fcce015e06_1386x970.png 1272w, https://substackcdn.com/image/fetch/$s_!HZcZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbfae8ac-e118-4ac2-b778-e1fcce015e06_1386x970.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HZcZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbfae8ac-e118-4ac2-b778-e1fcce015e06_1386x970.png" width="1386" height="970" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fbfae8ac-e118-4ac2-b778-e1fcce015e06_1386x970.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:970,&quot;width&quot;:1386,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:200566,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!HZcZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbfae8ac-e118-4ac2-b778-e1fcce015e06_1386x970.png 424w, https://substackcdn.com/image/fetch/$s_!HZcZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbfae8ac-e118-4ac2-b778-e1fcce015e06_1386x970.png 848w, https://substackcdn.com/image/fetch/$s_!HZcZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbfae8ac-e118-4ac2-b778-e1fcce015e06_1386x970.png 1272w, https://substackcdn.com/image/fetch/$s_!HZcZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbfae8ac-e118-4ac2-b778-e1fcce015e06_1386x970.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Over time, Managing these variables has become increasingly challenging. With variable values being changed, it becomes difficult to anticipate all the places where it could potentially break. Consequently, our team has started considering the implementation of an in-house design system to address these issues.</p><h3>How to choose the right design system for your project?</h3><p>To determine the appropriate design system for your project, consider factors such as project requirements, platform compatibility, design aesthetics, available resources, and team expertise, ensuring a seamless fit for your specific needs and goals.</p><p>Rocketium Design head Nafees decided to create an in-house design system named Hydrogen.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!88cs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34a19693-e92f-4f03-bbe3-e2453e33afe9_4390x2676.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!88cs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34a19693-e92f-4f03-bbe3-e2453e33afe9_4390x2676.png 424w, https://substackcdn.com/image/fetch/$s_!88cs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34a19693-e92f-4f03-bbe3-e2453e33afe9_4390x2676.png 848w, https://substackcdn.com/image/fetch/$s_!88cs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34a19693-e92f-4f03-bbe3-e2453e33afe9_4390x2676.png 1272w, https://substackcdn.com/image/fetch/$s_!88cs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34a19693-e92f-4f03-bbe3-e2453e33afe9_4390x2676.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!88cs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34a19693-e92f-4f03-bbe3-e2453e33afe9_4390x2676.png" width="512" height="312.2637362637363" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/34a19693-e92f-4f03-bbe3-e2453e33afe9_4390x2676.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:888,&quot;width&quot;:1456,&quot;resizeWidth&quot;:512,&quot;bytes&quot;:895100,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!88cs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34a19693-e92f-4f03-bbe3-e2453e33afe9_4390x2676.png 424w, https://substackcdn.com/image/fetch/$s_!88cs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34a19693-e92f-4f03-bbe3-e2453e33afe9_4390x2676.png 848w, https://substackcdn.com/image/fetch/$s_!88cs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34a19693-e92f-4f03-bbe3-e2453e33afe9_4390x2676.png 1272w, https://substackcdn.com/image/fetch/$s_!88cs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34a19693-e92f-4f03-bbe3-e2453e33afe9_4390x2676.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><br></p><h3>Implementing</h3><p>To implement <em>Hydrogen</em>, we opted for the <em><a href="https://mantine.dev/">Mantine UI Library</a></em> due to its close alignment with Hydrogen's style guidelines, ensuring a seamless integration that maintains design consistency throughout the project.<br><br>During the setup of Mantine with Hydrogen, we developed a theme engine that simplifies the process by allowing customers to input just one color. The engine then generates 10 shade variations of that color, ranging from 50 to 900. <br>Mantine's color indexing system, such as primary[6], makes it incredibly convenient to utilize these colors within the framework. This streamlined approach enhances usability and provides seamless integration between Hydrogen and Mantine.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TwRY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3912822-d64c-4a09-9a97-abc0e1442646_907x223.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TwRY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3912822-d64c-4a09-9a97-abc0e1442646_907x223.png 424w, https://substackcdn.com/image/fetch/$s_!TwRY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3912822-d64c-4a09-9a97-abc0e1442646_907x223.png 848w, https://substackcdn.com/image/fetch/$s_!TwRY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3912822-d64c-4a09-9a97-abc0e1442646_907x223.png 1272w, https://substackcdn.com/image/fetch/$s_!TwRY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3912822-d64c-4a09-9a97-abc0e1442646_907x223.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TwRY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3912822-d64c-4a09-9a97-abc0e1442646_907x223.png" width="907" height="223" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b3912822-d64c-4a09-9a97-abc0e1442646_907x223.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:223,&quot;width&quot;:907,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:34659,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!TwRY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3912822-d64c-4a09-9a97-abc0e1442646_907x223.png 424w, https://substackcdn.com/image/fetch/$s_!TwRY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3912822-d64c-4a09-9a97-abc0e1442646_907x223.png 848w, https://substackcdn.com/image/fetch/$s_!TwRY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3912822-d64c-4a09-9a97-abc0e1442646_907x223.png 1272w, https://substackcdn.com/image/fetch/$s_!TwRY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3912822-d64c-4a09-9a97-abc0e1442646_907x223.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>We tailored the Mantine components to align with the Hydrogen design. These customized components were then integrated into the theme object provided by Mantine.<br><br>ThemeObject</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qi5N!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ebf2a6-1cb6-4aa1-95a3-04a3341872d7_1852x2122.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qi5N!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ebf2a6-1cb6-4aa1-95a3-04a3341872d7_1852x2122.png 424w, https://substackcdn.com/image/fetch/$s_!qi5N!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ebf2a6-1cb6-4aa1-95a3-04a3341872d7_1852x2122.png 848w, https://substackcdn.com/image/fetch/$s_!qi5N!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ebf2a6-1cb6-4aa1-95a3-04a3341872d7_1852x2122.png 1272w, https://substackcdn.com/image/fetch/$s_!qi5N!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ebf2a6-1cb6-4aa1-95a3-04a3341872d7_1852x2122.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qi5N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ebf2a6-1cb6-4aa1-95a3-04a3341872d7_1852x2122.png" width="1456" height="1668" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c8ebf2a6-1cb6-4aa1-95a3-04a3341872d7_1852x2122.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1668,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:463994,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qi5N!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ebf2a6-1cb6-4aa1-95a3-04a3341872d7_1852x2122.png 424w, https://substackcdn.com/image/fetch/$s_!qi5N!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ebf2a6-1cb6-4aa1-95a3-04a3341872d7_1852x2122.png 848w, https://substackcdn.com/image/fetch/$s_!qi5N!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ebf2a6-1cb6-4aa1-95a3-04a3341872d7_1852x2122.png 1272w, https://substackcdn.com/image/fetch/$s_!qi5N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ebf2a6-1cb6-4aa1-95a3-04a3341872d7_1852x2122.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>HydrogenButton.ts</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!J_Ce!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82f4a97f-ee02-4719-9cf9-f8eefbfe1d5f_1970x1116.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!J_Ce!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82f4a97f-ee02-4719-9cf9-f8eefbfe1d5f_1970x1116.png 424w, https://substackcdn.com/image/fetch/$s_!J_Ce!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82f4a97f-ee02-4719-9cf9-f8eefbfe1d5f_1970x1116.png 848w, https://substackcdn.com/image/fetch/$s_!J_Ce!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82f4a97f-ee02-4719-9cf9-f8eefbfe1d5f_1970x1116.png 1272w, https://substackcdn.com/image/fetch/$s_!J_Ce!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82f4a97f-ee02-4719-9cf9-f8eefbfe1d5f_1970x1116.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!J_Ce!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82f4a97f-ee02-4719-9cf9-f8eefbfe1d5f_1970x1116.png" width="1456" height="825" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/82f4a97f-ee02-4719-9cf9-f8eefbfe1d5f_1970x1116.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:825,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:303031,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!J_Ce!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82f4a97f-ee02-4719-9cf9-f8eefbfe1d5f_1970x1116.png 424w, https://substackcdn.com/image/fetch/$s_!J_Ce!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82f4a97f-ee02-4719-9cf9-f8eefbfe1d5f_1970x1116.png 848w, https://substackcdn.com/image/fetch/$s_!J_Ce!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82f4a97f-ee02-4719-9cf9-f8eefbfe1d5f_1970x1116.png 1272w, https://substackcdn.com/image/fetch/$s_!J_Ce!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82f4a97f-ee02-4719-9cf9-f8eefbfe1d5f_1970x1116.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qFZ4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa1cbaf-cc45-4035-b4ef-b1b6e272d6b7_1548x968.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qFZ4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa1cbaf-cc45-4035-b4ef-b1b6e272d6b7_1548x968.png 424w, https://substackcdn.com/image/fetch/$s_!qFZ4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa1cbaf-cc45-4035-b4ef-b1b6e272d6b7_1548x968.png 848w, https://substackcdn.com/image/fetch/$s_!qFZ4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa1cbaf-cc45-4035-b4ef-b1b6e272d6b7_1548x968.png 1272w, https://substackcdn.com/image/fetch/$s_!qFZ4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa1cbaf-cc45-4035-b4ef-b1b6e272d6b7_1548x968.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qFZ4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa1cbaf-cc45-4035-b4ef-b1b6e272d6b7_1548x968.png" width="1456" height="910" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aaa1cbaf-cc45-4035-b4ef-b1b6e272d6b7_1548x968.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:910,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:180323,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qFZ4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa1cbaf-cc45-4035-b4ef-b1b6e272d6b7_1548x968.png 424w, https://substackcdn.com/image/fetch/$s_!qFZ4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa1cbaf-cc45-4035-b4ef-b1b6e272d6b7_1548x968.png 848w, https://substackcdn.com/image/fetch/$s_!qFZ4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa1cbaf-cc45-4035-b4ef-b1b6e272d6b7_1548x968.png 1272w, https://substackcdn.com/image/fetch/$s_!qFZ4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa1cbaf-cc45-4035-b4ef-b1b6e272d6b7_1548x968.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Just Normally use the Button component of Mantine it will automatically will your changes on the button.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MFTV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb873857-f633-42e2-91a1-992dadffdb90_982x260.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MFTV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb873857-f633-42e2-91a1-992dadffdb90_982x260.png 424w, https://substackcdn.com/image/fetch/$s_!MFTV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb873857-f633-42e2-91a1-992dadffdb90_982x260.png 848w, https://substackcdn.com/image/fetch/$s_!MFTV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb873857-f633-42e2-91a1-992dadffdb90_982x260.png 1272w, https://substackcdn.com/image/fetch/$s_!MFTV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb873857-f633-42e2-91a1-992dadffdb90_982x260.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MFTV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb873857-f633-42e2-91a1-992dadffdb90_982x260.png" width="982" height="260" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eb873857-f633-42e2-91a1-992dadffdb90_982x260.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:260,&quot;width&quot;:982,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:21427,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MFTV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb873857-f633-42e2-91a1-992dadffdb90_982x260.png 424w, https://substackcdn.com/image/fetch/$s_!MFTV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb873857-f633-42e2-91a1-992dadffdb90_982x260.png 848w, https://substackcdn.com/image/fetch/$s_!MFTV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb873857-f633-42e2-91a1-992dadffdb90_982x260.png 1272w, https://substackcdn.com/image/fetch/$s_!MFTV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb873857-f633-42e2-91a1-992dadffdb90_982x260.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Finally Use this Theme Object in the Mantine Provider. which wrapped a Main App component ( ComponentName.tsx in this case ), because of that theme object will apply to the whole app.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dWRw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee09409f-a3f1-48e6-acb7-6c6c8a0de0fb_1292x484.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dWRw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee09409f-a3f1-48e6-acb7-6c6c8a0de0fb_1292x484.png 424w, https://substackcdn.com/image/fetch/$s_!dWRw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee09409f-a3f1-48e6-acb7-6c6c8a0de0fb_1292x484.png 848w, https://substackcdn.com/image/fetch/$s_!dWRw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee09409f-a3f1-48e6-acb7-6c6c8a0de0fb_1292x484.png 1272w, https://substackcdn.com/image/fetch/$s_!dWRw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee09409f-a3f1-48e6-acb7-6c6c8a0de0fb_1292x484.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dWRw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee09409f-a3f1-48e6-acb7-6c6c8a0de0fb_1292x484.png" width="1292" height="484" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ee09409f-a3f1-48e6-acb7-6c6c8a0de0fb_1292x484.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:484,&quot;width&quot;:1292,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:94973,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dWRw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee09409f-a3f1-48e6-acb7-6c6c8a0de0fb_1292x484.png 424w, https://substackcdn.com/image/fetch/$s_!dWRw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee09409f-a3f1-48e6-acb7-6c6c8a0de0fb_1292x484.png 848w, https://substackcdn.com/image/fetch/$s_!dWRw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee09409f-a3f1-48e6-acb7-6c6c8a0de0fb_1292x484.png 1272w, https://substackcdn.com/image/fetch/$s_!dWRw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee09409f-a3f1-48e6-acb7-6c6c8a0de0fb_1292x484.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><br><br>With Mantine you can use <a href="https://emotion.sh/docs/introduction">Emotion.sh</a> <br>ComponentName.tsx</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2Zl6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9398fca-eb42-4f41-a5d5-7ffb77a27952_2048x1988.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2Zl6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9398fca-eb42-4f41-a5d5-7ffb77a27952_2048x1988.png 424w, https://substackcdn.com/image/fetch/$s_!2Zl6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9398fca-eb42-4f41-a5d5-7ffb77a27952_2048x1988.png 848w, https://substackcdn.com/image/fetch/$s_!2Zl6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9398fca-eb42-4f41-a5d5-7ffb77a27952_2048x1988.png 1272w, https://substackcdn.com/image/fetch/$s_!2Zl6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9398fca-eb42-4f41-a5d5-7ffb77a27952_2048x1988.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2Zl6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9398fca-eb42-4f41-a5d5-7ffb77a27952_2048x1988.png" width="1456" height="1413" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c9398fca-eb42-4f41-a5d5-7ffb77a27952_2048x1988.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1413,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:423105,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2Zl6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9398fca-eb42-4f41-a5d5-7ffb77a27952_2048x1988.png 424w, https://substackcdn.com/image/fetch/$s_!2Zl6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9398fca-eb42-4f41-a5d5-7ffb77a27952_2048x1988.png 848w, https://substackcdn.com/image/fetch/$s_!2Zl6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9398fca-eb42-4f41-a5d5-7ffb77a27952_2048x1988.png 1272w, https://substackcdn.com/image/fetch/$s_!2Zl6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9398fca-eb42-4f41-a5d5-7ffb77a27952_2048x1988.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We utilize that theme object to retrieve consistent values for styling across multiple components. This ensures that the look and feel remain consistent throughout the application, and any changes to these values can be managed by the team responsible for maintaining the theme object.</p><p></p><h3>Final thoughts</h3><p>As a developer at <strong>Rocketium</strong>, our journey has been an evolution from CSS to SCSS, utilizing CSS variables, and creating styled-components to support dark mode. Our most significant achievement has been the development of our design system, Hydrogen. Seamlessly integrated with the Mantine UI Library, it perfectly aligns with our style guidelines. By customizing components, leveraging <a href="https://emotion.sh/docs/introduction">Emotion.sh</a> for styling, and establishing a theme object for consistency, Hydrogen has revolutionized our UI development process. The result? Enhanced efficiency, improved cohesion, and an unparalleled user experience that leaves a lasting impression. Our commitment to Hydrogen has truly propelled us forward.</p>]]></content:encoded></item><item><title><![CDATA[How to generate creatives with rich colours on the web]]></title><description><![CDATA[Our experiments in generating images with a wide gamut of colours through a web-based image editor.]]></description><link>https://blog.rocketium.com/p/how-to-generate-creatives-with-rich</link><guid isPermaLink="false">https://blog.rocketium.com/p/how-to-generate-creatives-with-rich</guid><dc:creator><![CDATA[Anand Hrushikesh]]></dc:creator><pubDate>Fri, 09 Jun 2023 05:01:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F166d1cc3-6032-4ca5-b24b-868415988662_600x529.gif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>The problem</h2><p>For a recent campaign, one of our customers wanted to use creatives with bright colours. While making these creatives on our web-based editor, it looked bright, but the generated output looked faded.</p><h3>What the customer wanted vs what we generated</h3><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;2ca4c772-0b43-440c-88e4-ca2ae1f3207e&quot;,&quot;duration&quot;:null}"></div><h2>Our findings</h2><p>When we analyzed the metadata of the output images, we realized that the colour profile was getting set to sRGB IEC61966-2.1.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bQFi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cb32a1e-ddd3-4ed7-97e0-ff2d896b2162_307x87.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bQFi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cb32a1e-ddd3-4ed7-97e0-ff2d896b2162_307x87.png 424w, https://substackcdn.com/image/fetch/$s_!bQFi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cb32a1e-ddd3-4ed7-97e0-ff2d896b2162_307x87.png 848w, https://substackcdn.com/image/fetch/$s_!bQFi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cb32a1e-ddd3-4ed7-97e0-ff2d896b2162_307x87.png 1272w, https://substackcdn.com/image/fetch/$s_!bQFi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cb32a1e-ddd3-4ed7-97e0-ff2d896b2162_307x87.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bQFi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cb32a1e-ddd3-4ed7-97e0-ff2d896b2162_307x87.png" width="307" height="87" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3cb32a1e-ddd3-4ed7-97e0-ff2d896b2162_307x87.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:87,&quot;width&quot;:307,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:10510,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!bQFi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cb32a1e-ddd3-4ed7-97e0-ff2d896b2162_307x87.png 424w, https://substackcdn.com/image/fetch/$s_!bQFi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cb32a1e-ddd3-4ed7-97e0-ff2d896b2162_307x87.png 848w, https://substackcdn.com/image/fetch/$s_!bQFi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cb32a1e-ddd3-4ed7-97e0-ff2d896b2162_307x87.png 1272w, https://substackcdn.com/image/fetch/$s_!bQFi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cb32a1e-ddd3-4ed7-97e0-ff2d896b2162_307x87.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ndJs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe22359e4-444b-4b9e-972a-eb0835f8b425_834x408.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ndJs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe22359e4-444b-4b9e-972a-eb0835f8b425_834x408.png 424w, https://substackcdn.com/image/fetch/$s_!ndJs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe22359e4-444b-4b9e-972a-eb0835f8b425_834x408.png 848w, https://substackcdn.com/image/fetch/$s_!ndJs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe22359e4-444b-4b9e-972a-eb0835f8b425_834x408.png 1272w, https://substackcdn.com/image/fetch/$s_!ndJs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe22359e4-444b-4b9e-972a-eb0835f8b425_834x408.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ndJs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe22359e4-444b-4b9e-972a-eb0835f8b425_834x408.png" width="834" height="408" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e22359e4-444b-4b9e-972a-eb0835f8b425_834x408.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:408,&quot;width&quot;:834,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:100813,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ndJs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe22359e4-444b-4b9e-972a-eb0835f8b425_834x408.png 424w, https://substackcdn.com/image/fetch/$s_!ndJs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe22359e4-444b-4b9e-972a-eb0835f8b425_834x408.png 848w, https://substackcdn.com/image/fetch/$s_!ndJs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe22359e4-444b-4b9e-972a-eb0835f8b425_834x408.png 1272w, https://substackcdn.com/image/fetch/$s_!ndJs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe22359e4-444b-4b9e-972a-eb0835f8b425_834x408.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>A little intro on digital colours</h2><p>Let&#8217;s try to understand colours and how they are displayed digitally. </p><p><strong>Colour models - </strong>A colour model is a way to represent and describe colours. It defines how colours are created by combining different components. The most common colour models are RGB (Red, Green, Blue) and CMYK (Cyan, Magenta, Yellow, and Black).<strong> </strong></p><p><strong>Colour spaces</strong> define the number of colours available (sRGB, Display P3). </p><p>And <strong>colour profile</strong> instructs how to accurately display those colours on specific devices or applications. </p><p>The following animation shows the colours available in different colour spaces. Gray denotes the colour range most human eyes can see. The colours in the triangle are what is supported by digital screens. sRGB (<em>the smaller triangle</em>) used to be standard on the internet. But a lot has changed in the past few years, which becomes evident from<a href="https://css-tricks.com/the-expanding-gamut-of-color-on-the-web/"> this article</a>. (Courtesy: <a href="https://www.wigglepixel.nl/en/blog/what-are-color-spaces-color-profiles-and-gamma-correction">wigglepixel.nl</a>)</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_59d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F166d1cc3-6032-4ca5-b24b-868415988662_600x529.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_59d!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F166d1cc3-6032-4ca5-b24b-868415988662_600x529.gif 424w, https://substackcdn.com/image/fetch/$s_!_59d!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F166d1cc3-6032-4ca5-b24b-868415988662_600x529.gif 848w, https://substackcdn.com/image/fetch/$s_!_59d!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F166d1cc3-6032-4ca5-b24b-868415988662_600x529.gif 1272w, https://substackcdn.com/image/fetch/$s_!_59d!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F166d1cc3-6032-4ca5-b24b-868415988662_600x529.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_59d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F166d1cc3-6032-4ca5-b24b-868415988662_600x529.gif" width="600" height="529" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/166d1cc3-6032-4ca5-b24b-868415988662_600x529.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:529,&quot;width&quot;:600,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2697556,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!_59d!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F166d1cc3-6032-4ca5-b24b-868415988662_600x529.gif 424w, https://substackcdn.com/image/fetch/$s_!_59d!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F166d1cc3-6032-4ca5-b24b-868415988662_600x529.gif 848w, https://substackcdn.com/image/fetch/$s_!_59d!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F166d1cc3-6032-4ca5-b24b-868415988662_600x529.gif 1272w, https://substackcdn.com/image/fetch/$s_!_59d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F166d1cc3-6032-4ca5-b24b-868415988662_600x529.gif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>New learnings</h3><ol><li><p>We realized that since <a href="https://developer.chrome.com/blog/new-in-chrome-94/#canvas-colorspace">Chrome 94</a>, display-p3 support was available for the canvas element. </p></li></ol><pre><code><code>opts = {colorSpace:'display-p3'};
const ctx = canvas.getContext('2d', opts);</code></code></pre><ol start="2"><li><p>Even though Chrome started support for display-p3 for users, an option to take <a href="https://chromedevtools.github.io/devtools-protocol/tot/Page/#method-captureScreenshot">screenshots</a> with &#8216;display-p3&#8217; colour profile via the Chrome Developer Protocol was missing at the time of writing this article:<br></p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kQFG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7093f01d-4068-482e-a39f-c3c42dbb66e6_892x610.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kQFG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7093f01d-4068-482e-a39f-c3c42dbb66e6_892x610.png 424w, https://substackcdn.com/image/fetch/$s_!kQFG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7093f01d-4068-482e-a39f-c3c42dbb66e6_892x610.png 848w, https://substackcdn.com/image/fetch/$s_!kQFG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7093f01d-4068-482e-a39f-c3c42dbb66e6_892x610.png 1272w, https://substackcdn.com/image/fetch/$s_!kQFG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7093f01d-4068-482e-a39f-c3c42dbb66e6_892x610.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kQFG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7093f01d-4068-482e-a39f-c3c42dbb66e6_892x610.png" width="892" height="610" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7093f01d-4068-482e-a39f-c3c42dbb66e6_892x610.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:610,&quot;width&quot;:892,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:88114,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kQFG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7093f01d-4068-482e-a39f-c3c42dbb66e6_892x610.png 424w, https://substackcdn.com/image/fetch/$s_!kQFG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7093f01d-4068-482e-a39f-c3c42dbb66e6_892x610.png 848w, https://substackcdn.com/image/fetch/$s_!kQFG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7093f01d-4068-482e-a39f-c3c42dbb66e6_892x610.png 1272w, https://substackcdn.com/image/fetch/$s_!kQFG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7093f01d-4068-482e-a39f-c3c42dbb66e6_892x610.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><strong>How to retain the original colours?</strong></h3><p>The original colours used to generate the creation were in Display P3 (containing more expansive colours than sRGB). When we take the final screenshot using Puppeteer, Chrome takes the screenshots in sRGB. As Puppeteer took the screenshot in a headless Chrome instance (both in a lambda or a VM instance), no physical monitor was involved. A few of the approaches we took are the following:</p><ol><li><p>Tweak the virtual display to render in a display-p3 colour profile.</p></li><li><p>Force chrome to render in display-p3 profile using experimental tags.</p></li></ol><p>We started working on this issue around mid-April. We took time to break down different parts of our infrastructure, create standalone experiments, tweak, and test the results. Red lines show failed experiments, green shows successful experiments, and grey are pending experiments.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aIHs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F068a3e6e-8989-45cd-874e-5193642fb2f9_6646x5060.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aIHs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F068a3e6e-8989-45cd-874e-5193642fb2f9_6646x5060.png 424w, https://substackcdn.com/image/fetch/$s_!aIHs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F068a3e6e-8989-45cd-874e-5193642fb2f9_6646x5060.png 848w, https://substackcdn.com/image/fetch/$s_!aIHs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F068a3e6e-8989-45cd-874e-5193642fb2f9_6646x5060.png 1272w, https://substackcdn.com/image/fetch/$s_!aIHs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F068a3e6e-8989-45cd-874e-5193642fb2f9_6646x5060.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aIHs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F068a3e6e-8989-45cd-874e-5193642fb2f9_6646x5060.png" width="1456" height="1109" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/068a3e6e-8989-45cd-874e-5193642fb2f9_6646x5060.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1109,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1480099,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!aIHs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F068a3e6e-8989-45cd-874e-5193642fb2f9_6646x5060.png 424w, https://substackcdn.com/image/fetch/$s_!aIHs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F068a3e6e-8989-45cd-874e-5193642fb2f9_6646x5060.png 848w, https://substackcdn.com/image/fetch/$s_!aIHs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F068a3e6e-8989-45cd-874e-5193642fb2f9_6646x5060.png 1272w, https://substackcdn.com/image/fetch/$s_!aIHs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F068a3e6e-8989-45cd-874e-5193642fb2f9_6646x5060.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A significant shift in finding the solution happened when we took a step back and asked fundamental questions about the approaches taken. </p><p>Instead of tweaking the colour profiles of the virtual display, we thought of attaching the desired colour profile to the generated image. To quickly check our approach, we used the Assign Profile feature in the Preview tool on Mac to assign a Display P3 profile. The results were very close to the desired output.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Z5QM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9df418bb-5c15-427a-947c-437cf16678d7_547x148.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Z5QM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9df418bb-5c15-427a-947c-437cf16678d7_547x148.png 424w, https://substackcdn.com/image/fetch/$s_!Z5QM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9df418bb-5c15-427a-947c-437cf16678d7_547x148.png 848w, https://substackcdn.com/image/fetch/$s_!Z5QM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9df418bb-5c15-427a-947c-437cf16678d7_547x148.png 1272w, https://substackcdn.com/image/fetch/$s_!Z5QM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9df418bb-5c15-427a-947c-437cf16678d7_547x148.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Z5QM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9df418bb-5c15-427a-947c-437cf16678d7_547x148.png" width="547" height="148" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9df418bb-5c15-427a-947c-437cf16678d7_547x148.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:148,&quot;width&quot;:547,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:27940,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Z5QM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9df418bb-5c15-427a-947c-437cf16678d7_547x148.png 424w, https://substackcdn.com/image/fetch/$s_!Z5QM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9df418bb-5c15-427a-947c-437cf16678d7_547x148.png 848w, https://substackcdn.com/image/fetch/$s_!Z5QM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9df418bb-5c15-427a-947c-437cf16678d7_547x148.png 1272w, https://substackcdn.com/image/fetch/$s_!Z5QM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9df418bb-5c15-427a-947c-437cf16678d7_547x148.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h2>An interim solution</h2><p>The solution, for now, was to programmatically attach the Display-P3 colour profile after an image was generated. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uPme!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c56893-7e7b-4c12-b81a-7e7606460980_1568x532.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uPme!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c56893-7e7b-4c12-b81a-7e7606460980_1568x532.png 424w, https://substackcdn.com/image/fetch/$s_!uPme!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c56893-7e7b-4c12-b81a-7e7606460980_1568x532.png 848w, https://substackcdn.com/image/fetch/$s_!uPme!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c56893-7e7b-4c12-b81a-7e7606460980_1568x532.png 1272w, https://substackcdn.com/image/fetch/$s_!uPme!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c56893-7e7b-4c12-b81a-7e7606460980_1568x532.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uPme!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c56893-7e7b-4c12-b81a-7e7606460980_1568x532.png" width="1456" height="494" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23c56893-7e7b-4c12-b81a-7e7606460980_1568x532.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:494,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:138873,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uPme!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c56893-7e7b-4c12-b81a-7e7606460980_1568x532.png 424w, https://substackcdn.com/image/fetch/$s_!uPme!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c56893-7e7b-4c12-b81a-7e7606460980_1568x532.png 848w, https://substackcdn.com/image/fetch/$s_!uPme!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c56893-7e7b-4c12-b81a-7e7606460980_1568x532.png 1272w, https://substackcdn.com/image/fetch/$s_!uPme!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c56893-7e7b-4c12-b81a-7e7606460980_1568x532.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;056f46fa-8f35-4a94-b48e-6892b7fabcaf&quot;,&quot;duration&quot;:null}"></div><p>With this knowledge, we were able to:</p><ol><li><p>Bring support for a broader range of colours in our output.</p></li><li><p>Fix the fade-out issue during the import of PSD files.</p></li><li><p>Improve our colours in video output.</p></li></ol><h2>Drawbacks of the current approach</h2><p>We still lose some details of the images even if we can retain the colours.</p><h2>Resources</h2><ol><li><p><a href="https://canvatechblog.com/a-journey-through-color-space-with-ffmpeg-3a129bfd9b05">Colour space and FFMPEG</a></p></li><li><p><a href="https://www.wigglepixel.nl/blog/wat-zijn-color-models">Colour Models</a></p></li><li><p><a href="https://www.wigglepixel.nl/en/blog/what-are-color-spaces-color-profiles-and-gamma-correction">Colour spaces and colour profile</a></p></li><li><p><a href="https://css-tricks.com/the-expanding-gamut-of-color-on-the-web/">Expanding gamut of colours on the web</a></p></li><li><p><a href="https://web.dev/">Google Chrome Developer Relations Portal</a></p></li><li><p><a href="https://bottosson.github.io/posts/oklab/">Oklab</a> - A perceptual colour space for image processing</p></li></ol><p></p><p><em>The author, after running and documenting the experiments.</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ct5k!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F685a5465-2232-43ff-a0ef-662fcbf59b2b_677x368.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ct5k!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F685a5465-2232-43ff-a0ef-662fcbf59b2b_677x368.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ct5k!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F685a5465-2232-43ff-a0ef-662fcbf59b2b_677x368.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ct5k!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F685a5465-2232-43ff-a0ef-662fcbf59b2b_677x368.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ct5k!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F685a5465-2232-43ff-a0ef-662fcbf59b2b_677x368.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ct5k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F685a5465-2232-43ff-a0ef-662fcbf59b2b_677x368.jpeg" width="567" height="308.20679468242247" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/685a5465-2232-43ff-a0ef-662fcbf59b2b_677x368.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:368,&quot;width&quot;:677,&quot;resizeWidth&quot;:567,&quot;bytes&quot;:45228,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ct5k!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F685a5465-2232-43ff-a0ef-662fcbf59b2b_677x368.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ct5k!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F685a5465-2232-43ff-a0ef-662fcbf59b2b_677x368.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ct5k!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F685a5465-2232-43ff-a0ef-662fcbf59b2b_677x368.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ct5k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F685a5465-2232-43ff-a0ef-662fcbf59b2b_677x368.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Y9zh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe55cad0f-c64b-45d2-8d8a-47aa85c8bcb3_500x500.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Y9zh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe55cad0f-c64b-45d2-8d8a-47aa85c8bcb3_500x500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Y9zh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe55cad0f-c64b-45d2-8d8a-47aa85c8bcb3_500x500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Y9zh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe55cad0f-c64b-45d2-8d8a-47aa85c8bcb3_500x500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Y9zh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe55cad0f-c64b-45d2-8d8a-47aa85c8bcb3_500x500.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Y9zh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe55cad0f-c64b-45d2-8d8a-47aa85c8bcb3_500x500.jpeg" width="500" height="500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e55cad0f-c64b-45d2-8d8a-47aa85c8bcb3_500x500.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:500,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:39515,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Y9zh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe55cad0f-c64b-45d2-8d8a-47aa85c8bcb3_500x500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Y9zh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe55cad0f-c64b-45d2-8d8a-47aa85c8bcb3_500x500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Y9zh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe55cad0f-c64b-45d2-8d8a-47aa85c8bcb3_500x500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Y9zh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe55cad0f-c64b-45d2-8d8a-47aa85c8bcb3_500x500.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h3><strong>Updates</strong></h3><ul><li><p>With the latest release of Chrome 114, we have <a href="https://web.dev/web-platform-05-2023/#css-color-level-4-features">access to more colours</a> on the web:</p></li><li><p>A <a href="https://developer.chrome.com/articles/high-definition-css-color-guide/">deeper article about colours and colour-profiles</a> on the web by Adam Argyle from the Chrome Dev Rel team.</p><p><br></p></li></ul>]]></content:encoded></item><item><title><![CDATA[The Secret to Sharper Images 🥷🏻: Solving the Export Quality Problem ]]></title><description><![CDATA[Using ImageMagick to export sharper images]]></description><link>https://blog.rocketium.com/p/the-secret-to-sharper-images-solving</link><guid isPermaLink="false">https://blog.rocketium.com/p/the-secret-to-sharper-images-solving</guid><dc:creator><![CDATA[Yashank]]></dc:creator><pubDate>Thu, 08 Jun 2023 12:17:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d1cbdd9-1a76-482b-99da-ae3af17f8b3b_1492x1066.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>&#128512; Introduction </h2><p>When it comes to advertising, every detail matters. From captivating headlines to captivating images, advertisers constantly strive to create eye-catching ad creatives that leave a lasting impact on their audience. Among the many elements at play, two often overlooked yet crucial factors are the <strong>colors</strong> used and the <strong>sharpness of text</strong> within the creative. </p><blockquote><p>&#8220;Crisp and sharp text is the anchor that holds an ad together. It ensures that the message cuts through the noise and makes a lasting impact on the viewer&#8221; - David Ogilvy, advertising legend and founder of Ogilvy &amp; Mather.</p></blockquote><p><strong>Picture this</strong>: You're scrolling through your social media feed, and amidst a sea of blurry or pixelated ads, one stands out with crisp, razor-sharp text. Your eyes are instantly drawn to it, and within seconds, you've grasped its message. That's the power of sharp text &#8211; it grabs attention, communicates effectively, and ensures the viewer doesn't miss out on the intended message.</p><p>In this blog, we will discuss everyday issues we face when creating ad creatives from any web-based platform like Rocketium, Canva, or Photopea.</p><p></p><h2>&#127787;&#65039; Blurry Export: The Problem </h2><p>Before jumping on to the issue, let&#8217;s discuss how to export work in Rocketium and how we generate images from HTML. <br></p><p>Any idea how to do it? <br>If your answer was to use Puppeteer and take a screenshot, Then we all are on the same page, if haven&#8217;t guessed it correctly. Let&#8217;s discuss how it works. At <strong><a href="https://www.rocketium.com">Rocketium</a></strong> we handle thousands of creatives that too with different file types, being a web-based platform we use <strong>Puppeteer</strong> to generate creatives. Under the hood, it opens a headless Chrome and takes a screenshot of the HTML output, and exports it in the required file format. So with this, we can generate anything on HTML and simply opens up a new headless Chrome tab and then take a screenshot there. </p><p>&#128248; When it comes to taking screenshots using Puppeteer, here are some major hurdles you may encounter:</p><ol><li><p><strong>Rendering Inconsistencies</strong>: One of the primary challenges with Puppeteer is dealing with rendering inconsistencies across different websites and web applications. Since Puppeteer relies on the Chromium browser, variations in CSS styles, JavaScript behavior, or dynamic content can result in screenshots that differ from what is expected. Ensuring consistent and accurate rendering across various scenarios can be a complex task.</p></li><li><p><strong>Page Load Timing</strong>: Capturing screenshots at the precise moment when a page has finished loading its content is crucial for obtaining accurate representations of web pages. However, timing can be challenging, especially when dealing with pages that load dynamically or have asynchronous content. Ensuring that Puppeteer waits for all necessary resources to load before taking a screenshot requires careful handling and synchronization.</p></li><li><p><strong>Performance and Resource Usage</strong>: Puppeteer operates by launching a headless Chromium browser, which consumes significant system resources. This can impact performance, especially when dealing with complex or resource-intensive web pages. Efficiently managing resources, optimizing code, and handling potential memory leaks are essential to maintain a smooth and reliable screenshot-capturing process.</p></li><li><p><strong>Image Size and Resolution</strong>: The resolution and size of the captured screenshot can significantly impact its clarity. Puppeteer allows you to specify the viewport size and the dimensions of the screenshot, and using appropriate values is crucial for obtaining sharp and clear images. Inadequate resolution or incorrectly sized screenshots can result in blurry output.</p></li><li><p><strong>Sharpness</strong>: The preview of any HTML Page depends totally upon the user screen, so while generating it totally depends upon which OS and machine you are using for your servers. This generates a lot of issues with the quality of images in the creative.  </p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YjjI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03924231-45d1-4888-a5a2-cdd4f615bfbe_500x672.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YjjI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03924231-45d1-4888-a5a2-cdd4f615bfbe_500x672.jpeg 424w, https://substackcdn.com/image/fetch/$s_!YjjI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03924231-45d1-4888-a5a2-cdd4f615bfbe_500x672.jpeg 848w, https://substackcdn.com/image/fetch/$s_!YjjI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03924231-45d1-4888-a5a2-cdd4f615bfbe_500x672.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!YjjI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03924231-45d1-4888-a5a2-cdd4f615bfbe_500x672.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YjjI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03924231-45d1-4888-a5a2-cdd4f615bfbe_500x672.jpeg" width="346" height="465.024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/03924231-45d1-4888-a5a2-cdd4f615bfbe_500x672.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:672,&quot;width&quot;:500,&quot;resizeWidth&quot;:346,&quot;bytes&quot;:74382,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YjjI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03924231-45d1-4888-a5a2-cdd4f615bfbe_500x672.jpeg 424w, https://substackcdn.com/image/fetch/$s_!YjjI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03924231-45d1-4888-a5a2-cdd4f615bfbe_500x672.jpeg 848w, https://substackcdn.com/image/fetch/$s_!YjjI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03924231-45d1-4888-a5a2-cdd4f615bfbe_500x672.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!YjjI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03924231-45d1-4888-a5a2-cdd4f615bfbe_500x672.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>We have handled most of the issues and tackled them while setting up the infrastructure but recently we hit a bottleneck with blurry outputs. </p><p>While working with one of the customers, a customer reported that one of the product images is very blurry post output and when we dug deep, Puppeteer was at fault &#129327; .</p><p>We tried looking at the issue and the root cause was the screenshot. Till the screenshot the creative looked fine but when we take the screenshot the Image lose the sharpness. So we thought of doing some experiments to resolve this. Let&#8217;s look into what we tried. </p><h2>&#129514; Experiments</h2><p>To resolve this issue, we spent 3 weeks trying different experiments to figure out if we can achieve some success. </p><p><strong>&#128993; -  Improvement, &#128308; - No Improvement, &#128994; - Success</strong><br></p><h5>Some of the approaches we have tried -</h5><ol><li><p>&#128993; Scaling the preview to twice the size and resizing to the original</p></li><li><p>&#128308; Taking a manual screen grab on Mac.</p></li><li><p>&#128308; Taking a manual screen grab on Windows.</p></li><li><p>&#128308; Taking a screenshot using Puppeteer on Mac.</p></li><li><p>&#128308; Taking a screenshot using Chrome API.</p></li><li><p>&#128308; Taking a screenshot on a GPU machine.</p></li><li><p>&#128308; Taking a screenshot after adding CSS options to instruct the browser to render sharp.</p></li><li><p>&#128308; CSS - <code>image-rendering: -webkit-optimize-contrast;</code></p></li><li><p>&#128308; CSS - <code>transform: translateZ(1px) OR transform: translateZ(0);</code></p></li><li><p>&#128308; &#8216;srcset&#8217; instead of src in &lt;img&gt; tag.</p></li><li><p>&#128308; Resize the product image to be the exact size it is supposed to be rendered first and then use the URL.</p></li><li><p>&#128308; Sharpen the image before and add that and then generate output.</p></li><li><p>&#128308; Run puppeteer on Mac M1 Air and Mac mini.</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DLAE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1af4c507-5360-4d53-baab-5e44dfc614c8_507x500.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DLAE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1af4c507-5360-4d53-baab-5e44dfc614c8_507x500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!DLAE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1af4c507-5360-4d53-baab-5e44dfc614c8_507x500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!DLAE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1af4c507-5360-4d53-baab-5e44dfc614c8_507x500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!DLAE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1af4c507-5360-4d53-baab-5e44dfc614c8_507x500.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DLAE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1af4c507-5360-4d53-baab-5e44dfc614c8_507x500.jpeg" width="385" height="379.6844181459566" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1af4c507-5360-4d53-baab-5e44dfc614c8_507x500.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:500,&quot;width&quot;:507,&quot;resizeWidth&quot;:385,&quot;bytes&quot;:75888,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DLAE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1af4c507-5360-4d53-baab-5e44dfc614c8_507x500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!DLAE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1af4c507-5360-4d53-baab-5e44dfc614c8_507x500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!DLAE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1af4c507-5360-4d53-baab-5e44dfc614c8_507x500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!DLAE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1af4c507-5360-4d53-baab-5e44dfc614c8_507x500.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>After trying all the experiments, we still couldn&#8217;t achieve the results. We were out of ideas. We had literally no idea what to do here, then Santosh ( VP at Engineering ) pitched to research around how Photoshop is able to achieve this whereas none of the web-based platforms are able to solve this problem. </p><h2>&#128300; The Research: First Step Towards Success</h2><p>When we started researching how PhotoShop generates images, the first thing that we could sense was, PS generated everything client side, and that to pixel by pixel impainting. Using the user&#8217;s device power and capabilities it generated each creative by imprinting each pixel instead of a screenshot. Not only this then we came across a research paper and an article mentioning how sharpening is used post-export in various platforms and even in PS. <br><br>My first reaction to this article was, this was so obvious! If you have blurry output, instead of fixing the export, sharpen the export and <strong>TADA</strong>!  As soon as this struck, we all had a ray of hope and an idea of what can be done here. We started reading articles about different techniques and algorithms that sharpen an Image, and believe me when I say there are 100s of algo, there are actually so many of them that we were so confused about which one to use and why? We read about each one of them ( Like not every but at least the <a href="http://www.stanford.edu/class/cs448f/lectures/2.1/Sharpening.pdf">top 10</a> ). Then we decided to look out for the options that we can integrate easily and solves for our use case!<br><br>Then we came across this <a href="https://www.smashingmagazine.com/2015/06/efficient-image-resizing-with-imagemagick/">Article</a>, which explained how resizing works and how an image's brightness/blurry-ness happens. So we started digging more into it and then did some tests. There was so much to handle but finally, we hit the jackpot. We could see the difference</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AYyM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d1cbdd9-1a76-482b-99da-ae3af17f8b3b_1492x1066.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AYyM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d1cbdd9-1a76-482b-99da-ae3af17f8b3b_1492x1066.png 424w, https://substackcdn.com/image/fetch/$s_!AYyM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d1cbdd9-1a76-482b-99da-ae3af17f8b3b_1492x1066.png 848w, https://substackcdn.com/image/fetch/$s_!AYyM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d1cbdd9-1a76-482b-99da-ae3af17f8b3b_1492x1066.png 1272w, https://substackcdn.com/image/fetch/$s_!AYyM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d1cbdd9-1a76-482b-99da-ae3af17f8b3b_1492x1066.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AYyM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d1cbdd9-1a76-482b-99da-ae3af17f8b3b_1492x1066.png" width="1456" height="1040" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6d1cbdd9-1a76-482b-99da-ae3af17f8b3b_1492x1066.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1040,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:438877,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!AYyM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d1cbdd9-1a76-482b-99da-ae3af17f8b3b_1492x1066.png 424w, https://substackcdn.com/image/fetch/$s_!AYyM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d1cbdd9-1a76-482b-99da-ae3af17f8b3b_1492x1066.png 848w, https://substackcdn.com/image/fetch/$s_!AYyM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d1cbdd9-1a76-482b-99da-ae3af17f8b3b_1492x1066.png 1272w, https://substackcdn.com/image/fetch/$s_!AYyM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d1cbdd9-1a76-482b-99da-ae3af17f8b3b_1492x1066.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>&#128273;Solution: The Final Approach</h2><p>So now it was clear that sharpening will do the magic. So we finalized with &#8216;<a href="https://imagemagick.org/index.php">Image Magick</a>&#8217;. We started looking at how Image Magic works and what algorithms it works on.</p><p>So we came across a command line tool from ImageMagick itself that will do this job for us. So we tried our hands on it and it had so many properties that we could play around with. <br>Let&#8217;s jump into some code and figure out how Image Magick works. </p><p>This is the ImageMagick command that does the magic (sharpening) for us. </p><pre><code>magick sample.jpeg -unsharp 1.5x1+0.7+0.02 sharpened.jpeg</code></pre><p>So here we can see there are multiple parameters that we need to pass on. Let&#8217;s look into it what all these parameters stand for. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Xjpk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f5c8c66-5f7b-4831-aa96-0c62c89817f0_1838x686.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Xjpk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f5c8c66-5f7b-4831-aa96-0c62c89817f0_1838x686.png 424w, https://substackcdn.com/image/fetch/$s_!Xjpk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f5c8c66-5f7b-4831-aa96-0c62c89817f0_1838x686.png 848w, https://substackcdn.com/image/fetch/$s_!Xjpk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f5c8c66-5f7b-4831-aa96-0c62c89817f0_1838x686.png 1272w, https://substackcdn.com/image/fetch/$s_!Xjpk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f5c8c66-5f7b-4831-aa96-0c62c89817f0_1838x686.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Xjpk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f5c8c66-5f7b-4831-aa96-0c62c89817f0_1838x686.png" width="1456" height="543" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2f5c8c66-5f7b-4831-aa96-0c62c89817f0_1838x686.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:543,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:79779,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Xjpk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f5c8c66-5f7b-4831-aa96-0c62c89817f0_1838x686.png 424w, https://substackcdn.com/image/fetch/$s_!Xjpk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f5c8c66-5f7b-4831-aa96-0c62c89817f0_1838x686.png 848w, https://substackcdn.com/image/fetch/$s_!Xjpk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f5c8c66-5f7b-4831-aa96-0c62c89817f0_1838x686.png 1272w, https://substackcdn.com/image/fetch/$s_!Xjpk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f5c8c66-5f7b-4831-aa96-0c62c89817f0_1838x686.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>So here <strong>unsharp </strong>is the main command that enables the sharpening algo. After that, we have the <strong>parameters. </strong>There are 4 values that determine how the logic will work and what it will change for colors and borders to make the image sharper. </p><p>Let&#8217;s Focus on these 4 parameters. </p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1fPG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0730c743-11fb-4228-ade5-984c749acc25_408x132.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1fPG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0730c743-11fb-4228-ade5-984c749acc25_408x132.png 424w, https://substackcdn.com/image/fetch/$s_!1fPG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0730c743-11fb-4228-ade5-984c749acc25_408x132.png 848w, https://substackcdn.com/image/fetch/$s_!1fPG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0730c743-11fb-4228-ade5-984c749acc25_408x132.png 1272w, https://substackcdn.com/image/fetch/$s_!1fPG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0730c743-11fb-4228-ade5-984c749acc25_408x132.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1fPG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0730c743-11fb-4228-ade5-984c749acc25_408x132.png" width="308" height="99.6470588235294" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0730c743-11fb-4228-ade5-984c749acc25_408x132.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:132,&quot;width&quot;:408,&quot;resizeWidth&quot;:308,&quot;bytes&quot;:9368,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1fPG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0730c743-11fb-4228-ade5-984c749acc25_408x132.png 424w, https://substackcdn.com/image/fetch/$s_!1fPG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0730c743-11fb-4228-ade5-984c749acc25_408x132.png 848w, https://substackcdn.com/image/fetch/$s_!1fPG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0730c743-11fb-4228-ade5-984c749acc25_408x132.png 1272w, https://substackcdn.com/image/fetch/$s_!1fPG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0730c743-11fb-4228-ade5-984c749acc25_408x132.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><ol><li><p>Radius (1.5) - The radius of the Gaussian, in pixels, not counting the center pixel (default 0).</p></li><li><p>Sigma (1) -  The standard deviation of the Gaussian, in pixels (default 1.0).</p></li><li><p>Gain (0.7) - The fraction of the difference between the original and the blurred image that is added back into the original (default 1.0).</p></li><li><p>Threshold (0.02) - The threshold, as a fraction of QuantumRange, is needed to apply the difference amount (default 0.05).</p></li></ol><p>So we can manipulate these values and can identify which works better for which use case. For Our use came up with these values. </p><h4>&#128640; Implementation</h4><p>Our export works mostly on serverless so we had to install ImageMagick there and use it in code. So we installed it using a layer under GM and used it as a function where we can pass the values from the frontend so that if in the future we want to manipulate we can easily play with the values from the frontend itself. </p><p>So finally we were able to implement and sharpen images as per the requirements. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qoWh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40e70c28-cea1-4ecc-8760-4814b34b6f1d_2080x2648.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qoWh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40e70c28-cea1-4ecc-8760-4814b34b6f1d_2080x2648.png 424w, https://substackcdn.com/image/fetch/$s_!qoWh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40e70c28-cea1-4ecc-8760-4814b34b6f1d_2080x2648.png 848w, https://substackcdn.com/image/fetch/$s_!qoWh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40e70c28-cea1-4ecc-8760-4814b34b6f1d_2080x2648.png 1272w, https://substackcdn.com/image/fetch/$s_!qoWh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40e70c28-cea1-4ecc-8760-4814b34b6f1d_2080x2648.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qoWh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40e70c28-cea1-4ecc-8760-4814b34b6f1d_2080x2648.png" width="612" height="779.2912087912088" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/40e70c28-cea1-4ecc-8760-4814b34b6f1d_2080x2648.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1854,&quot;width&quot;:1456,&quot;resizeWidth&quot;:612,&quot;bytes&quot;:565585,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qoWh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40e70c28-cea1-4ecc-8760-4814b34b6f1d_2080x2648.png 424w, https://substackcdn.com/image/fetch/$s_!qoWh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40e70c28-cea1-4ecc-8760-4814b34b6f1d_2080x2648.png 848w, https://substackcdn.com/image/fetch/$s_!qoWh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40e70c28-cea1-4ecc-8760-4814b34b6f1d_2080x2648.png 1272w, https://substackcdn.com/image/fetch/$s_!qoWh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40e70c28-cea1-4ecc-8760-4814b34b6f1d_2080x2648.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You can refer to the above function written in javascript :)</p><p>Everyone was happy and we were about to ship this as well, but it wasn&#8217;t this easy as well. While testing we came across some cases which just took our whole implementation to 2 steps back. We were sharpening the whole screenshot and exporting it but due to a major issue raised that even the text and the background image were sharpened we somehow ended up creating a jaggy effect for the text. <br></p><h2>&#128561; The Climax</h2><p>So after facing issues with the text, we decided to take another step and make this a bit more adaptable for our use case. So now after taking screenshots of the whole creation, we wrote some rules to figure out which all images need to be sharpened. We hide all other elements and just keep that image and take another screenshot of it and then sharpen it. Example - </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!L6Dd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F995b883b-f754-4ca7-ae53-4297962f4ac7_1041x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!L6Dd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F995b883b-f754-4ca7-ae53-4297962f4ac7_1041x1080.png 424w, https://substackcdn.com/image/fetch/$s_!L6Dd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F995b883b-f754-4ca7-ae53-4297962f4ac7_1041x1080.png 848w, https://substackcdn.com/image/fetch/$s_!L6Dd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F995b883b-f754-4ca7-ae53-4297962f4ac7_1041x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!L6Dd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F995b883b-f754-4ca7-ae53-4297962f4ac7_1041x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!L6Dd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F995b883b-f754-4ca7-ae53-4297962f4ac7_1041x1080.png" width="358" height="371.4121037463977" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/995b883b-f754-4ca7-ae53-4297962f4ac7_1041x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1080,&quot;width&quot;:1041,&quot;resizeWidth&quot;:358,&quot;bytes&quot;:144817,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!L6Dd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F995b883b-f754-4ca7-ae53-4297962f4ac7_1041x1080.png 424w, https://substackcdn.com/image/fetch/$s_!L6Dd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F995b883b-f754-4ca7-ae53-4297962f4ac7_1041x1080.png 848w, https://substackcdn.com/image/fetch/$s_!L6Dd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F995b883b-f754-4ca7-ae53-4297962f4ac7_1041x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!L6Dd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F995b883b-f754-4ca7-ae53-4297962f4ac7_1041x1080.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><br>And then we stitch this image back over the main creative. That should solve the issue, right? <strong>NO &#128534;</strong></p><p>With this another issue comes that was what if there is an image above a text? <strong> </strong>This would overlap text. So now we sat back and finally came up with the final approach. </p><p>So now we take each element of the creative, hide other elements, and take a screenshot of it. So if we have 5 layers, we have 5 screenshots  ready with us, with the rules we take this array and replace these images with sharpened images ( for all which are required ). After all, the sharpening is done, we send this to a function that takes all the images and stitches each of them over each other. </p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PGxk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a5a64a9-1b38-453c-8618-f49bf7041337_2480x668.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PGxk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a5a64a9-1b38-453c-8618-f49bf7041337_2480x668.png 424w, https://substackcdn.com/image/fetch/$s_!PGxk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a5a64a9-1b38-453c-8618-f49bf7041337_2480x668.png 848w, https://substackcdn.com/image/fetch/$s_!PGxk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a5a64a9-1b38-453c-8618-f49bf7041337_2480x668.png 1272w, https://substackcdn.com/image/fetch/$s_!PGxk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a5a64a9-1b38-453c-8618-f49bf7041337_2480x668.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PGxk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a5a64a9-1b38-453c-8618-f49bf7041337_2480x668.png" width="628" height="169.07692307692307" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8a5a64a9-1b38-453c-8618-f49bf7041337_2480x668.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:392,&quot;width&quot;:1456,&quot;resizeWidth&quot;:628,&quot;bytes&quot;:147482,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!PGxk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a5a64a9-1b38-453c-8618-f49bf7041337_2480x668.png 424w, https://substackcdn.com/image/fetch/$s_!PGxk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a5a64a9-1b38-453c-8618-f49bf7041337_2480x668.png 848w, https://substackcdn.com/image/fetch/$s_!PGxk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a5a64a9-1b38-453c-8618-f49bf7041337_2480x668.png 1272w, https://substackcdn.com/image/fetch/$s_!PGxk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a5a64a9-1b38-453c-8618-f49bf7041337_2480x668.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>And TADA! We are finally done with our implementation and now you can easily get all the sharpened export even if <strong>Puppeteer</strong> doesn&#8217;t let you  :)</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KJsX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76ad2542-f548-411b-9467-9288c3339b64_620x465.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KJsX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76ad2542-f548-411b-9467-9288c3339b64_620x465.jpeg 424w, https://substackcdn.com/image/fetch/$s_!KJsX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76ad2542-f548-411b-9467-9288c3339b64_620x465.jpeg 848w, https://substackcdn.com/image/fetch/$s_!KJsX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76ad2542-f548-411b-9467-9288c3339b64_620x465.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!KJsX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76ad2542-f548-411b-9467-9288c3339b64_620x465.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KJsX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76ad2542-f548-411b-9467-9288c3339b64_620x465.jpeg" width="526" height="394.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/76ad2542-f548-411b-9467-9288c3339b64_620x465.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:465,&quot;width&quot;:620,&quot;resizeWidth&quot;:526,&quot;bytes&quot;:59625,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KJsX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76ad2542-f548-411b-9467-9288c3339b64_620x465.jpeg 424w, https://substackcdn.com/image/fetch/$s_!KJsX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76ad2542-f548-411b-9467-9288c3339b64_620x465.jpeg 848w, https://substackcdn.com/image/fetch/$s_!KJsX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76ad2542-f548-411b-9467-9288c3339b64_620x465.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!KJsX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76ad2542-f548-411b-9467-9288c3339b64_620x465.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p>]]></content:encoded></item><item><title><![CDATA[From Legacy to Modern: Embracing ZTNA for Secure Remote Access]]></title><description><![CDATA[Unleashing the Power of Zero Trust Network Access: Rocketium's Journey from VPN to Next-Gen Connectivity]]></description><link>https://blog.rocketium.com/p/from-legacy-to-modern-embracing-ztna</link><guid isPermaLink="false">https://blog.rocketium.com/p/from-legacy-to-modern-embracing-ztna</guid><dc:creator><![CDATA[Himanshu Garg]]></dc:creator><pubDate>Thu, 08 Jun 2023 11:48:25 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/08428ddd-0d05-449a-b8b3-aef7035d15f7_420x300.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Introduction</h2><p>In today's hyper-connected world, where business operations span across continents and remote work has become the new norm, the importance of secure and seamless connectivity cannot be overstated. For years, Virtual Private Networks (VPNs) have served as the go-to solution for organizations seeking to protect their data while enabling remote access. However, as technology evolves at a rapid pace, a new paradigm has emerged, promising to revolutionize the way we approach secure connectivity: <strong>Zero Trust Network Access (ZTNA)</strong>.</p><p>In this technical blog, we will embark on an exciting journey that showcases how Rocketium made a remarkable transition from VPN to ZTNA, unshackling ourselves from the limitations of the past and embracing the full potential of this cutting-edge technology. We will explore the shortcomings of traditional VPNs, shed light on the core principles behind ZTNA, and delve into the practical implementation of this revolutionary approach.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!epwN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F194fde81-6d56-4503-950b-3d605ff91148_500x833.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!epwN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F194fde81-6d56-4503-950b-3d605ff91148_500x833.jpeg 424w, https://substackcdn.com/image/fetch/$s_!epwN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F194fde81-6d56-4503-950b-3d605ff91148_500x833.jpeg 848w, https://substackcdn.com/image/fetch/$s_!epwN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F194fde81-6d56-4503-950b-3d605ff91148_500x833.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!epwN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F194fde81-6d56-4503-950b-3d605ff91148_500x833.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!epwN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F194fde81-6d56-4503-950b-3d605ff91148_500x833.jpeg" width="358" height="596.428" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/194fde81-6d56-4503-950b-3d605ff91148_500x833.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:833,&quot;width&quot;:500,&quot;resizeWidth&quot;:358,&quot;bytes&quot;:150323,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!epwN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F194fde81-6d56-4503-950b-3d605ff91148_500x833.jpeg 424w, https://substackcdn.com/image/fetch/$s_!epwN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F194fde81-6d56-4503-950b-3d605ff91148_500x833.jpeg 848w, https://substackcdn.com/image/fetch/$s_!epwN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F194fde81-6d56-4503-950b-3d605ff91148_500x833.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!epwN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F194fde81-6d56-4503-950b-3d605ff91148_500x833.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>The Need for Change: Challenges Faced with VPN Solution</h2><p>In the quest for a more efficient and reliable network infrastructure, Rocketium decided to move away from the traditional VPN solution. While the VPN served its purpose for years, it had its fair share of challenges and issues that hindered our productivity. Here are the key problems we encountered:</p><ul><li><p><strong>Sluggish Performance:</strong> The VPN often struggled to keep up with our growing demands, resulting in slow connection speeds and frustratingly long loading times. This greatly hampered our workflow efficiency and impacted employee productivity.</p></li><li><p><strong>Lack of Scalability:</strong> As our company expanded and our workforce grew, the VPN's limitations in accommodating increasing connections became evident. We needed a solution that could seamlessly scale with our evolving needs, which the VPN failed to provide.</p></li><li><p><strong>Geo-Restricted Websites:</strong> With business operations spanning multiple geographic locations, accessing geo-restricted websites became a hurdle. The VPN's inability to bypass such restrictions proved to be a significant inconvenience, hindering our international collaboration efforts.</p></li><li><p><strong>Unstable Connection:</strong> The VPN frequently suffered from an unstable connection, leading to unexpected disruptions during critical tasks. Whether it was dropped connections or intermittent service outages, these disruptions affected our team's ability to work efficiently and reliably.</p></li><li><p><strong>Call Quality Issues:</strong> VoIP calls were particularly challenging with the VPN. The unreliable connection resulted in distorted audio, call drops, and frustrating delays, making it difficult to communicate effectively with clients and colleagues.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3XPg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff12bf16b-da70-4cfa-9628-921ec862d884_500x489.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3XPg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff12bf16b-da70-4cfa-9628-921ec862d884_500x489.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3XPg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff12bf16b-da70-4cfa-9628-921ec862d884_500x489.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3XPg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff12bf16b-da70-4cfa-9628-921ec862d884_500x489.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3XPg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff12bf16b-da70-4cfa-9628-921ec862d884_500x489.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3XPg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff12bf16b-da70-4cfa-9628-921ec862d884_500x489.jpeg" width="500" height="489" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f12bf16b-da70-4cfa-9628-921ec862d884_500x489.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:489,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:55530,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3XPg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff12bf16b-da70-4cfa-9628-921ec862d884_500x489.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3XPg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff12bf16b-da70-4cfa-9628-921ec862d884_500x489.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3XPg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff12bf16b-da70-4cfa-9628-921ec862d884_500x489.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3XPg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff12bf16b-da70-4cfa-9628-921ec862d884_500x489.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li><li><p><strong>Notification Delays:</strong> The VPN's unreliable nature often caused delays in receiving crucial notifications and updates. This had a direct impact on our ability to respond promptly to time-sensitive matters, affecting our overall responsiveness as a company.</p></li><li><p><strong>Frequent Disconnections:</strong> One of the most frustrating issues with the VPN was the frequent disconnections experienced by our employees. These unexpected disruptions disrupted workflows, leading to frustration and decreased productivity.</p></li><li><p><strong>Speed vs. Reliability:</strong> The VPN's reliance on UDP for speed compromised its overall reliability while opting for TCP for reliability sacrificed speed. This trade-off presented a constant challenge, as neither option provided the ideal balance between speed and dependability.</p></li></ul><p>Recognizing the limitations and challenges posed by the VPN solution, our company determined that a shift towards a Zero Trust Network Access (ZTNA) approach would provide us with a more secure, scalable, and reliable network infrastructure. By addressing these issues head-on, we are now better equipped to meet the demands of a modern, fast-paced business environment.</p><h2>Introducing ZTNA: A Paradigm Shift in Network Access</h2><p>Zero Trust Network Access (ZTNA) is a security framework that provides secure access to resources while adopting a <a href="https://www.cloudflare.com/learning/security/glossary/what-is-zero-trust/">Zero Trust Security </a>approach or simply "never trust, always verify" approach. Unlike traditional VPN solutions, ZTNA focuses on verifying the identity and trustworthiness of users and devices before granting access to applications and resources.</p><p>ZTNA operates on the principle of granting access based on a combination of contextual factors such as user identity, device health, location, and application requirements. It eliminates the concept of a trusted network perimeter and instead treats every access request as potentially malicious or unauthorized.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Zw1w!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69e3e91b-c030-4d89-ad19-119eacdb6d7f_500x734.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Zw1w!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69e3e91b-c030-4d89-ad19-119eacdb6d7f_500x734.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Zw1w!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69e3e91b-c030-4d89-ad19-119eacdb6d7f_500x734.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Zw1w!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69e3e91b-c030-4d89-ad19-119eacdb6d7f_500x734.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Zw1w!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69e3e91b-c030-4d89-ad19-119eacdb6d7f_500x734.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Zw1w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69e3e91b-c030-4d89-ad19-119eacdb6d7f_500x734.jpeg" width="406" height="596.008" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69e3e91b-c030-4d89-ad19-119eacdb6d7f_500x734.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:734,&quot;width&quot;:500,&quot;resizeWidth&quot;:406,&quot;bytes&quot;:99310,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Zw1w!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69e3e91b-c030-4d89-ad19-119eacdb6d7f_500x734.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Zw1w!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69e3e91b-c030-4d89-ad19-119eacdb6d7f_500x734.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Zw1w!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69e3e91b-c030-4d89-ad19-119eacdb6d7f_500x734.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Zw1w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69e3e91b-c030-4d89-ad19-119eacdb6d7f_500x734.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Unlike VPNs that often provide unrestricted access once connected, ZTNA enforces granular, least-privileged access controls. It enables organizations to define fine-grained access policies, granting users access only to the specific resources they need for their roles or tasks. This approach enhances security by significantly reducing the attack surface and minimizing the risk of lateral movement within the network.</p><p>By shifting the focus from network-centric to user-centric security, ZTNA addresses the limitations of traditional VPN solutions and provides a more scalable, flexible, and secure network access framework for modern enterprises.</p><h2>Working of ZTNA: A Deep Dive into Secure Access</h2><p>Here's an overview of its working:</p><ol><li><p>User Authentication: ZTNA begins by authenticating users using strong methods such as multi-factor authentication (MFA) to verify their identities before granting access.</p></li><li><p>Contextual Access Control: ZTNA leverages contextual factors such as user identity, device health, location, and application requirements to enforce granular access controls. Access is determined dynamically, allowing users to access only the resources they need based on the principle of least privilege.</p></li><li><p>Secure Broker: ZTNA employs a secure access broker, acting as an intermediary between users and the resources they want to access. This broker verifies user identities, checks device health, and enforces access policies to establish a secure connection.</p></li><li><p>Strong Encryption: ZTNA ensures secure communication between users and resources by utilizing robust encryption protocols such as Transport Layer Security (TLS). This encrypts data during transit, safeguarding it from unauthorized access.</p></li><li><p>Continuous Monitoring: ZTNA continuously monitors user activities, device health, and network behavior to detect and respond to potential threats. Real-time monitoring helps identify anomalous behavior and prevents security breaches</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pBWH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44eff0db-91cf-4591-86c7-c5ed706a3ccb_2440x1256.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pBWH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44eff0db-91cf-4591-86c7-c5ed706a3ccb_2440x1256.png 424w, https://substackcdn.com/image/fetch/$s_!pBWH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44eff0db-91cf-4591-86c7-c5ed706a3ccb_2440x1256.png 848w, https://substackcdn.com/image/fetch/$s_!pBWH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44eff0db-91cf-4591-86c7-c5ed706a3ccb_2440x1256.png 1272w, https://substackcdn.com/image/fetch/$s_!pBWH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44eff0db-91cf-4591-86c7-c5ed706a3ccb_2440x1256.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pBWH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44eff0db-91cf-4591-86c7-c5ed706a3ccb_2440x1256.png" width="1456" height="749" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/44eff0db-91cf-4591-86c7-c5ed706a3ccb_2440x1256.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:749,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:356161,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pBWH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44eff0db-91cf-4591-86c7-c5ed706a3ccb_2440x1256.png 424w, https://substackcdn.com/image/fetch/$s_!pBWH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44eff0db-91cf-4591-86c7-c5ed706a3ccb_2440x1256.png 848w, https://substackcdn.com/image/fetch/$s_!pBWH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44eff0db-91cf-4591-86c7-c5ed706a3ccb_2440x1256.png 1272w, https://substackcdn.com/image/fetch/$s_!pBWH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44eff0db-91cf-4591-86c7-c5ed706a3ccb_2440x1256.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li></ol><p>By understanding the inner workings of ZTNA, organizations can establish a secure and dynamic access model that protects against evolving threats while providing users with streamlined and efficient access to resources.</p><h2>Benefits of ZTNA: Empowering Security, Simplicity, and Performance</h2><p>After adopting Zero Trust Network Access (ZTNA), our company experienced a multitude of benefits that revolutionized our network infrastructure.</p><ul><li><p><strong>Enhanced Security:</strong> ZTNA's principle of least privilege granted users access only to the specific resources they needed, reducing the attack surface and mitigating the risk of unauthorized access. This approach significantly enhanced our overall security posture.</p></li><li><p><strong>Simplified Network Management:</strong> ZTNA simplified network management by eliminating the need for complex VPN configurations and maintaining multiple access controls. Its centralized policy management streamlined administration and reduced complexity, resulting in more efficient network operations.</p></li><li><p><strong>Improved User Experience:</strong> Compared to the sluggish and unstable connection of our previous VPN, ZTNA offered an improved user experience and performance. With faster and more reliable access, employees could seamlessly connect to resources, access geo-restricted websites, and engage in stable voice calls. Delays in notifications and frequent disconnections became a thing of the past.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YhzV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0daed5a7-13c2-423b-b7f1-df533c2c23ab_544x417.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YhzV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0daed5a7-13c2-423b-b7f1-df533c2c23ab_544x417.jpeg 424w, https://substackcdn.com/image/fetch/$s_!YhzV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0daed5a7-13c2-423b-b7f1-df533c2c23ab_544x417.jpeg 848w, https://substackcdn.com/image/fetch/$s_!YhzV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0daed5a7-13c2-423b-b7f1-df533c2c23ab_544x417.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!YhzV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0daed5a7-13c2-423b-b7f1-df533c2c23ab_544x417.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YhzV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0daed5a7-13c2-423b-b7f1-df533c2c23ab_544x417.jpeg" width="544" height="417" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0daed5a7-13c2-423b-b7f1-df533c2c23ab_544x417.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:417,&quot;width&quot;:544,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:35150,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YhzV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0daed5a7-13c2-423b-b7f1-df533c2c23ab_544x417.jpeg 424w, https://substackcdn.com/image/fetch/$s_!YhzV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0daed5a7-13c2-423b-b7f1-df533c2c23ab_544x417.jpeg 848w, https://substackcdn.com/image/fetch/$s_!YhzV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0daed5a7-13c2-423b-b7f1-df533c2c23ab_544x417.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!YhzV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0daed5a7-13c2-423b-b7f1-df533c2c23ab_544x417.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The adoption of ZTNA resolved the issues we faced with VPN, providing heightened security, simplified management, and an enhanced user experience. In the next section, we will explore the implementation process and the key considerations for a successful ZTNA deployment.</p><h2>Migration Process: Transitioning from VPN to ZTNA</h2><p>Transitioning Rocketium from a VPN solution to Zero Trust Network Access (ZTNA) involved a well-planned migration process. Here are the steps we took to ensure a smooth and successful transition:</p><ol><li><p><strong>Planning and Preparation:</strong> We conducted a thorough assessment of our existing network infrastructure, identifying dependencies and mapping out the resources and applications that needed to be accessed through ZTNA. This helped us create a migration plan, set goals, and allocate necessary resources.</p></li><li><p><strong>Pilot Testing:</strong> Before implementing ZTNA across the entire organization, we conducted pilot testing with a small group of users. This allowed us to validate the functionality, compatibility, and performance of the ZTNA solution, and address any issues or challenges early on.</p></li><li><p><strong>Communication and Training:</strong> We ensured effective communication with employees, explaining the benefits of ZTNA and providing training on the new access workflow. This helped ease the transition and ensured everyone understood the changes and how to use the new system effectively. </p></li><li><p><strong>Rollout:</strong> During the rollout of ZTNA to employees, we implemented a strategy that involved maintaining VPN as a backup solution for a week, ensuring a seamless transition and addressing any potential issues that may arise.</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TLlA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a99d5d8-b85a-476a-a2c8-27bd7b29332c_612x392.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TLlA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a99d5d8-b85a-476a-a2c8-27bd7b29332c_612x392.jpeg 424w, https://substackcdn.com/image/fetch/$s_!TLlA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a99d5d8-b85a-476a-a2c8-27bd7b29332c_612x392.jpeg 848w, https://substackcdn.com/image/fetch/$s_!TLlA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a99d5d8-b85a-476a-a2c8-27bd7b29332c_612x392.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!TLlA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a99d5d8-b85a-476a-a2c8-27bd7b29332c_612x392.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TLlA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a99d5d8-b85a-476a-a2c8-27bd7b29332c_612x392.jpeg" width="612" height="392" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3a99d5d8-b85a-476a-a2c8-27bd7b29332c_612x392.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:392,&quot;width&quot;:612,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:42790,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!TLlA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a99d5d8-b85a-476a-a2c8-27bd7b29332c_612x392.jpeg 424w, https://substackcdn.com/image/fetch/$s_!TLlA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a99d5d8-b85a-476a-a2c8-27bd7b29332c_612x392.jpeg 848w, https://substackcdn.com/image/fetch/$s_!TLlA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a99d5d8-b85a-476a-a2c8-27bd7b29332c_612x392.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!TLlA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a99d5d8-b85a-476a-a2c8-27bd7b29332c_612x392.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>By following a well-structured migration process, addressing challenges proactively, and ensuring effective communication and training, we successfully transitioned from VPN to ZTNA, empowering our organization with enhanced security, simplified management, and improved user experience.</p><h2>Real-World Results: Tangible Benefits of ZTNA Implementation</h2><p>The adoption of Zero Trust Network Access (ZTNA) yielded significant real-world results, showcasing the transformative impact it had on our organization. Here are specific examples and case studies that demonstrate the benefits of ZTNA:</p><ol><li><p><strong>Improved Internet Speed and Routing</strong>: With the Advent of ZTNA we have seen increased internet speed and better internet routing. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-3-8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b108547-f3f5-454d-8ecc-5978328a7cb2_4828x2937.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-3-8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b108547-f3f5-454d-8ecc-5978328a7cb2_4828x2937.png 424w, https://substackcdn.com/image/fetch/$s_!-3-8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b108547-f3f5-454d-8ecc-5978328a7cb2_4828x2937.png 848w, https://substackcdn.com/image/fetch/$s_!-3-8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b108547-f3f5-454d-8ecc-5978328a7cb2_4828x2937.png 1272w, https://substackcdn.com/image/fetch/$s_!-3-8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b108547-f3f5-454d-8ecc-5978328a7cb2_4828x2937.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-3-8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b108547-f3f5-454d-8ecc-5978328a7cb2_4828x2937.png" width="1456" height="886" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b108547-f3f5-454d-8ecc-5978328a7cb2_4828x2937.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:886,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1194396,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-3-8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b108547-f3f5-454d-8ecc-5978328a7cb2_4828x2937.png 424w, https://substackcdn.com/image/fetch/$s_!-3-8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b108547-f3f5-454d-8ecc-5978328a7cb2_4828x2937.png 848w, https://substackcdn.com/image/fetch/$s_!-3-8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b108547-f3f5-454d-8ecc-5978328a7cb2_4828x2937.png 1272w, https://substackcdn.com/image/fetch/$s_!-3-8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b108547-f3f5-454d-8ecc-5978328a7cb2_4828x2937.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li><li><p> <strong>Cost Savings and better productivity: </strong>By adopting ZTNA, we realised cost savings across various aspects of our network infrastructure. Previously, our VPN incurred substantial costs, amounting to several hundred dollars, whereas the implementation of ZTNA proved significantly more cost-effective. Furthermore, the improved user experience and minimized downtime contributed to increased employee efficiency, resulting in measurable cost savings for the organization.</p></li><li><p><strong>Positive Feedback:</strong> Employees and stakeholders expressed their satisfaction with the ZTNA solution. They appreciated the enhanced security measures, improved access experience, and the ability to seamlessly work across different locations and devices. Positive feedback highlighted increased job satisfaction and a more productive work environment.</p></li></ol><p>These real-world results exemplify the measurable improvements in security, productivity, and cost savings achieved through the implementation of ZTNA. The positive feedback from employees and stakeholders further validates the effectiveness of this transformative networking approach. In the next section, we will delve into best practices for maintaining and optimizing a ZTNA environment to ensure long-term success.</p><h2>Best Practices and Tips: Smooth Transition to ZTNA</h2><p>For organisations considering a transition to Zero Trust Network Access (ZTNA), here are some valuable recommendations to ensure a successful implementation:</p><ol><li><p>Selecting a ZTNA Solution:</p><ul><li><p>Evaluate the scalability, performance, and security features of different ZTNA solutions to find the best fit for your organization.</p></li><li><p>Consider compatibility with existing systems and applications to ensure seamless integration.</p></li><li><p>Look for solutions that provide comprehensive access controls, granular policy management, and robust authentication mechanisms.</p></li><li><p>In our case, it was <a href="https://www.cloudflare.com/products/zero-trust/access/">Cloudflare Access</a>. </p></li></ul></li><li><p>Training and Education:</p><ul><li><p>Provide thorough training and educational resources to familiarize employees with the new access model and its benefits.</p></li><li><p>Highlight the importance of following security protocols and best practices to ensure a secure network environment.</p></li><li><p>Communicate the impact of ZTNA on productivity and user experience, addressing any concerns or misconceptions.</p></li></ul></li><li><p>Collaborate with Stakeholders:</p><ul><li><p>Engage key stakeholders, including IT teams, security professionals, and department heads, in the decision-making process.</p></li><li><p>Foster collaboration and open communication channels to gather feedback, address concerns, and ensure alignment throughout the transition.</p></li></ul></li></ol><p>By considering these best practices, organizations can navigate the transition to ZTNA smoothly, ensuring a secure and efficient network environment. Ongoing monitoring and adaptation, coupled with employee training, will help organizations stay ahead of evolving threats and maximize the benefits of ZTNA.</p><h2>Conclusion: Embracing ZTNA for a Modern and Secure Future</h2><p>In this blog, we explored the need for change from VPN to Zero Trust Network Access (ZTNA) and the challenges faced with VPN solutions. We then introduced ZTNA, highlighting its principles and how it differs from traditional VPNs.</p><p>We delved into the benefits of ZTNA, showcasing enhanced security through the principle of least privilege, simplified network management, and improved user experience compared to VPNs. Real-world results demonstrated measurable improvements in security, productivity, and cost savings.</p><p>The migration process involved careful planning, pilot testing, communication, and  rollout. </p><p>To conclude, the adoption of ZTNA empowered our organization with heightened security, simplified network management, and improved productivity. We encourage readers to consider ZTNA as a modern and secure alternative to VPNs, offering granular access controls, enhanced user experience, and adaptability to evolving threats. Embrace ZTNA for a future-ready network infrastructure that prioritizes security, scalability, and productivity.</p><p></p><p>To gain deeper insights into our culture and processes, please visit <a href="https://culture.rocketium.com">culture.rocketium.com</a>. At Rocketium, we cultivate an environment of collaboration and openness, where we work alongside highly talented and motivated individuals. If you're enthusiastic about joining our journey and becoming part of this thrilling adventure, don't hesitate to contact us at <strong><a href="mailto:careers@rocketium.com">careers@rocketium.com</a></strong>.</p>]]></content:encoded></item><item><title><![CDATA[How AI is empowering Brand Compliance]]></title><description><![CDATA[The fusion of Machine Learning, OCR, and NLP Models.]]></description><link>https://blog.rocketium.com/p/how-ai-is-empowering-brand-compliance</link><guid isPermaLink="false">https://blog.rocketium.com/p/how-ai-is-empowering-brand-compliance</guid><dc:creator><![CDATA[Somya Bhargava]]></dc:creator><pubDate>Thu, 08 Jun 2023 11:43:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_nR1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb95ba27-f118-45be-aaa0-c15c4e4567e5_752x421.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Introduction</h2><p>Welcome to the realm of compliance, where rules and technology harmoniously intersect to uphold the integrity of brands. Compliance plays a vital role in maintaining a consistent and authentic brand experience, safeguarding consumer trust and loyalty. </p><p>In this journey, we will explore the importance of compliance and how we created a fusion of Machine Learning, OCR, NLP models, and  our Mathematics expertise to figure out the problems.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_nR1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb95ba27-f118-45be-aaa0-c15c4e4567e5_752x421.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_nR1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb95ba27-f118-45be-aaa0-c15c4e4567e5_752x421.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_nR1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb95ba27-f118-45be-aaa0-c15c4e4567e5_752x421.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_nR1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb95ba27-f118-45be-aaa0-c15c4e4567e5_752x421.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_nR1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb95ba27-f118-45be-aaa0-c15c4e4567e5_752x421.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_nR1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb95ba27-f118-45be-aaa0-c15c4e4567e5_752x421.jpeg" width="752" height="421" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bb95ba27-f118-45be-aaa0-c15c4e4567e5_752x421.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:421,&quot;width&quot;:752,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:87493,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_nR1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb95ba27-f118-45be-aaa0-c15c4e4567e5_752x421.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_nR1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb95ba27-f118-45be-aaa0-c15c4e4567e5_752x421.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_nR1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb95ba27-f118-45be-aaa0-c15c4e4567e5_752x421.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_nR1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb95ba27-f118-45be-aaa0-c15c4e4567e5_752x421.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>What is a Brand?</h2><p>A brand refers to the overall perception and image of a company, product, or service in the minds of consumers. It encompasses various elements such as the company's name, logo, design, messaging, values, and customer experiences. A brand represents the unique identity and reputation of a business, distinguishing it from competitors in the market.</p><p>Compliance, in the context of branding, refers to adhering to specific guidelines and standards set by a company to ensure consistency and integrity in the representation of its brand across different channels and touch-points. These guidelines typically cover aspects such as logo usage, typography, color palette, imagery, voice and tone, and other visual and verbal elements.</p><h2>A small dig into what happened with Volkswagen</h2><p>VW marketed their diesel vehicles as eco-friendly and compliant with strict emission standards. However, it was later discovered that the software in their cars could detect when the vehicle was undergoing an emissions test and adjust the engine's performance to meet the requirements. In regular driving conditions, the vehicles emitted nitrogen oxide (NOx) pollutants well above the acceptable limits, contributing to air pollution and environmental harm.</p><p>The scandal had significant consequences for Volkswagen, including substantial financial penalties, a damaged reputation, and legal ramifications. The brand's integrity and trust were severely impacted, as customers and stakeholders felt deceived and betrayed by VW's actions. </p><p>This is how serious things can happen in cases of compliance breach.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Wty5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F847ec238-e290-4d8f-acfc-33b5eda5e78f_976x549.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Wty5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F847ec238-e290-4d8f-acfc-33b5eda5e78f_976x549.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Wty5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F847ec238-e290-4d8f-acfc-33b5eda5e78f_976x549.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Wty5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F847ec238-e290-4d8f-acfc-33b5eda5e78f_976x549.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Wty5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F847ec238-e290-4d8f-acfc-33b5eda5e78f_976x549.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Wty5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F847ec238-e290-4d8f-acfc-33b5eda5e78f_976x549.jpeg" width="976" height="549" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/847ec238-e290-4d8f-acfc-33b5eda5e78f_976x549.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:549,&quot;width&quot;:976,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:91892,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Wty5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F847ec238-e290-4d8f-acfc-33b5eda5e78f_976x549.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Wty5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F847ec238-e290-4d8f-acfc-33b5eda5e78f_976x549.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Wty5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F847ec238-e290-4d8f-acfc-33b5eda5e78f_976x549.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Wty5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F847ec238-e290-4d8f-acfc-33b5eda5e78f_976x549.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>How is it done presently?</h2><p>Currently, compliance validation is primarily performed by experienced professionals with in-depth knowledge of the specific guidelines and regulations governing brand compliance. These experts manually review creative content, assessing various elements such as typography, colors, imagery, branding consistency, legal requirements, and other relevant factors. They compare the content against predefined compliance guidelines and identify any deviations or violations.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_lCK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb74fcd1-3f84-4d5f-92de-e46b509235ba_300x225.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_lCK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb74fcd1-3f84-4d5f-92de-e46b509235ba_300x225.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_lCK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb74fcd1-3f84-4d5f-92de-e46b509235ba_300x225.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_lCK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb74fcd1-3f84-4d5f-92de-e46b509235ba_300x225.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_lCK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb74fcd1-3f84-4d5f-92de-e46b509235ba_300x225.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_lCK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb74fcd1-3f84-4d5f-92de-e46b509235ba_300x225.jpeg" width="300" height="225" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eb74fcd1-3f84-4d5f-92de-e46b509235ba_300x225.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:225,&quot;width&quot;:300,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:17515,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_lCK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb74fcd1-3f84-4d5f-92de-e46b509235ba_300x225.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_lCK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb74fcd1-3f84-4d5f-92de-e46b509235ba_300x225.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_lCK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb74fcd1-3f84-4d5f-92de-e46b509235ba_300x225.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_lCK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb74fcd1-3f84-4d5f-92de-e46b509235ba_300x225.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h2>Market Research</h2><p>Open any e-commerce app or visit any well-known brand's website and observe the consistency across their images.</p><p>After observing the same we analysed some trends : </p><ol><li><p>Logos are usually placed at corners or centre of the creative.</p></li><li><p>T&amp;C is very less font size and placed usually at a bottom corner.</p></li><li><p>Overall 40-50% white-space to get better visibility.</p></li><li><p>Total number of character limitations.</p></li><li><p>In some ad-spaces we also observed some UI portion being acquired, so in that place nothing should be existing.</p></li><li><p>Use of certain colors.</p></li><li><p>No mention of any designations etc.</p></li><li><p>Gender and diversity neutral policies.</p></li><li><p>No support of alcohol. </p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dRkp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3003a606-d999-43c4-8514-a2b89f1de3e6_880x572.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dRkp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3003a606-d999-43c4-8514-a2b89f1de3e6_880x572.png 424w, https://substackcdn.com/image/fetch/$s_!dRkp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3003a606-d999-43c4-8514-a2b89f1de3e6_880x572.png 848w, https://substackcdn.com/image/fetch/$s_!dRkp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3003a606-d999-43c4-8514-a2b89f1de3e6_880x572.png 1272w, https://substackcdn.com/image/fetch/$s_!dRkp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3003a606-d999-43c4-8514-a2b89f1de3e6_880x572.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dRkp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3003a606-d999-43c4-8514-a2b89f1de3e6_880x572.png" width="880" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3003a606-d999-43c4-8514-a2b89f1de3e6_880x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:880,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:787279,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dRkp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3003a606-d999-43c4-8514-a2b89f1de3e6_880x572.png 424w, https://substackcdn.com/image/fetch/$s_!dRkp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3003a606-d999-43c4-8514-a2b89f1de3e6_880x572.png 848w, https://substackcdn.com/image/fetch/$s_!dRkp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3003a606-d999-43c4-8514-a2b89f1de3e6_880x572.png 1272w, https://substackcdn.com/image/fetch/$s_!dRkp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3003a606-d999-43c4-8514-a2b89f1de3e6_880x572.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>The fusion of ML, OCR, and NLP?</h2><p>So after analysing the problem we realised the need of the following and broke the problem into following pieces : </p><ol><li><p>Segregating different pieces of image, heading, sub-heading, call-to-action, terms-and-condition, logos.</p></li><li><p>Counting text, doing analysis on it etc.</p></li><li><p>Asking questions to the image or text inside it on certain things like designation mentions, title or sentence case etc.</p></li></ol><p>To analyse the above problem we did the following : </p><ol><li><p>Using OCR technology to figure out all the text inside the image.</p></li><li><p>Using machine learning to train from each account creatives and identifying different labels.</p></li><li><p>Using NLP models to identify some things like designation, religion, alcohol bottles, etc.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!u5Ys!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F286f67b0-87d1-4ec9-8de8-b39116e49602_500x500.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!u5Ys!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F286f67b0-87d1-4ec9-8de8-b39116e49602_500x500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!u5Ys!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F286f67b0-87d1-4ec9-8de8-b39116e49602_500x500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!u5Ys!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F286f67b0-87d1-4ec9-8de8-b39116e49602_500x500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!u5Ys!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F286f67b0-87d1-4ec9-8de8-b39116e49602_500x500.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!u5Ys!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F286f67b0-87d1-4ec9-8de8-b39116e49602_500x500.jpeg" width="500" height="500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/286f67b0-87d1-4ec9-8de8-b39116e49602_500x500.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:500,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:49151,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!u5Ys!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F286f67b0-87d1-4ec9-8de8-b39116e49602_500x500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!u5Ys!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F286f67b0-87d1-4ec9-8de8-b39116e49602_500x500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!u5Ys!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F286f67b0-87d1-4ec9-8de8-b39116e49602_500x500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!u5Ys!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F286f67b0-87d1-4ec9-8de8-b39116e49602_500x500.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p></li></ol><h2>Problems in combining three different technologies</h2><p>While combining three different tech&#8217;s the major problem was identifying their super powers and playing to strengths. And all these will have errors and combining three different techs will cause increase of error and multiplication of those.</p><p>Super powers elaborated : </p><ol><li><p>OCR is great in identifying all the text inside the creative. But won&#8217;t be able to classification.</p></li><li><p>ML or image classification will be good at identifying major pieces but won&#8217;t know what is inside it. </p></li><li><p>NLP models will help us in analysing some important rules. But not much helpful in classification as just text won&#8217;t give the whole perception of a creative.</p></li></ol><h2>Mixing magic</h2><p>So the process followed : </p><ol><li><p>Gather all the information from OCR.</p></li><li><p>Take out the data from our image classification model.</p></li><li><p>Try intersecting the image classification data and intersecting the data from OCR.</p></li><li><p>Tweak a couple of values around overlap percent and all.</p></li><li><p>Iterate, test and repeat.</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eFhT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4b7e86-f623-4efe-bd74-c30f727ee89a_572x436.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eFhT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4b7e86-f623-4efe-bd74-c30f727ee89a_572x436.png 424w, https://substackcdn.com/image/fetch/$s_!eFhT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4b7e86-f623-4efe-bd74-c30f727ee89a_572x436.png 848w, https://substackcdn.com/image/fetch/$s_!eFhT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4b7e86-f623-4efe-bd74-c30f727ee89a_572x436.png 1272w, https://substackcdn.com/image/fetch/$s_!eFhT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4b7e86-f623-4efe-bd74-c30f727ee89a_572x436.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eFhT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4b7e86-f623-4efe-bd74-c30f727ee89a_572x436.png" width="572" height="436" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5f4b7e86-f623-4efe-bd74-c30f727ee89a_572x436.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:436,&quot;width&quot;:572,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:482516,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!eFhT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4b7e86-f623-4efe-bd74-c30f727ee89a_572x436.png 424w, https://substackcdn.com/image/fetch/$s_!eFhT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4b7e86-f623-4efe-bd74-c30f727ee89a_572x436.png 848w, https://substackcdn.com/image/fetch/$s_!eFhT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4b7e86-f623-4efe-bd74-c30f727ee89a_572x436.png 1272w, https://substackcdn.com/image/fetch/$s_!eFhT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4b7e86-f623-4efe-bd74-c30f727ee89a_572x436.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Rule engine</h2><p>After separating and mixing all the details the final thing was to put all this behind an engine for us to evaluate. This was using a <a href="https://github.com/CacheControl/json-rules-engine">JSON rule engine</a> library, and extending it to run the things we need.</p><p>We added a workflow of two types of rule parts in general : </p><ul><li><p><strong>filter : </strong>Filter elements based on any parameter or rule.</p></li><li><p><strong>aggregate : </strong>Aggregate the array we got from filter or already existing and get sum, or any other operations</p></li></ul><p>A small example was having a requirement where elements do not intersect with a Person&#8217;s image. So for this we wrote a small piece to detect if a single position is intersecting with the other. Sample code below, with the rule engine JSON attached.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8G1V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50e4a7b6-970e-4cbc-9a24-7a575df102c8_2080x2472.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8G1V!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50e4a7b6-970e-4cbc-9a24-7a575df102c8_2080x2472.png 424w, https://substackcdn.com/image/fetch/$s_!8G1V!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50e4a7b6-970e-4cbc-9a24-7a575df102c8_2080x2472.png 848w, https://substackcdn.com/image/fetch/$s_!8G1V!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50e4a7b6-970e-4cbc-9a24-7a575df102c8_2080x2472.png 1272w, https://substackcdn.com/image/fetch/$s_!8G1V!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50e4a7b6-970e-4cbc-9a24-7a575df102c8_2080x2472.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8G1V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50e4a7b6-970e-4cbc-9a24-7a575df102c8_2080x2472.png" width="506" height="601.2225274725274" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/50e4a7b6-970e-4cbc-9a24-7a575df102c8_2080x2472.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1730,&quot;width&quot;:1456,&quot;resizeWidth&quot;:506,&quot;bytes&quot;:352531,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8G1V!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50e4a7b6-970e-4cbc-9a24-7a575df102c8_2080x2472.png 424w, https://substackcdn.com/image/fetch/$s_!8G1V!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50e4a7b6-970e-4cbc-9a24-7a575df102c8_2080x2472.png 848w, https://substackcdn.com/image/fetch/$s_!8G1V!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50e4a7b6-970e-4cbc-9a24-7a575df102c8_2080x2472.png 1272w, https://substackcdn.com/image/fetch/$s_!8G1V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50e4a7b6-970e-4cbc-9a24-7a575df102c8_2080x2472.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HU7K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f770013-cb46-4f13-954f-5d6f1dc28cbb_2080x1328.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HU7K!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f770013-cb46-4f13-954f-5d6f1dc28cbb_2080x1328.png 424w, https://substackcdn.com/image/fetch/$s_!HU7K!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f770013-cb46-4f13-954f-5d6f1dc28cbb_2080x1328.png 848w, https://substackcdn.com/image/fetch/$s_!HU7K!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f770013-cb46-4f13-954f-5d6f1dc28cbb_2080x1328.png 1272w, https://substackcdn.com/image/fetch/$s_!HU7K!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f770013-cb46-4f13-954f-5d6f1dc28cbb_2080x1328.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HU7K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f770013-cb46-4f13-954f-5d6f1dc28cbb_2080x1328.png" width="1456" height="930" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3f770013-cb46-4f13-954f-5d6f1dc28cbb_2080x1328.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:930,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:216872,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!HU7K!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f770013-cb46-4f13-954f-5d6f1dc28cbb_2080x1328.png 424w, https://substackcdn.com/image/fetch/$s_!HU7K!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f770013-cb46-4f13-954f-5d6f1dc28cbb_2080x1328.png 848w, https://substackcdn.com/image/fetch/$s_!HU7K!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f770013-cb46-4f13-954f-5d6f1dc28cbb_2080x1328.png 1272w, https://substackcdn.com/image/fetch/$s_!HU7K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f770013-cb46-4f13-954f-5d6f1dc28cbb_2080x1328.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Cost analysis</h2><p>After all this is done some of these cost should always be a factor in any project to make it business viable : </p><ol><li><p>Machine learning and these NLP models are slightly on the costlier side but there are ways to reduce some cost.</p></li><li><p>Try using batch predictions instead of an online prediction, although that also depends on scale and user experience need to be provided.</p></li><li><p>Building own models and deploying the same behind kubernetees.</p></li></ol><h2>Future scope and story</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RNpw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d973fe-afdb-4e05-8959-733f9e492c37_512x512" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RNpw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d973fe-afdb-4e05-8959-733f9e492c37_512x512 424w, https://substackcdn.com/image/fetch/$s_!RNpw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d973fe-afdb-4e05-8959-733f9e492c37_512x512 848w, https://substackcdn.com/image/fetch/$s_!RNpw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d973fe-afdb-4e05-8959-733f9e492c37_512x512 1272w, https://substackcdn.com/image/fetch/$s_!RNpw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d973fe-afdb-4e05-8959-733f9e492c37_512x512 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RNpw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d973fe-afdb-4e05-8959-733f9e492c37_512x512" width="512" height="512" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/46d973fe-afdb-4e05-8959-733f9e492c37_512x512&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:512,&quot;width&quot;:512,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RNpw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d973fe-afdb-4e05-8959-733f9e492c37_512x512 424w, https://substackcdn.com/image/fetch/$s_!RNpw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d973fe-afdb-4e05-8959-733f9e492c37_512x512 848w, https://substackcdn.com/image/fetch/$s_!RNpw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d973fe-afdb-4e05-8959-733f9e492c37_512x512 1272w, https://substackcdn.com/image/fetch/$s_!RNpw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d973fe-afdb-4e05-8959-733f9e492c37_512x512 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">future of brand creatives</figcaption></figure></div><p><a href="https://rocketium.com">Rocketium</a> aims to become the ultimate destination for comprehensive creative validation services. As a one-stop solution, we empower brands to effortlessly validate their creatives for advertising on any platform. Our platform eliminates the need for constant back-and-forth between teams by efficiently handling minor ad modifications. By entrusting us with the process, designers can save valuable time and focus on their core tasks, confident that their creatives will meet the necessary requirements seamlessly. With <a href="https://rocketium.com">Rocketium</a>, brands can streamline their validation workflows and ensure a hassle-free experience from start to finish.</p>]]></content:encoded></item><item><title><![CDATA[Harnessing AI and MongoDB Atlas for Advanced Media Search for Enterprises]]></title><description><![CDATA[A one-shot search solution built inside Rocketium's asset management system]]></description><link>https://blog.rocketium.com/p/harnessing-ai-and-mongodb-atlas-for</link><guid isPermaLink="false">https://blog.rocketium.com/p/harnessing-ai-and-mongodb-atlas-for</guid><dc:creator><![CDATA[Vivek Nigam]]></dc:creator><pubDate>Thu, 08 Jun 2023 11:37:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ca66cea-24ce-4051-ada6-0f288686aefa_2606x1588.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When you happen to work at scale, the problem set changes and you naturally start focusing on how we can help users navigate this large-scale data set that they have entrusted us with. And at Rocketium, we are all about that scale that we handle for Fortune 500 enterprises. Upon that same thought, we encountered a problem proposed to us by one of our clients. They asked - </p><blockquote><p><em>&#8220;Can we search for the photoshoot image from last year where a female model was wearing an orange dress, we remember we uploaded it on Rocketium, but don&#8217;t remember the exact name of the image.&#8221;</em></p></blockquote><p>Normally users were having a strong nomenclature to their images and for years they have been searching based on certain tags and names, sorting them by date and they were good to go. There was some manual effort involved, but no method existed for figuring out what was in that image. And that&#8217;s exactly what they wanted - <strong>If we can search their images by understanding the content of the image as well?</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.rocketium.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Rocketium Blog! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>When I learnt about this problem surfacing, I was leading the development of our  project workflow management tools which allow creative teams to streamline their project and asset management inside Rocketium, so that their designers have everything in one place. This search problem seemed interesting and I knew it could be done, I just had not thought how, but I had the zeal which runs in every engineer here - &#8220;We&#8217;ll figure out the tech to make this work&#8221; &#128170;</p><h2>Our current architecture &#9881;&#65039;</h2><p>At Rocketium we use MongoDB as our primary database to store general user data like project data, asset metadata, etc and our assets reside in specific AWS S3 buckets for different users considering data privacy. Pretty standard stuff I&#8217;d say. I personally believe great engineers became great by leveraging the resources they had to the best use and not by reinventing the wheel every time they had a new problem. That&#8217;s what I had to do - enhance the existing infra with image content identification and search capabilities.</p><p>Now with this architecture, I had two ways to go about it &#8594; go make a presentation and present to the team that I can do it and convince them of whatever solution I proposed and then go build it <em>OR</em> I can just quickly build a prototype for them to have a look and feel of what I want to build in the product - I always chose the latter.</p><p>At Rocketium Engineering, we follow a culture which dictates that &#8220;Code wins over arguments&#8221;, so if you want the team to be convinced of your solution, the simpler way is to build out a proof of concept which will help you understand the problem better, and also the team to understand your solution better. The faster you can prototype, the faster you can get to the implementing part. That speed and agility are what I&#8217;ve learnt here, and I had <strong>just one week</strong> to research and prototype this.</p><h2>Understanding the image content &#129504;</h2><p>The first part of solving the search problem was to identify what is in the image? One naive solution is to just implement any image recognition service like Google Vision and ask it to tag the images directly, but where&#8217;s the fun in that? </p><blockquote><p><em>Any solution is worthless without adding the context of its application. We need to understand who is gonna use this feature and build it keeping that persona in mind, while keeping it flexible enough to cater to changing needs.</em></p></blockquote><p>And for us, the context was that we deal with mostly advertisement campaign creatives which have a few elements - the model image, the product, a background, and the text (heading, subheading, offer text, and CTA text). All of these assets are separately stored in our media library which can be combined to build these ad creatives inside our campaign editor.</p><p>The power of image recognition in this context would come from actually being able to bifurcate the tags as well into categories. Remember what the customer asked us - &#8220;<em>Can we <strong>search</strong> for the photoshoot <strong>image</strong> from <strong>last year</strong> where a <strong>female</strong> model was wearing an <strong>orange</strong> <strong>dress</strong>&#8221;.</em> What if we could identify the products, colours, humans, and other things in the image and place them in separate categories so that users can search across these verticals! &#129488;</p><p>We were already using <strong>Google Vision</strong> to get the tags for every uploaded image, but they weren&#8217;t that accurate, let alone categorisation. So I fed them to <strong>Chat GPT API</strong> and asked it to classify them into categories. It was smart enough, but not so much. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!923C!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ca1d84b-bac4-4b93-b1e5-9316758211af_2905x1334.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!923C!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ca1d84b-bac4-4b93-b1e5-9316758211af_2905x1334.png 424w, https://substackcdn.com/image/fetch/$s_!923C!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ca1d84b-bac4-4b93-b1e5-9316758211af_2905x1334.png 848w, https://substackcdn.com/image/fetch/$s_!923C!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ca1d84b-bac4-4b93-b1e5-9316758211af_2905x1334.png 1272w, https://substackcdn.com/image/fetch/$s_!923C!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ca1d84b-bac4-4b93-b1e5-9316758211af_2905x1334.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!923C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ca1d84b-bac4-4b93-b1e5-9316758211af_2905x1334.png" width="1456" height="669" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9ca1d84b-bac4-4b93-b1e5-9316758211af_2905x1334.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:669,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:388845,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!923C!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ca1d84b-bac4-4b93-b1e5-9316758211af_2905x1334.png 424w, https://substackcdn.com/image/fetch/$s_!923C!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ca1d84b-bac4-4b93-b1e5-9316758211af_2905x1334.png 848w, https://substackcdn.com/image/fetch/$s_!923C!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ca1d84b-bac4-4b93-b1e5-9316758211af_2905x1334.png 1272w, https://substackcdn.com/image/fetch/$s_!923C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ca1d84b-bac4-4b93-b1e5-9316758211af_2905x1334.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Next, I thought of training my own ML model for this and I figured out that <strong><a href="https://aws.amazon.com/rekognition/custom-labels-features/">Amazon Rekognition</a></strong><a href="https://aws.amazon.com/rekognition/custom-labels-features/"> has </a><strong><a href="https://aws.amazon.com/rekognition/custom-labels-features/">Custom Labels</a></strong> which we can use to label our images with a custom dataset of labelled images. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PZnV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ca66cea-24ce-4051-ada6-0f288686aefa_2606x1588.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PZnV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ca66cea-24ce-4051-ada6-0f288686aefa_2606x1588.png 424w, https://substackcdn.com/image/fetch/$s_!PZnV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ca66cea-24ce-4051-ada6-0f288686aefa_2606x1588.png 848w, https://substackcdn.com/image/fetch/$s_!PZnV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ca66cea-24ce-4051-ada6-0f288686aefa_2606x1588.png 1272w, https://substackcdn.com/image/fetch/$s_!PZnV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ca66cea-24ce-4051-ada6-0f288686aefa_2606x1588.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PZnV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ca66cea-24ce-4051-ada6-0f288686aefa_2606x1588.png" width="1456" height="887" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8ca66cea-24ce-4051-ada6-0f288686aefa_2606x1588.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:887,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2132130,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!PZnV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ca66cea-24ce-4051-ada6-0f288686aefa_2606x1588.png 424w, https://substackcdn.com/image/fetch/$s_!PZnV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ca66cea-24ce-4051-ada6-0f288686aefa_2606x1588.png 848w, https://substackcdn.com/image/fetch/$s_!PZnV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ca66cea-24ce-4051-ada6-0f288686aefa_2606x1588.png 1272w, https://substackcdn.com/image/fetch/$s_!PZnV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ca66cea-24ce-4051-ada6-0f288686aefa_2606x1588.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>That worked decently well where the training set was just 20 images and the test set was 10 images. The model had an F1 score (or accuracy) of ~60% but there were two challenges with it:</p><ol><li><p>We need a large variety of images to train the model of different types of products and human images.</p></li><li><p>We need to label the images manually to train on them, which will become a pain real soon because of the volume of images we handle.</p></li></ol><p>Next, I thought, why not use the default pre-trained models from Amazon Recognition, this led to a realisation. Since Amazon and Rocketium kind of work in the same domain of e-commerce, where Amazon sells these items, Rocketium helps create ads which sell these items. <strong>We both need product and model image recognition for classification.</strong> &#129309;</p><p>Amazon Rekognition works pretty well when it comes to identifying the products and humans, plus they have also classified their data into categories which an e-commerce site could benefit from. They also have the capability to identify dominant colours for the foreground and the background.</p><h2>Tagging images with Amazon Rekognition &#127991;&#65039;</h2><p>Every image document stored in MongoDB has certain properties like name, URL etc, and I added a &#8220;<code>customFields</code>&#8221; key to it which would be an object that can store these key-value pairs</p><p>Amazon Rekognition gives an elaborate response when it comes to image labelling, now it was up to us on how we can utilise this data for our use case. Rekognition gives us a category of the label which I planned to map to the &#8220;<code>customFields.product</code>&#8221; key of the image metadata, and only selected the top 10 labels which were predicted with more than 75% confidence.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0gz9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc62e5693-8fb6-423b-b848-ffc52631814a_1608x936.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0gz9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc62e5693-8fb6-423b-b848-ffc52631814a_1608x936.png 424w, https://substackcdn.com/image/fetch/$s_!0gz9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc62e5693-8fb6-423b-b848-ffc52631814a_1608x936.png 848w, https://substackcdn.com/image/fetch/$s_!0gz9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc62e5693-8fb6-423b-b848-ffc52631814a_1608x936.png 1272w, https://substackcdn.com/image/fetch/$s_!0gz9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc62e5693-8fb6-423b-b848-ffc52631814a_1608x936.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0gz9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc62e5693-8fb6-423b-b848-ffc52631814a_1608x936.png" width="1456" height="848" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c62e5693-8fb6-423b-b848-ffc52631814a_1608x936.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:848,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:310697,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0gz9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc62e5693-8fb6-423b-b848-ffc52631814a_1608x936.png 424w, https://substackcdn.com/image/fetch/$s_!0gz9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc62e5693-8fb6-423b-b848-ffc52631814a_1608x936.png 848w, https://substackcdn.com/image/fetch/$s_!0gz9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc62e5693-8fb6-423b-b848-ffc52631814a_1608x936.png 1272w, https://substackcdn.com/image/fetch/$s_!0gz9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc62e5693-8fb6-423b-b848-ffc52631814a_1608x936.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>For the colours, I was taking &#8220;<code>Foreground.DominantColours</code>&#8221; returned from Rekognition and returning them as one of the 12 natural colours. The tags which were returned but did not fit the categories we mentioned earlier were returned as just &#8220;tags&#8221; for safekeeping.</p><p>The thing to note is that all of these tags were just suggestions for the Humans, generated by AI. No way that we were forcing these labels on the images. Once the labels are received, anyone doing the quality check (QC) could modify them, but they get a great starting point.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;fd639f03-58e0-4917-b92d-0c7a633d942b&quot;,&quot;duration&quot;:null}"></div><h2>Searching through these tags &#128270;</h2><p>Now using the powers given to us by Amazon Rekognition and applying some JS magic, we were able to tag every image with a &#8220;product&#8221; list, and &#8220;colour&#8221; list, and assign some other properties to it as well through &#8220;tags&#8221;. But this was just half the story - the next one is even trickier. Enabling users to search images by just writing in a natural language like &#8594; &#8220;Orange dress woman&#8221; and get images of women wearing orange dresses!</p><p>There are two ways which every engineer on some research would find when it comes to searching for documents in MongoDB.</p><ol><li><p>Sync your data with Elastic Search (with its <a href="https://www.elastic.co/guide/en/enterprise-search/current/mongodb-start.html">mongo-connector</a>) and use the full-blown powers of Elastic Search to search your data.</p></li><li><p>If you have a self-hosted MongoDB, then create a <a href="https://www.mongodb.com/docs/manual/core/index-text/">Text Index</a> and then use the <code>$text</code> operator in the query to search through documents. </p></li></ol><p>But there are two potential challenges with this as well, which I found during my research:</p><ol><li><p>There is always a maintenance cost associated with introducing a technology and I wanted to keep it as minimal and light as possible so that it just works, without much maintenance effort.</p></li><li><p>The <code>$text</code> Search in Mongo is a full-word search, so if you plan to search &#8220;Chi&#8221; in a document which has the text, &#8220;The Chinese built the great wall of China&#8221;, it will not be returned in the result. But we needed a partial search as well if you also need autocomplete</p></li></ol><p>Then? How do I achieve a powerful search functionality with autocomplete in my MongoDB collection?</p><h2>Enter MongoDB Atlas Search &#10024;</h2><p>Around 2020, MongoDB folks launched <a href="https://www.mongodb.com/atlas/search">Atlas Search</a> which comes with their cloud-hosted solution MongoDB Atlas. At Rocketium, we moved from a self-hosted solution to MongoDB Atlas, towards the end of 2022 with a humongous effort from <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Himanshu Garg&quot;,&quot;id&quot;:101022942,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/18235b5c-1d35-48bc-8c40-6fade23458c1_1246x1246.jpeg&quot;,&quot;uuid&quot;:&quot;4ba623ea-0a34-4fa2-a6cc-3c5163d42237&quot;}" data-component-name="MentionToDOM"></span> and team. This enabled us to take advantage of Altas Search for this use case.</p><p>Apparently MongoDB Atlas and ElasticSearch both use the same technology under the hood which is - <a href="https://lucene.apache.org/">Apache Lucene</a> and use similar concepts for building a search index. MongoDB Atlas seemed to be a great choice for us to build a search because - </p><ol><li><p>There was minute maintenance overhead since we were already using and managing MongoDB Atlas for our db instances.</p></li><li><p>It did not require any separate infrastructure setup and we can just build queries for searching where our data already resided. No need for external syncing.</p></li><li><p>MongoDB Atlas automatically syncs the data and updates the search index for the newly added items. Set it and forget it.</p></li></ol><p>The next challenge was to learn how to build and deploy a search index because apparently, that is not as simple as setting up Altas Search &#128517;</p><h2>Building a search index for assets &#128209;</h2><p>On the MongoDB Altas platform, you can create a search index which starts with a default value of:-</p><pre><code>{
  "mappings": {
    "dynamic": true
  }
}</code></pre><p>This will basically index everything in your documents and you can search on it, now while this may sound lucrative to do, it comes with the cost of heavy search indexes, and then speed.</p><p>Hence we disabled the dynamic mappings to give our own mappings, something like this</p><pre><code>{
  "mappings": {
    "dynamic": false,
    "fields": {
      "customFields": {
        "fields": {
          "colors": {
            "type": "string"
          },
          "products": {
            "type": "string"
          },
          "tags": {
            "type": "string"
          }
        },
        "type": "document"
      },
      "name": {
        "type": "string",
        "analyzer": "lucene.standard",
        "multi": {
          "keywordAnalyzer": {
            "type": "string",
            "analyzer": "lucene.keyword"
          }
        }
      }
    }
  }
}</code></pre><p>The above search index is explained as follows &#8212;</p><ul><li><p><code>mappings</code>: This section defines the schema for the search index.</p><ul><li><p><code>dynamic</code>: The value <code>false</code> means that the index won't automatically index new fields that get added to the documents in the future. If <code>dynamic</code> was <code>true</code>, then any new field added to a document would automatically be included in the search index.</p></li><li><p><code>fields</code>: This section describes the fields to be indexed.</p><ul><li><p><code>customFields</code>: This is a document field (nested field) containing other fields.</p><ul><li><p><code>fields</code>: </p><ul><li><p><code>colors</code>, <code>products</code>, <code>tags</code>: These fields are set to be indexed as strings. This means that MongoDB will create a text index on these fields to allow text search.</p></li></ul></li></ul></li><li><p><code>name</code>: This field is indexed as a <code>string</code>.</p><ul><li><p><code>string</code>: This allows text search on the <code>name</code> field. This field is further analyzed by two analyzers.</p><ul><li><p><code>lucene.standard</code>: This analyzer tokenizes text into terms (words), changes the tokens to lowercase and removes common English words.</p></li><li><p><code>lucene.keyword</code>: This analyzer treats the whole text field as a single term. This is useful for exact match searches.</p></li></ul></li></ul></li></ul></li></ul></li></ul><p>Now depending on the use case, this search index could be different to support different applications.</p><p>Once this is saved, MongoDB will start creating a search index which can later be utilised in our code, and these fields could be searched with the <code>$search</code> operator. </p><p>This example query will match <code>name</code> and <code>products</code> from the <code>defaultIndex</code> and return the results which match. We use this query as one step in the MongoDB aggregation pipeline.</p><pre><code>{
      $search: {
        index: "defaultIndex", // index name
        compound: {
          should: [
            {
              text: {
                query: searchString as string,
                path: "name",
                fuzzy: {
                  maxEdits: 2,
                },
              },
            },
            {
              text: {
                query: searchString as string,
                path: "customFields.products",
                fuzzy: {
                  maxEdits: 2,
                },
              },
            },
          ],
        },
        highlight: {
          path: [
            "name",
            "customFields.products",
          ],
        },
      },
    },</code></pre><p><strong>Bonus &#128161;</strong>: This search index also allows us some typo tolerance by specifying <code>fuzzy</code> property with <code>maxEdits</code>, where we can specify how many characters can be misspelt in a word.</p><p>And the <code>highlight</code> field would return an object which can help you identify matched words in the search results.</p><h2>And what about partial searching?</h2><p>The way I designed this search index was to match exact words, but what about partial search as well? Well, that is covered under an Autocomplete index.</p><p>An autocomplete index helps in tokenising the text to search for partial parts of the text as well. It requires specifying &#8220;autocomplete&#8221; properties which help us fine-tune how we wish to build the index. Suppose we wish to just add autocomplete for the <code>products</code> field, the search index would look something like this &#8212;</p><pre><code>{
  "mappings": {
    "dynamic": false,
    "fields": {
      "customFields": {
        "type": "document",
        "fields": {
          "products": [
            {
              "type": "string"
            },
            <strong>{
              "foldDiacritics": false,
              "maxGrams": 8,
              "minGrams": 2,
              "tokenization": "edgeGram",
              "type": "autocomplete"
            }</strong>
          ]
        }
      }
    }
  }
}</code></pre><p>Where the rest of the things are the same, but the &#8220;<code>type: autocomplete</code>&#8221; object properties are explained as follows &#8212;</p><p><code>autocomplete</code>: This type is specialized for providing autocomplete functionality. This means, as users start typing into the search field, suggestions that match their input will be displayed, enhancing the search user interface.</p><ul><li><p><code>foldDiacritics</code>: When set to <code>false</code>, this means the search will distinguish between characters with diacritics (like <code>e</code>, <code>&#233;</code>, <code>&#232;</code>, etc.) and their simple counterparts (like <code>e</code>).</p></li><li><p><code>maxGrams</code> and <code>minGrams</code>: These properties control the size of the text fragments (grams) that are indexed. In this case, the text will be broken into fragments that are at least 2 characters long (<code>minGrams</code>) and at most 8 characters (<code>maxGrams</code>) long. This affects how the autocomplete suggestions are generated.</p></li><li><p><code>tokenization</code>: It's set as <code>edgeGram</code>, which means the system will index the beginning fragments of the words. This is particularly useful for autocomplete functionality, where you want to match input from the start of a word.</p></li></ul><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;688023e9-5818-4813-bfb7-34f46df60e65&quot;,&quot;duration&quot;:null}"></div><p>This gives us two separate search indexes for exact match and partial match. We can keep both indexes combined in a single one as well, but that would just take more time to build since autocomplete indexes generally take longer to build.</p><h2>Wrapping up</h2><p>While MongoDB Atlas Search offers powerful full-text search capabilities, it comes with potential challenges related to cost, speed, and scalability, especially at a larger scale. As with any technology solution, it's essential to balance the requirements of functionality, cost-effectiveness, and performance.</p><p>But building an effective search within our media library was one of the most challenging and interesting problem statements I&#8217;ve worked on in the past year, and wrapping up the research and prototyping in a week was thrilling!</p><p>And btw this whole code is open-sourced if you wish to have a look - <a href="https://github.com/viveknigam3003/cross-search">https://github.com/viveknigam3003/cross-search</a></p><h2>Work at Rocketium</h2><p>At Rocketium, you'll tackle complex challenges of scale, drive innovation, and shape the future of enterprise solutions. If you're passionate about problem-solving and eager to influence how enterprises manage data at scale, have a look at our careers page or drop a mail at <a href="mailto:careers@rocketium.com">careers@rocketium.com</a></p><p>More about the amazing culture we follow at Rocketium, have a look at <a href="https://culture.rocketium.com">culture.rocketium.com</a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.rocketium.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Rocketium Blog! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Implementing Generative AI in Your Product]]></title><description><![CDATA[Exploring goals, strategies, and real-world examples of how to use generative AI in your product]]></description><link>https://blog.rocketium.com/p/implementing-generative-ai-in-your</link><guid isPermaLink="false">https://blog.rocketium.com/p/implementing-generative-ai-in-your</guid><dc:creator><![CDATA[Santosh Bheemarajaiah]]></dc:creator><pubDate>Thu, 08 Jun 2023 11:22:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!LQRL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a8a8e98-cd24-45e9-be83-1efec820f740_1035x1106.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LQRL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a8a8e98-cd24-45e9-be83-1efec820f740_1035x1106.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LQRL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a8a8e98-cd24-45e9-be83-1efec820f740_1035x1106.png 424w, https://substackcdn.com/image/fetch/$s_!LQRL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a8a8e98-cd24-45e9-be83-1efec820f740_1035x1106.png 848w, https://substackcdn.com/image/fetch/$s_!LQRL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a8a8e98-cd24-45e9-be83-1efec820f740_1035x1106.png 1272w, https://substackcdn.com/image/fetch/$s_!LQRL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a8a8e98-cd24-45e9-be83-1efec820f740_1035x1106.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LQRL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a8a8e98-cd24-45e9-be83-1efec820f740_1035x1106.png" width="1035" height="1106" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7a8a8e98-cd24-45e9-be83-1efec820f740_1035x1106.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1106,&quot;width&quot;:1035,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1469262,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LQRL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a8a8e98-cd24-45e9-be83-1efec820f740_1035x1106.png 424w, https://substackcdn.com/image/fetch/$s_!LQRL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a8a8e98-cd24-45e9-be83-1efec820f740_1035x1106.png 848w, https://substackcdn.com/image/fetch/$s_!LQRL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a8a8e98-cd24-45e9-be83-1efec820f740_1035x1106.png 1272w, https://substackcdn.com/image/fetch/$s_!LQRL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a8a8e98-cd24-45e9-be83-1efec820f740_1035x1106.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Introduction</h2><p>Embracing the rapidly evolving field of artificial intelligence (AI), generative AI has proven to be a transformative force. Its potential goes beyond mere trends, as integrating AI capabilities into your products has become essential. However, with generative AI being relatively new and full of untapped possibilities, it can be challenging to determine where to begin. In this blog, we will provide insights on how to approach generative AI, offering practical examples from Rocketium's implementation plans. These real-world scenarios will serve as inspiration for incorporating generative AI into your own product. It is assumed that you have a basic understanding of generative AI concepts and terminology.</p><h2>Choosing Your High-Level Goals</h2><p>Start by assessing which of these overarching objectives align with your business, enabling you to focus on specific use cases where Generative AI can be applied effectively.</p><ol><li><p><strong>Creativity and Innovation</strong>: Generative AI can break the mold, fostering the generation of novel ideas, designs, and content.</p></li><li><p><strong>Personalization and Customization</strong>: Offering customized services and products enhances user satisfaction. Generative AI can curate experiences tailored to individual users, understanding user preferences on a granular level.</p></li><li><p><strong>Efficiency and Automation</strong>: Generative AI can automate various tasks, reducing manual effort, and increasing efficiency across several domains such as content creation, product design, and manufacturing.</p></li><li><p><strong>Enhanced User Experiences</strong>: Generative AI can create immersive, interactive, and engaging content to enrich user experiences.</p></li><li><p><strong>Problem Solving and Optimization</strong>: Generative AI can aid in resource allocation, decision-making, and process optimization by analyzing extensive data and generating potential solutions.</p></li><li><p><strong>Data Generation and Augmentation</strong>: Generative AI can generate synthetic data to supplement existing datasets, improving machine learning models' performance.</p></li></ol><h2><strong>Exploring the Domains of Generative AI</strong></h2><p>After determining your goals, you can explore generative AI within the following contexts, which are particularly relevant in the near future. In the next section, we will delve into each area and discuss our thoughts and strategies for implementation.</p><ul><li><p><strong>&nbsp;Text -&gt; Text</strong></p><ul><li><p>Text-to-text transformations involve AI models like GPT-4 that predict the next word in a sequence based on the preceding words, enabling generation of contextually related sentences and paragraphs. Examples include machine translation and text summarization.</p></li></ul></li><li><p><strong>Text -&gt; Image</strong></p><ul><li><p>Text-to-image generation involves creating visual representations from textual descriptions using models like GANs. A well-known example is DALL-E, which generates images from textual prompts. Applications include art, design, and virtual reality. &nbsp;</p></li></ul></li><li><p><strong>Image -&gt; Text</strong></p><ul><li><p>Image-to-text conversions employ transformer models for generating text. These AI models craft textual descriptions for images, significantly enhancing the capability to semantically search for an image via text. Refer https://minigpt-4.github.io/</p></li></ul></li><li><p><strong>Image -&gt; Image</strong></p><ul><li><p>Image-to-image transformations modify an input image to generate a new output image using Generative Adversarial Networks (GANs). Examples include generating variations of an image, upscaling an image, removing part of an image, and extending an image,&#8230; Applications are wide, ranging from art and entertainment to autonomous driving and medical imaging.</p></li></ul></li></ul><p>Once you have chosen a specific area to focus on, you can start by exploring existing stock solutions available in that domain. It is recommended to begin with these stock solutions as a starting point. However, the true value of generative AI is realized when you are able to generate brand-compliant content that aligns with your company's language, tone, and voice. To achieve this, you will need to delve into the process of fine-tuning the AI models, ensuring they are customized to meet your specific requirements.</p><h2><strong>Finetuning, Embeddings, or Both?</strong></h2><p>To achieve brand compliance and generate content that aligns with your company's language and tone, fine-tuning and embedding techniques are crucial. Based on experiments conducted, both approaches have yielded similar results. However, fine-tuning is recommended when you have specific data sets that differ from the general set while embedding and feeding context to a language model has produced the best results for most use cases. There are a lot of articles written on this topic. So we will elaborate more on this. Below are some great reference materials that can help you with fine-tuning and embedding. </p><ul><li><p><a href="https://norahsakal.com/blog/chatgpt-product-recommendation-embeddings">Create embeddings </a></p></li><li><p><a href="https://www.enterprisebot.ai/blog/how-to-finetune-chatgpt-on-your-use-case">How to finetune chatgpt </a></p></li><li><p><a href="https://www.deeplearning.ai/short-courses/chatgpt-prompt-engineering-for-developers/">Prompt engineering </a></p></li></ul><h2><strong>Implementing Generative AI in Rocketium's Creative Operations</strong></h2><p>Here are a series of initiatives we have slated to incorporate Generative AI. More importantly, these should serve as an example to draw from and inspiration to incorporate into your own product development. </p><ol><li><p><strong>Brand-Compliant Creative Copy Generation</strong>: Advanced language models (LLMs) like GPT-4 can be trained on a company's past ad copies, which can be vectorized and stored in databases such as Elasticsearch. When a new copy is needed, a query can be run to fetch the most similar past copy vectors, and this copy can be used as a context for the model to generate a new, brand-compliant copy. The success of this process highly depends on precise prompt engineering, ensuring you communicate effectively with the AI.</p></li><li><p><strong>Design Compliance</strong>: Using Generative Adversarial Networks (GANs), AI models can be trained on past ad designs. GANs are designed to create new data with the same statistics as the training set. Hence, they can generate new, brand-compliant designs that are similar to previous advertisements but carry a freshness in their aesthetics.</p></li><li><p><strong>Media Library Insights</strong>: Generative AI can be used to extract metadata from media assets (using CNNs for images and LLMs for any associated text), which can then be vectorized and stored for semantic search. This is a significant improvement over conventional methods which rely only on text metadata and exact matching algorithms.</p></li><li><p><strong>Image Utility Tools</strong>: AI offers a variety of tools for image manipulation, such as super-resolution (upscaling an image without losing detail, often achieved through models like SRGAN), background extension (using texture synthesis or inpainting techniques), and object removal (using convolutional neural networks that can be trained to recognize and erase certain image parts).</p></li><li><p><strong>Improved Project Briefs</strong>: AI can use Named Entity Recognition (NER) to identify if crucial elements (like audience, objectives, channel, tone) are missing in project briefs. Additionally, LLMs like GPT-4 can be used to rewrite the brief in a format preferred by the company, maintaining brand consistency and clarity of communication.</p></li><li><p><strong>Mood Board Generation</strong>: Models like GANs, trained on various aesthetic styles and visual elements, can generate images that fit a specific mood or theme. These AI-generated images can be dynamically added to a mood board, aiding in the creative brainstorming process for ad campaigns.</p></li><li><p><strong>Stock Content Generation</strong>: AI can also generate brand-consistent stock content using GANs. By training on a diverse range of stock images, AI can generate new, unique variations of images that can be used in advertising material.</p></li><li><p><strong>Creative Compliance</strong>: Generative AI can help improve creative compliance by identifying non-compliant elements. Using a combination of Computer Vision and Natural Language Processing (NLP) techniques, creative content can be deconstructed into its constituting elements (like text, image, color schemes, logos) and each element can be checked for compliance with brand guidelines.</p></li><li><p><strong>Creative Analytics</strong>: By deconstructing ads into text and image components using NLP and Computer Vision techniques, AI can help analyze the impact of individual creative elements on ad performance. For example, attention-based models could identify parts of the ad copy that most effectively engage users. The results can be mapped onto standard marketing frameworks like AIDA (Attention, Interest, Desire, Action) or RFM (Recency, Frequency, Monetary) to provide deeper insights into ad performance. Moreover, these insights can be presented in a more digestible format by generating text-based summaries using LLMs, easing the interpretation of complex data.</p></li></ol><h2><strong>Considerations for Generative AI Implementation</strong></h2><ul><li><p><strong>Cost</strong> - Utilizing pre-existing platforms such as Google&#8217;s AutoML, AWS Bedrock or ChatGPT can significantly inflate costs, especially considering that ChatGPT 4 is nearly ten times costlier than ChatGPT 3, necessitating careful deliberation on the appropriate use of GPT3 vs. GPT4. Training and hosting your own Machine Learning (ML) models may provide substantial savings at scale, albeit with an increased demand for resources and expertise for system maintenance. The recommendation is to explore efficiency strategies for these hosted solutions. One example includes a proof of concept, which involved labeling various parts of creatives at a cost of $1500 for 500 images, with additional training costs as a one-time $100 fee. Querying costs present two differing impacts on user experience: Option 1 ($1500 per month), which provides a dedicated, always-online instance for immediate compliance checks, and Option 2 ($150 per month), which necessitates batching requests in a CSV format and submitting them, yielding results typically within 1-2 hours. Long story short, the cost can vary widely and you need to explore what is the right option for you.</p></li><li><p><strong>Time</strong> - Although pre-existing solutions can expedite your AI implementation, training and hosting your own ML model can be a time-consuming process. Developing proficiency in maintaining your own solution also requires a significant investment of time.</p></li><li><p><strong>Expertise</strong> - While having an internal team proficient in AI/ML is advantageous, the rapid advancements in this field have made AI accessible to a large number of engineers. Hence, there should be no hesitation in exploring this area.</p></li></ul><h2><strong>Challenges and Future Scope</strong></h2><p>The challenges in implementing generative AI lie in training models to generate brand-compliant design ideas and adapting ads from one size to another without losing their essence.</p><p>As we venture further into the world of generative AI, we anticipate a shift. Once the initial euphoria around generative AI subsides, use cases that serve the invariables - efficiency, productivity, and creativity - will persist, and the rest will fade away.</p><p>Embrace generative AI in your business. It is not just an option, but a necessary leap into the future. Happy coding, and until next time, may the AI be with you!</p><p></p><p>For more insights into our culture and processes, visit <a href="https://culture.rocketium.com/">culture.rocketium.com</a>. We foster a collaborative and open environment, working alongside talented and driven individuals. If you are eager to join our journey and be a part of this exciting adventure, please reach out to us at <strong><a href="mailto:careers@rocketium.com">careers@rocketium.com</a></strong>.</p>]]></content:encoded></item><item><title><![CDATA[Celebrating Success and Embracing Mistakes: The Whale and Monkey Method at Rocketium]]></title><description><![CDATA[Explore Rocketium's innovative Whale and Monkey approach for team development, a strategy that celebrates both achievements and learning from mistakes]]></description><link>https://blog.rocketium.com/p/celebrating-success-and-embracing</link><guid isPermaLink="false">https://blog.rocketium.com/p/celebrating-success-and-embracing</guid><dc:creator><![CDATA[Santosh Bheemarajaiah]]></dc:creator><pubDate>Thu, 08 Jun 2023 06:08:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vn_C!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5345774-1ff0-448e-b6f9-1166bb923bfc_874x586.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vn_C!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5345774-1ff0-448e-b6f9-1166bb923bfc_874x586.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vn_C!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5345774-1ff0-448e-b6f9-1166bb923bfc_874x586.png 424w, https://substackcdn.com/image/fetch/$s_!vn_C!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5345774-1ff0-448e-b6f9-1166bb923bfc_874x586.png 848w, https://substackcdn.com/image/fetch/$s_!vn_C!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5345774-1ff0-448e-b6f9-1166bb923bfc_874x586.png 1272w, https://substackcdn.com/image/fetch/$s_!vn_C!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5345774-1ff0-448e-b6f9-1166bb923bfc_874x586.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vn_C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5345774-1ff0-448e-b6f9-1166bb923bfc_874x586.png" width="874" height="586" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b5345774-1ff0-448e-b6f9-1166bb923bfc_874x586.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:586,&quot;width&quot;:874,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:441742,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vn_C!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5345774-1ff0-448e-b6f9-1166bb923bfc_874x586.png 424w, https://substackcdn.com/image/fetch/$s_!vn_C!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5345774-1ff0-448e-b6f9-1166bb923bfc_874x586.png 848w, https://substackcdn.com/image/fetch/$s_!vn_C!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5345774-1ff0-448e-b6f9-1166bb923bfc_874x586.png 1272w, https://substackcdn.com/image/fetch/$s_!vn_C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5345774-1ff0-448e-b6f9-1166bb923bfc_874x586.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>At Rocketium, we believe that a healthy work culture is the backbone of a successful team. This belief has led us to implement a system that draws from the wisdom in the book <a href="https://www.radicalcandor.com/">Radical Candor</a> by Kim Scott. This system, designed to foster both praise and criticism, was initially introduced by Dan Wood, CTO of a start-up in the 1990s. It revolves around two main components, or rather, two stuffed animals: a whale and a monkey.</p><h2><strong>The "Killer Whale" of Achievement &#129416;</strong></h2><p>Every Monday at Rocketium, our engineering team members have the opportunity to nominate themselves or a teammate for the "Killer Whale" award, which is conferred for a week. This award encourages team members to openly discuss the extraordinary work they've completed during the previous week.</p><p>As opposed to an employee-of-the-month style approach, the Killer Whale format ensures that those who do outstanding work get recognition promptly, at the beginning of the following week. If there are multiple nominees, the award's recipient is determined by a team vote, further emphasizing our focus on collaborative decision-making.</p><p>The Killer Whale mechanism motivates the team to strive for excellence and sets the tone for the week ahead. It promotes an environment that encourages individuals to take the initiative, innovate, and share their accomplishments with the team.</p><h2><strong>Embracing Mistakes with "Whoops the Monkey" &#128018;</strong></h2><p>The second part of our system involves another plush toy and an equally important lesson: <em><strong>recognizing our mistake</strong></em><strong>s</strong>. Team members can nominate themselves for the "Whoops the Monkey" award, designed to encourage open discussions about errors made in the previous week.</p><p>When someone owns up to a mistake they've made, they receive the monkey, symbolic of the automatic forgiveness that comes with it. This process creates an open, transparent atmosphere where it's okay to mess up, as long as you learn from it. The monkey is also a gentle reminder to others to avoid repeating the same mistake.</p><h2><strong>Bringing it to Life</strong></h2><p>To enhance visibility and make the process more interactive, we display photos of the winners with each toy on a wall in our office. Additionally, winners change their Slack profile pictures to the respective toys for a week.</p><p>While we've only been practicing this system for a while, it generates excitement every Monday morning as team members await the nomination process. </p><h2><strong>In Summary</strong></h2><p>The Killer Whale and Whoops the Monkey system at Rocketium aims to create a culture that values both achievements and learning from mistakes. While it's too early to measure its long-term impact, the system has invigorated our team dynamics and turned Monday mornings into a celebration of accomplishments and growth. Through this, we're fostering a work environment where praise, constructive criticism, and learning go hand-in-hand.</p><p>You can read more about our culture and our processes at <a href="https://culture.rocketium.com/">culture.rocketium.com</a>. We work with highly motivated and smart people in an open and collaborative environment. If you would like to be on this rocket ship, do write to&nbsp;<a href="mailto:careers@rocketium.com">careers@rocketium.com</a>.</p>]]></content:encoded></item><item><title><![CDATA[Do you find Goal Setting challenging?]]></title><description><![CDATA[Tips on how to organise your goals. Sharing concrete goals of our engineering team.]]></description><link>https://blog.rocketium.com/p/do-you-find-goal-setting-challenging</link><guid isPermaLink="false">https://blog.rocketium.com/p/do-you-find-goal-setting-challenging</guid><dc:creator><![CDATA[Santosh Bheemarajaiah]]></dc:creator><pubDate>Sun, 14 Aug 2022 03:31:15 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1564510714747-69c3bc1fab41?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHwxOXx8Z29hbHxlbnwwfHx8fDE2NjA0NDUzMTI&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=1080" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1564510714747-69c3bc1fab41?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHwxOXx8Z29hbHxlbnwwfHx8fDE2NjA0NDUzMTI&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=1080" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://images.unsplash.com/photo-1564510714747-69c3bc1fab41?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHwxOXx8Z29hbHxlbnwwfHx8fDE2NjA0NDUzMTI&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1564510714747-69c3bc1fab41?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHwxOXx8Z29hbHxlbnwwfHx8fDE2NjA0NDUzMTI&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1564510714747-69c3bc1fab41?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHwxOXx8Z29hbHxlbnwwfHx8fDE2NjA0NDUzMTI&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1564510714747-69c3bc1fab41?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHwxOXx8Z29hbHxlbnwwfHx8fDE2NjA0NDUzMTI&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1564510714747-69c3bc1fab41?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHwxOXx8Z29hbHxlbnwwfHx8fDE2NjA0NDUzMTI&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=1080" width="1080" height="720" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1564510714747-69c3bc1fab41?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHwxOXx8Z29hbHxlbnwwfHx8fDE2NjA0NDUzMTI&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1080,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;white printer paper beside filled mug&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="white printer paper beside filled mug" title="white printer paper beside filled mug" srcset="https://images.unsplash.com/photo-1564510714747-69c3bc1fab41?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHwxOXx8Z29hbHxlbnwwfHx8fDE2NjA0NDUzMTI&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1564510714747-69c3bc1fab41?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHwxOXx8Z29hbHxlbnwwfHx8fDE2NjA0NDUzMTI&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1564510714747-69c3bc1fab41?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHwxOXx8Z29hbHxlbnwwfHx8fDE2NjA0NDUzMTI&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1564510714747-69c3bc1fab41?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHwxOXx8Z29hbHxlbnwwfHx8fDE2NjA0NDUzMTI&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=1080 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@contentpixie">Content Pixie</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p>Goal-setting is one of the most important steps in building high-performing teams. But building an effective set of goals can be challenging and a time-consuming task. In this blog post, I will share a framework we use at Rocketium to define our Engineering goals.</p><h1>How we set the goals</h1><div><hr></div><h3>Start with company objectives</h3><p>Having a clear understanding of the company's mission and objectives is the first step in goal-setting. Team and individual goals need to align with both.</p><h3>Organise the goals around 3P framework</h3><p>Taking inspiration from the People, Process, Technology framework, we have created our own People, Process, and Product framework. Every goal is mapped to a theme which, in turn, is mapped to one of the verticals of the 3 Ps. Below are the themes we defined under each category.</p><ul><li><p><strong>People -</strong>&nbsp;Career objective, Collaboration, Visibility, Hiring, Mentoring</p></li><li><p><strong>Process</strong>&nbsp;- Communication, Feedback, Ownership, Collaboration, Validation</p></li><li><p><strong>Product</strong>&nbsp;- Development, Quality, Shipping, Product mindset, Support</p></li></ul><h3>Make goal-setting a collaborative exercise</h3><p>Every team needs to work in unison for an organisation to run like a well-oiled machine. The entire Engineering team at Rocketium participates in goal-setting, seeking feedback from all other teams to ensure each team&#8217;s expectations are met.</p><h3>Sharpen each goal using SMART framework</h3><p>SMART stands for Specific, Measurable, Achievable, Relevant, and Time-bound. Defining these parameters for every goal ensures they are achievable within a specific timeframe. We have to admit it was hard to apply all parts of this framework for every goal but we did the best we could.</p><h1>Engineering goals</h1><div><hr></div><p>The 3P framework helped us come up with strong initiatives. However, it is not the best way to organise goals as there can be overlaps across themes. Once we had all the goals, we regrouped them under common themes that emerged.</p><p>Below are all the goals we defined for our Engineering team across seniority levels.</p><h3><strong>Career objective</strong></h3><ul><li><p>Promotions and Rating - Work with every team member to define their career goals - promotion and performance ratings. This helps in setting the right expectation to achieve the goals upfront and provides periodic feedback to help the individual achieve those goals.</p></li></ul><h3><strong>Visibility</strong></h3><ul><li><p>Increase your presence in the office. Share kudos and actively participate in relevant online and in-person discussions.</p></li><li><p>Participate actively in meetings. Share at least one opinion, question, or feedback in every meeting.</p></li><li><p>Create excitement about your work by sharing regular updates. Do a demo with relevant teams for early feedback.</p></li><li><p>Write about your work on social media and your own or the team&#8217;s blog.</p></li></ul><h3><strong>Collaboration</strong></h3><ul><li><p>Meet with the Product and Design team to discuss features and priorities. Work with them to ensure the feature list and design are ready before each Sprint.</p></li><li><p>Work closely with the Customer Success team to understand product gaps. Work closely with the design team to launch high-quality features with the right user experience.</p></li><li><p>Create a collaborative environment within the team to increase the quality of what we are working on. Brainstorm with the rest of the team and seek feedback before starting a major feature.</p></li><li><p>Conduct one session a month showcasing product capabilities. Do this in person but also share a recording for future use. Capture this in our internal wiki.</p></li><li><p>Build connections outside of the dev team by having lunch or coffee with at least 1 Customer Success / Design / Sales team member every month.</p></li><li><p>Seek feedback from at least 1 Customer Success / Design / Engineering / Product team member you closely work with. Get positive feedback from 2 people on technical, communication, and written skills.</p></li><li><p>Provide timely feedback to peers, managers, and external team members. Make notes during meetings and 1:1s. Take action before the next meeting.</p></li></ul><h3><strong>Development</strong></h3><ul><li><p>Reduce complexity and promote reuse. Review the architecture of peer team members and provide feedback. Find elegant solutions to complex problems</p></li><li><p>Document technical architecture, OKRs, manual test plan, and roll-out plan. Seek feedback from other team members for features before development starts.</p></li><li><p>Identify ways to reuse code and create components so we add only what is needed.</p></li><li><p>Conduct stringent code reviews. Reject those that do not follow coding best practices. Ensure all corner cases are covered. All new features have enough comments and logs to help debug the feature.</p></li></ul><h3><strong>Technical leadership</strong></h3><ul><li><p>Spend 10% of your time inspiring and guiding a team member to complete their projects with outstanding results.</p></li><li><p>Meet 3 new team members every week to take feedback on what you are working on, educate them on the feature area, and inspire them.</p></li></ul><h3><strong>Shipping</strong></h3><ul><li><p>Ensure there is no slippage in planned tasks in a Sprint. The tasks should go live the week that the Sprint ends.</p></li><li><p>Get better at estimating timelines and escalate when things are getting delayed. Clearly communicate timelines and blockers.</p></li><li><p>Ensure the Design and Product team reviews the feature before we ship. Build the necessary environments for the teams to review on time.</p></li></ul><h3><strong>Quality</strong></h3><ul><li><p>Ensure features are shipped with the highest quality and zero bugs.</p></li><li><p>Manual testing and peer testing followed by unit and automated tests are a must for a feature release. Ensure features and adjacent areas are tested thoroughly. The features should be tested in an environment that closely mimics the customer&#8217;s environment.</p></li><li><p>Track metrics on product quality.</p></li><li><p>Ask the right questions and assess the priority of on-call issues. Relevant teams should be notified regularly and the root cause is shared and documented during closure.</p></li><li><p>Ensure coding best practices are followed. UI must be aligned with brand guidelines.</p></li></ul><h3><strong>Personal Goals</strong></h3><ul><li><p>Identify at least 1 broken process and improve them. Introduce at least 1 new process to solve existing challenges.</p></li><li><p>Connect with at least 2 high-achievers on LinkedIn, learn from their journey, and share their success stories with the team.</p></li><li><p>Read 6 books by the end of the year.</p></li><li><p>Host 3 senior engineering leaders at our office for an architecture review or brainstorming.</p></li></ul><h3><strong>Hiring and mentoring</strong></h3><ul><li><p>Be part of new hire interviews.</p></li><li><p>Successfully mentor one peer or intern. Motivate others in the team. Be someone who the team looks up to.</p></li><li><p>Constantly focuses on learning outside of daily work.</p></li></ul><h3><strong>A rating (</strong><em><strong>Above Expectations</strong></em><strong>)</strong></h3><ul><li><p>Be inquisitive about our customer&#8217;s nuanced use cases. Review specific campaigns our customers are running</p></li><li><p>Work hard on written and oral communication. This will help in internal discussions and customer calls.</p></li><li><p>Build a brand on social media. Complete one technical book. Take one technical class. Attend one technical conference.</p></li><li><p>Listen to at least one customer demo a week.</p></li><li><p>Adopt a product-minded engineering mindset. Understand why decisions are made, how people use the product, and be involved in making product decisions.</p></li><li><p>Building analytics dashboards for reviewing feature adoption. Spot patterns of poor or excellent usability from metrics. Interact regularly with customers to understand how our products can be improved.</p></li><li><p>Own features from development to adoption.</p></li><li><p>Constantly review, share and implement the latest and greatest findings in the engineering space - coding best practices, frameworks, libraries, &#8230;.</p></li><li><p>Gain expertise in architecting large systems and products.</p></li><li><p>Proactively identify the potential impact of bugs on all the customers using the feature, notify relevant teams, and build a plan to address it. Adopt the learnings in future work.</p></li></ul><h1>Conclusion</h1><p>Effective goal-setting is a continuous process and crucial for building high-performing teams. Doing this collaboratively helps align each team to achieve the company goals effectively. Sharing the goals openly is a social commitment that inspires the team even more to achieve the result.</p><p>I hope this blog post helps you in building out your goals and/or your team&#8217;s goals. You can read more about our culture and our processes at <a href="https://culture.rocketium.com/">culture.rocketium.com</a>.</p><p>We work with highly motivated and smart people in an open and collaborative environment. If you would like to be on this rocket ship, do write to&nbsp;<a href="mailto:careers@rocketium.com">careers@rocketium.com</a>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.rocketium.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Rocketium Blog!</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Delivering personalised content at scale with Smart Links - Part 2]]></title><description><![CDATA[In part 1, we covered the challenges in personalizing visuals at scale and how teams can use Smart Links to solve these challenges.]]></description><link>https://blog.rocketium.com/p/delivering-personalised-content-at-db9</link><guid isPermaLink="false">https://blog.rocketium.com/p/delivering-personalised-content-at-db9</guid><dc:creator><![CDATA[Shubham Sahu]]></dc:creator><pubDate>Mon, 17 Jan 2022 15:04:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OTrK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F56883ad9-91a7-4282-ac87-ca996e7f3af0_1400x788.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OTrK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F56883ad9-91a7-4282-ac87-ca996e7f3af0_1400x788.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OTrK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F56883ad9-91a7-4282-ac87-ca996e7f3af0_1400x788.png 424w, https://substackcdn.com/image/fetch/$s_!OTrK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F56883ad9-91a7-4282-ac87-ca996e7f3af0_1400x788.png 848w, https://substackcdn.com/image/fetch/$s_!OTrK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F56883ad9-91a7-4282-ac87-ca996e7f3af0_1400x788.png 1272w, https://substackcdn.com/image/fetch/$s_!OTrK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F56883ad9-91a7-4282-ac87-ca996e7f3af0_1400x788.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OTrK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F56883ad9-91a7-4282-ac87-ca996e7f3af0_1400x788.png" width="1400" height="788" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/56883ad9-91a7-4282-ac87-ca996e7f3af0_1400x788.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:788,&quot;width&quot;:1400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!OTrK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F56883ad9-91a7-4282-ac87-ca996e7f3af0_1400x788.png 424w, https://substackcdn.com/image/fetch/$s_!OTrK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F56883ad9-91a7-4282-ac87-ca996e7f3af0_1400x788.png 848w, https://substackcdn.com/image/fetch/$s_!OTrK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F56883ad9-91a7-4282-ac87-ca996e7f3af0_1400x788.png 1272w, https://substackcdn.com/image/fetch/$s_!OTrK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F56883ad9-91a7-4282-ac87-ca996e7f3af0_1400x788.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In <a href="https://blog.rocketium.com/p/delivering-personalised-content-at">part 1</a>, we covered the challenges in personalizing visuals at scale and how teams can use Smart Links to solve these challenges. Let us switch gears and dive into the technical details of Smart Links. We will cover:-</p><ol><li><p>Search Algorithm</p></li><li><p>System Design</p></li></ol><h1>Search Algorithm</h1><p><strong>Problem Statement:</strong> Find the <code>k</code> most relevant variants from the <code>n</code> variants in a project</p><p><strong>Input:</strong> <code>n</code> creative URLs, each with a set of <code>m</code> key-value pairs of metadata</p><p><strong>Expected Output:</strong> <code>k</code> most relevant creative URLs</p><h2>Algorithm</h2><p>We built a modified version of <a href="https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm"><code>K-nearest neighbors</code></a> to solve the search problem. Based on the input key-value pairs, we generate a score between <code>0-k</code> for every variant inside the project. We then sorting the variants in descending order of the generated score and pick the first <code>k</code> variants.</p><p><strong>Time Complexity:</strong> <code>O(n * m)</code></p><h2>Example</h2><p>Let us start with the 4 variants we looked at in part 1.</p><ol><li><p><code>age group: 30-45</code>, <code>gender: male</code>, <code>location: London</code>, <code>purchases: 5+</code></p></li><li><p><code>age group: 20-30</code>, <code>gender: male</code>, <code>location: Delhi</code>, <code>purchases: 2-5</code></p></li><li><p><code>age group: 20-30</code>, <code>gender: female</code>, <code>location: San Francisco</code>, <code>purchases: 5+</code></p></li><li><p><code>age group: &lt;20</code>, <code>gender: male</code>, <code>location: Sydney</code>, <code>purchases: 0-2</code></p></li></ol><p>Let us say we are searching for a creative with <code>gender: male</code> and <code>purchases: 0-2</code>. We start with a base score of 0 for all the variants. We match the given key value pairs with each variant&#8217;s metadata. Each match is 1 point.</p><ol><li><p>Variant 1: Gets 1 point as it matches <code>gender: male</code></p></li><li><p>Variant 2: Gets 1 point as it matches <code>gender: male</code></p></li><li><p>Variant 3: Gets 0 point as it does not match anything</p></li><li><p>Variant 4: Gets 2 points as it matches <code>gender: male</code> and <code>purchases: 0-2</code></p></li></ol><p>When we sort by the score, variant 4 comes out on top with a score of 2.</p><h2>JS implementation</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WX7d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F93bd1af5-1891-42e4-b964-ebb00fe95de6_700x811.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WX7d!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F93bd1af5-1891-42e4-b964-ebb00fe95de6_700x811.png 424w, https://substackcdn.com/image/fetch/$s_!WX7d!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F93bd1af5-1891-42e4-b964-ebb00fe95de6_700x811.png 848w, https://substackcdn.com/image/fetch/$s_!WX7d!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F93bd1af5-1891-42e4-b964-ebb00fe95de6_700x811.png 1272w, https://substackcdn.com/image/fetch/$s_!WX7d!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F93bd1af5-1891-42e4-b964-ebb00fe95de6_700x811.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WX7d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F93bd1af5-1891-42e4-b964-ebb00fe95de6_700x811.png" width="700" height="811" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/93bd1af5-1891-42e4-b964-ebb00fe95de6_700x811.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:811,&quot;width&quot;:700,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:143820,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WX7d!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F93bd1af5-1891-42e4-b964-ebb00fe95de6_700x811.png 424w, https://substackcdn.com/image/fetch/$s_!WX7d!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F93bd1af5-1891-42e4-b964-ebb00fe95de6_700x811.png 848w, https://substackcdn.com/image/fetch/$s_!WX7d!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F93bd1af5-1891-42e4-b964-ebb00fe95de6_700x811.png 1272w, https://substackcdn.com/image/fetch/$s_!WX7d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F93bd1af5-1891-42e4-b964-ebb00fe95de6_700x811.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1><strong>System Design</strong></h1><p>There are 2 parts to this architecture:-</p><ol><li><p><strong>Rendering</strong> - Creatives are rendered using a combination of <a href="https://aws.amazon.com/lambda/">Lambda</a> (<em>serverless</em>) and auto-scaling <a href="https://aws.amazon.com/ec2">EC2</a>. They are stored in <a href="https://aws.amazon.com/s3/">S3</a> with the URL saved in a MongoDB database.</p></li><li><p><strong>Delivery</strong> - The API uses <a href="https://aws.amazon.com/cloudfront/">CloudFront</a>, load balancer, Lambda, and <a href="https://redis.io/">Redis</a>.</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!l3Nz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F082ac2e9-9311-4703-84ef-72195e740595_700x358.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!l3Nz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F082ac2e9-9311-4703-84ef-72195e740595_700x358.png 424w, https://substackcdn.com/image/fetch/$s_!l3Nz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F082ac2e9-9311-4703-84ef-72195e740595_700x358.png 848w, https://substackcdn.com/image/fetch/$s_!l3Nz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F082ac2e9-9311-4703-84ef-72195e740595_700x358.png 1272w, https://substackcdn.com/image/fetch/$s_!l3Nz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F082ac2e9-9311-4703-84ef-72195e740595_700x358.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!l3Nz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F082ac2e9-9311-4703-84ef-72195e740595_700x358.png" width="700" height="358" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/082ac2e9-9311-4703-84ef-72195e740595_700x358.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:358,&quot;width&quot;:700,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:47886,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!l3Nz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F082ac2e9-9311-4703-84ef-72195e740595_700x358.png 424w, https://substackcdn.com/image/fetch/$s_!l3Nz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F082ac2e9-9311-4703-84ef-72195e740595_700x358.png 848w, https://substackcdn.com/image/fetch/$s_!l3Nz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F082ac2e9-9311-4703-84ef-72195e740595_700x358.png 1272w, https://substackcdn.com/image/fetch/$s_!l3Nz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F082ac2e9-9311-4703-84ef-72195e740595_700x358.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Architecture of Smart Links</figcaption></figure></div><h2><strong>CloudFront</strong></h2><ol><li><p>Is integrated with Lambda using Load Balancer as there is no direct way to connect Lambda and CloudFront</p></li><li><p>Is used to cache JSON response and/or binary creative data</p></li><li><p>JSON responses are cached against query parameters (<em>for sending search attributes</em>) and headers (<em>for authentication</em>)</p></li><li><p>Checks for same request in the nearest edge location, reducing overall latency drastically</p></li><li><p>Changes made to project in Rocketium triggers an invalidation request in CloudFront distribution so users always have the latest content</p></li></ol><h2><strong>Load balancer</strong></h2><ol><li><p>Just acts as a middleware to connect Lambda and CloudFront</p></li><li><p>Mapped as an origin inside respective CloudFront distribution</p></li><li><p>A behaviour needs to be defined for endpoint <code>/api/v1/creatives</code> to redirect request to mapped load balancer</p></li></ol><h2><strong>Lambda</strong></h2><ol><li><p>Avoids having to manage dedicated servers and scaling</p></li><li><p>Uses search algorithm defined above to find the most relevant creatives</p></li><li><p><strong>Uses reserved concurrency to save <a href="https://aws.amazon.com/blogs/compute/operating-lambda-performance-optimization-part-1/#:~:text=According%20to%20an%20analysis%20of,ms%20to%20over%201%20second.">cold start time</a> and improve latency</strong></p></li></ol><h2><strong>Redis</strong></h2><ol><li><p>Data retrieval is much faster from Redis than a database</p></li><li><p>In case of miss, variant metadata is fetched from MongoDB and cached in Redis</p></li><li><p>Lambda checks for a hit in Redis first before making a database call</p></li></ol><h1><strong>Conclusion</strong></h1><p>In these two parts, we learned about the why, how, and what of Smart Links. Coming soon is <em>Cortex</em>, a layer on Smart Link which harnesses its power to run personalised in-app campaigns. Until then, see it in action at <a href="https://rocketium.com/is/in-app-campaigns/">https://rocketium.com/is/in-app-campaigns/</a>.</p>]]></content:encoded></item><item><title><![CDATA[Delivering personalised content at scale with Smart Links - Part 1]]></title><description><![CDATA[Need of personalized visuals at scale]]></description><link>https://blog.rocketium.com/p/delivering-personalised-content-at</link><guid isPermaLink="false">https://blog.rocketium.com/p/delivering-personalised-content-at</guid><dc:creator><![CDATA[Shubham Sahu]]></dc:creator><pubDate>Mon, 17 Jan 2022 15:02:42 GMT</pubDate><enclosure url="https://cdn.substack.com/image/fetch/h_600,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2203e1ba-9f45-4124-9c39-6f0fa6005660_1400x732.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gvyo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6bf4ba80-b2e8-48a0-a11b-f63510bc208d_1400x787.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gvyo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6bf4ba80-b2e8-48a0-a11b-f63510bc208d_1400x787.jpeg 424w, https://substackcdn.com/image/fetch/$s_!gvyo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6bf4ba80-b2e8-48a0-a11b-f63510bc208d_1400x787.jpeg 848w, https://substackcdn.com/image/fetch/$s_!gvyo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6bf4ba80-b2e8-48a0-a11b-f63510bc208d_1400x787.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!gvyo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6bf4ba80-b2e8-48a0-a11b-f63510bc208d_1400x787.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gvyo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6bf4ba80-b2e8-48a0-a11b-f63510bc208d_1400x787.jpeg" width="1400" height="787" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/6bf4ba80-b2e8-48a0-a11b-f63510bc208d_1400x787.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:787,&quot;width&quot;:1400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!gvyo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6bf4ba80-b2e8-48a0-a11b-f63510bc208d_1400x787.jpeg 424w, https://substackcdn.com/image/fetch/$s_!gvyo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6bf4ba80-b2e8-48a0-a11b-f63510bc208d_1400x787.jpeg 848w, https://substackcdn.com/image/fetch/$s_!gvyo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6bf4ba80-b2e8-48a0-a11b-f63510bc208d_1400x787.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!gvyo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6bf4ba80-b2e8-48a0-a11b-f63510bc208d_1400x787.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h1>Need of personalized visuals at scale</h1><p>Contrary to what social and news media suggests, we are truly living in an era of unprecedented abundance. Across every metric, humanity has never had so much of so many things. There is one thing that was limited and continues to be limited for the foreseeable future - time.</p><p>This makes attention a very precious commodity, especially in this digital era. Today, it is easier than ever to get in front of someone but not as easy to hold their attention. We are swamped with apps, emails, calls, ads across an ever-growing inventory of products and brands. Standing out from the noise is essential to capture someone&#8217;s attention. Only brands that capture attention have a shot at a deeper relationship with users.</p><p>We have seen the highest level of engagement when this happens:-</p><ol><li><p>Users already have a relationship with the brand as users of its app</p></li><li><p>The app has visually-appealing banners and videos</p></li><li><p>These visuals are personalized by user preference, location, &#8230;</p></li></ol><div><hr></div><h1><strong>Troubles with today&#8217;s publishing process</strong></h1><p><a href="https://rocketium.com/">Rocketium</a> helps campaign teams run more effective visual campaigns faster. This involves creative design, management, collaboration, review, and more throughout the four stages that every campaign goes through:-</p><ol><li><p>Plan</p></li><li><p>Create</p></li><li><p>Publish</p></li><li><p>Analyse</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!P5ef!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2203e1ba-9f45-4124-9c39-6f0fa6005660_1400x732.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!P5ef!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2203e1ba-9f45-4124-9c39-6f0fa6005660_1400x732.png 424w, https://substackcdn.com/image/fetch/$s_!P5ef!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2203e1ba-9f45-4124-9c39-6f0fa6005660_1400x732.png 848w, https://substackcdn.com/image/fetch/$s_!P5ef!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2203e1ba-9f45-4124-9c39-6f0fa6005660_1400x732.png 1272w, https://substackcdn.com/image/fetch/$s_!P5ef!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2203e1ba-9f45-4124-9c39-6f0fa6005660_1400x732.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!P5ef!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2203e1ba-9f45-4124-9c39-6f0fa6005660_1400x732.png" width="1400" height="732" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/2203e1ba-9f45-4124-9c39-6f0fa6005660_1400x732.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:732,&quot;width&quot;:1400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!P5ef!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2203e1ba-9f45-4124-9c39-6f0fa6005660_1400x732.png 424w, https://substackcdn.com/image/fetch/$s_!P5ef!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2203e1ba-9f45-4124-9c39-6f0fa6005660_1400x732.png 848w, https://substackcdn.com/image/fetch/$s_!P5ef!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2203e1ba-9f45-4124-9c39-6f0fa6005660_1400x732.png 1272w, https://substackcdn.com/image/fetch/$s_!P5ef!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2203e1ba-9f45-4124-9c39-6f0fa6005660_1400x732.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Stages of every marketing campaign</figcaption></figure></div><p>The publishing stage is a critical part of this lifecycle where creatives are delivered to ad platforms, marketing automation software, and, increasingly, apps and websites.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cxGp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6286768c-36aa-4990-971c-720a72ccb42b_700x349.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cxGp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6286768c-36aa-4990-971c-720a72ccb42b_700x349.png 424w, https://substackcdn.com/image/fetch/$s_!cxGp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6286768c-36aa-4990-971c-720a72ccb42b_700x349.png 848w, https://substackcdn.com/image/fetch/$s_!cxGp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6286768c-36aa-4990-971c-720a72ccb42b_700x349.png 1272w, https://substackcdn.com/image/fetch/$s_!cxGp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6286768c-36aa-4990-971c-720a72ccb42b_700x349.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cxGp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6286768c-36aa-4990-971c-720a72ccb42b_700x349.png" width="700" height="349" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/6286768c-36aa-4990-971c-720a72ccb42b_700x349.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:349,&quot;width&quot;:700,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:185350,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cxGp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6286768c-36aa-4990-971c-720a72ccb42b_700x349.png 424w, https://substackcdn.com/image/fetch/$s_!cxGp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6286768c-36aa-4990-971c-720a72ccb42b_700x349.png 848w, https://substackcdn.com/image/fetch/$s_!cxGp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6286768c-36aa-4990-971c-720a72ccb42b_700x349.png 1272w, https://substackcdn.com/image/fetch/$s_!cxGp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6286768c-36aa-4990-971c-720a72ccb42b_700x349.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Typical process of a marketing campaign</figcaption></figure></div><p>Today&#8217;s publishing process is extremely cumbersome. This summary should tell you how much worse this is in reality:-</p><ul><li><p>Designers share banners and videos with marketers as giant zip files</p></li><li><p>Marketers pass these along to operations or product teams</p></li><li><p>Operations or product teams upload these files one by one in an internal tool</p></li><li><p>Rinse and repeat every time offers or prices change (<em>typically, once in 2 days</em>)</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YCGM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F838d2b39-ad1e-49ba-a13f-a7ec025514b1_700x466.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YCGM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F838d2b39-ad1e-49ba-a13f-a7ec025514b1_700x466.jpeg 424w, https://substackcdn.com/image/fetch/$s_!YCGM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F838d2b39-ad1e-49ba-a13f-a7ec025514b1_700x466.jpeg 848w, https://substackcdn.com/image/fetch/$s_!YCGM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F838d2b39-ad1e-49ba-a13f-a7ec025514b1_700x466.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!YCGM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F838d2b39-ad1e-49ba-a13f-a7ec025514b1_700x466.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YCGM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F838d2b39-ad1e-49ba-a13f-a7ec025514b1_700x466.jpeg" width="700" height="466" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/838d2b39-ad1e-49ba-a13f-a7ec025514b1_700x466.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:466,&quot;width&quot;:700,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:60412,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YCGM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F838d2b39-ad1e-49ba-a13f-a7ec025514b1_700x466.jpeg 424w, https://substackcdn.com/image/fetch/$s_!YCGM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F838d2b39-ad1e-49ba-a13f-a7ec025514b1_700x466.jpeg 848w, https://substackcdn.com/image/fetch/$s_!YCGM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F838d2b39-ad1e-49ba-a13f-a7ec025514b1_700x466.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!YCGM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F838d2b39-ad1e-49ba-a13f-a7ec025514b1_700x466.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h1><strong>Our solution - Smart Links</strong></h1><p>Smart Links are an elegant way to bridge the gap from creation to handoff to delivery to analytics. They are a unique live link (<em>URL</em>) for a project (<em>collection of creatives</em>) that can deliver personalised creatives at lightning-fast speeds.</p><p>There is more to Smart Links than meets the eye.</p><ul><li><p><strong>Search</strong> - A project can have hundreds or thousands of creatives in them. Each creative can have any number of tags associated with them as key-value pairs (<em>for example, </em><code>preference: vegetarian</code><em>, </em><code>type: premium</code>). Smart Links have a search mechanism to choose the best-matching content given a set of tags. More on this <a href="https://blog.rocketium.com/p/delivering-personalised-content-at-db9">in part 2</a>.</p></li><li><p><strong>Real-time updates</strong> - Any updates made to the creatives on Rocketium are immediately visible to users. This eliminates the multi-step publishing process every time offers, prices, or messaging changes.</p></li><li><p><strong>Embed or programmatic use</strong> - Smart Links can be used directly in apps, websites, or other software just like image or video links making this a nice drop-in replacement for internal CDN links. With another query parameter, they can also return a structured JSON response. This allows deeper integration with marketing automation software or internal content management systems.</p></li></ul><div><hr></div><h1><strong>Smart Links in action</strong></h1><h2>Preparing data for personalization</h2><p>Let&#8217;s dive deeper into in the world of personalisation with Smart Links using an example.</p><p>Alice is a Category Manager at an e-commerce giant called Galaxy. She handles clothing department and oversees the process of delivering personalised banners for apparels on the landing page across the app and website.</p><p>Galaxy&#8217;s biggest sale of the year is during holiday season and Alice wants to make it a big success. Personalisation has been the cornerstone of Alice&#8217;s success in past campaigns and she wants to repeat it in this sale by reaching as many users as possible with highly personalised content.</p><p>She wants to start simple by personalising on four attributes:-</p><ul><li><p>Age</p></li><li><p>Gender</p></li><li><p>Location</p></li><li><p># past purchases</p></li></ul><p>This means a 35-year old man from New York might see English creatives with blazer offers in English while a 18-year old girl from Paris might see French creatives with sneaker offers. The discount percentage each of them sees will depend on the number of past purchases.</p><p>Alice along with Galaxy&#8217;s designers and brand team plan the design language, layouts, experiments, and personalization points for the campaign. Designers make a base design template (<em>aka key visual</em>) that has a headline, offer, product, and a call-to-action (<em>CTA</em>).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TaBg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F210b1fc1-bf75-4aea-83eb-70d1885f7f70_700x700.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TaBg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F210b1fc1-bf75-4aea-83eb-70d1885f7f70_700x700.png 424w, https://substackcdn.com/image/fetch/$s_!TaBg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F210b1fc1-bf75-4aea-83eb-70d1885f7f70_700x700.png 848w, https://substackcdn.com/image/fetch/$s_!TaBg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F210b1fc1-bf75-4aea-83eb-70d1885f7f70_700x700.png 1272w, https://substackcdn.com/image/fetch/$s_!TaBg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F210b1fc1-bf75-4aea-83eb-70d1885f7f70_700x700.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TaBg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F210b1fc1-bf75-4aea-83eb-70d1885f7f70_700x700.png" width="438" height="438" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/210b1fc1-bf75-4aea-83eb-70d1885f7f70_700x700.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:700,&quot;width&quot;:700,&quot;resizeWidth&quot;:438,&quot;bytes&quot;:455103,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!TaBg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F210b1fc1-bf75-4aea-83eb-70d1885f7f70_700x700.png 424w, https://substackcdn.com/image/fetch/$s_!TaBg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F210b1fc1-bf75-4aea-83eb-70d1885f7f70_700x700.png 848w, https://substackcdn.com/image/fetch/$s_!TaBg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F210b1fc1-bf75-4aea-83eb-70d1885f7f70_700x700.png 1272w, https://substackcdn.com/image/fetch/$s_!TaBg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F210b1fc1-bf75-4aea-83eb-70d1885f7f70_700x700.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Base design template</figcaption></figure></div><p>In parallel, Alice plans all the user segments for whom she wants to personalize her campaign. These are combinations of age, gender, location, and number of purchases. Below are a few examples.</p><ol><li><p>30-45 years, male, London, 5+ purchases &#8212;&gt; Dress shirts, English, 30% discount</p></li><li><p>20-30 years, male, Delhi, 2-5 purchases &#8212;&gt; Trousers, Hindi, 40% discount</p></li><li><p>20-30 years, female, San Francisco, 5+ purchases &#8212;&gt; Summer dress, English, 30% discount</p></li><li><p>&lt;20 years, male, Sydney, 0-2 purchases &#8212;&gt; T-shirts, English, 50% discount</p></li></ol><p>She creates a spreadsheet with rows for each combination containing the above metadata and the content she wants to personalize for each row - headline, image from the website / internal content management system, CTA, and so on. She can create dozens or thousands of rows based on her needs.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AcZD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4435b75-dce2-43e6-81d1-b3ea036f7346_700x218.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AcZD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4435b75-dce2-43e6-81d1-b3ea036f7346_700x218.png 424w, https://substackcdn.com/image/fetch/$s_!AcZD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4435b75-dce2-43e6-81d1-b3ea036f7346_700x218.png 848w, https://substackcdn.com/image/fetch/$s_!AcZD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4435b75-dce2-43e6-81d1-b3ea036f7346_700x218.png 1272w, https://substackcdn.com/image/fetch/$s_!AcZD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4435b75-dce2-43e6-81d1-b3ea036f7346_700x218.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AcZD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4435b75-dce2-43e6-81d1-b3ea036f7346_700x218.png" width="700" height="218" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/d4435b75-dce2-43e6-81d1-b3ea036f7346_700x218.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:218,&quot;width&quot;:700,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:110990,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!AcZD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4435b75-dce2-43e6-81d1-b3ea036f7346_700x218.png 424w, https://substackcdn.com/image/fetch/$s_!AcZD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4435b75-dce2-43e6-81d1-b3ea036f7346_700x218.png 848w, https://substackcdn.com/image/fetch/$s_!AcZD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4435b75-dce2-43e6-81d1-b3ea036f7346_700x218.png 1272w, https://substackcdn.com/image/fetch/$s_!AcZD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4435b75-dce2-43e6-81d1-b3ea036f7346_700x218.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Spreadsheet with metadata and content to personalize</figcaption></figure></div><h2>Getting the personalized creatives</h2><p>Alice logs into Rocketium, chooses the template that the Design team made, creates a project from it, and imports her spreadsheet into it. This replaces the placeholders in the template with spreadsheet data to create a new variant for each row.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XUqS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3d18f30f-efaf-44ba-ba4b-7f23f0e5168d_700x332.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XUqS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3d18f30f-efaf-44ba-ba4b-7f23f0e5168d_700x332.png 424w, https://substackcdn.com/image/fetch/$s_!XUqS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3d18f30f-efaf-44ba-ba4b-7f23f0e5168d_700x332.png 848w, https://substackcdn.com/image/fetch/$s_!XUqS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3d18f30f-efaf-44ba-ba4b-7f23f0e5168d_700x332.png 1272w, https://substackcdn.com/image/fetch/$s_!XUqS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3d18f30f-efaf-44ba-ba4b-7f23f0e5168d_700x332.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XUqS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3d18f30f-efaf-44ba-ba4b-7f23f0e5168d_700x332.png" width="700" height="332" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/3d18f30f-efaf-44ba-ba4b-7f23f0e5168d_700x332.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:332,&quot;width&quot;:700,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:165664,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XUqS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3d18f30f-efaf-44ba-ba4b-7f23f0e5168d_700x332.png 424w, https://substackcdn.com/image/fetch/$s_!XUqS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3d18f30f-efaf-44ba-ba4b-7f23f0e5168d_700x332.png 848w, https://substackcdn.com/image/fetch/$s_!XUqS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3d18f30f-efaf-44ba-ba4b-7f23f0e5168d_700x332.png 1272w, https://substackcdn.com/image/fetch/$s_!XUqS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3d18f30f-efaf-44ba-ba4b-7f23f0e5168d_700x332.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Rocketium&#8217;s content entry experience</figcaption></figure></div><p>Alice exports the project to render these creatives instantly.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!g0zS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd729da0d-1d99-44f3-a7d2-bacec86510ba_700x700.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!g0zS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd729da0d-1d99-44f3-a7d2-bacec86510ba_700x700.jpeg 424w, https://substackcdn.com/image/fetch/$s_!g0zS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd729da0d-1d99-44f3-a7d2-bacec86510ba_700x700.jpeg 848w, https://substackcdn.com/image/fetch/$s_!g0zS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd729da0d-1d99-44f3-a7d2-bacec86510ba_700x700.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!g0zS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd729da0d-1d99-44f3-a7d2-bacec86510ba_700x700.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!g0zS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd729da0d-1d99-44f3-a7d2-bacec86510ba_700x700.jpeg" width="480" height="480" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/d729da0d-1d99-44f3-a7d2-bacec86510ba_700x700.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:700,&quot;width&quot;:700,&quot;resizeWidth&quot;:480,&quot;bytes&quot;:114909,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!g0zS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd729da0d-1d99-44f3-a7d2-bacec86510ba_700x700.jpeg 424w, https://substackcdn.com/image/fetch/$s_!g0zS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd729da0d-1d99-44f3-a7d2-bacec86510ba_700x700.jpeg 848w, https://substackcdn.com/image/fetch/$s_!g0zS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd729da0d-1d99-44f3-a7d2-bacec86510ba_700x700.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!g0zS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd729da0d-1d99-44f3-a7d2-bacec86510ba_700x700.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Personalized images or videos exported from Rocketium</figcaption></figure></div><h2><strong>Using Smart Links</strong></h2><p>Exporting a project automatically generates a Smart Link for the entire project. A Smart Link URL is of this format:-</p><blockquote><p><code>https://cdn.rocketium.com/api/v1/creatives/project183hdj</code></p></blockquote><p><em>To see full specs visit <a href="https://docs.rocketium.com/campaign/using-campaign/api">our API documentation</a>.</em></p><p>Alice can hand over this URL to the Operations or Product team. Each individual creative within the project can be retrieved in milliseconds by passing the right attributes for it. For example:-</p><blockquote><p><code>https://cdn.rocketium.com/api/v1/creatives/project183hdj?gender=male&amp;location=sydney</code></p></blockquote><p>As you might have noticed, you do not need to pass all the parameters to fetch the right creative. Smart Link is smart enough to return the best-matching creative based on the parameters. Oh yeah, and it is case-insensitive.</p><p>And here you go! Just like that, this holiday sale became a huge milestone for Galaxy and Alice.</p><div><hr></div><h1><strong>Benefits of Smart Links</strong></h1><ul><li><p>Instantly update offers, make edits, or correct errors without deployment or further hand-off.</p></li><li><p>Personalize emails and push notifications by replacing static images or GIFs with dynamic Smart Links. Smart Links integrates well with customer engagement tools like Braze, CleverTap, and Iterable.</p></li><li><p>Add or remove personalization attributes as needed by modifying creative metadata. No technical or design effort needed.</p></li></ul><h1><strong>Up next</strong></h1><p>Things are about to get technical. We&#8217;ll take a deeper look at what runs behind a simple yet powerful Smart Link URL in <a href="https://blog.rocketium.com/p/delivering-personalised-content-at-db9">part 2 of this series</a>.</p>]]></content:encoded></item><item><title><![CDATA[Project Tars ]]></title><description><![CDATA[Creative Evaluation Engine]]></description><link>https://blog.rocketium.com/p/project-tars</link><guid isPermaLink="false">https://blog.rocketium.com/p/project-tars</guid><dc:creator><![CDATA[Somya Bhargava]]></dc:creator><pubDate>Wed, 17 Nov 2021 08:57:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!N5rw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F60c3e0bc-058b-4883-b87d-cac924b2e117_380x380.gif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Our Creative Evaluation Engine, Project Tars was named after the AI robot from Interstellar which played a key role in discovering the new dimension. A smart system to analyze the elements of a design, Tars evaluates creatives with the intention to boost performance. In a simple but revolutionary way, it changes the way we think of a design.&nbsp;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!N5rw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F60c3e0bc-058b-4883-b87d-cac924b2e117_380x380.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!N5rw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F60c3e0bc-058b-4883-b87d-cac924b2e117_380x380.gif 424w, https://substackcdn.com/image/fetch/$s_!N5rw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F60c3e0bc-058b-4883-b87d-cac924b2e117_380x380.gif 848w, https://substackcdn.com/image/fetch/$s_!N5rw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F60c3e0bc-058b-4883-b87d-cac924b2e117_380x380.gif 1272w, https://substackcdn.com/image/fetch/$s_!N5rw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F60c3e0bc-058b-4883-b87d-cac924b2e117_380x380.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!N5rw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F60c3e0bc-058b-4883-b87d-cac924b2e117_380x380.gif" width="380" height="380" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/60c3e0bc-058b-4883-b87d-cac924b2e117_380x380.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:380,&quot;width&quot;:380,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1576843,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!N5rw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F60c3e0bc-058b-4883-b87d-cac924b2e117_380x380.gif 424w, https://substackcdn.com/image/fetch/$s_!N5rw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F60c3e0bc-058b-4883-b87d-cac924b2e117_380x380.gif 848w, https://substackcdn.com/image/fetch/$s_!N5rw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F60c3e0bc-058b-4883-b87d-cac924b2e117_380x380.gif 1272w, https://substackcdn.com/image/fetch/$s_!N5rw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F60c3e0bc-058b-4883-b87d-cac924b2e117_380x380.gif 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1>The birth of our Creative Evaluation Engine - TARS</h1><p>Over 200K+ creatives were generated on Rocketium in the last year. All of these have been from some of the highest-performing enterprises in our ecosystem. And we have been a quiet force behind their large-scale projects.</p><p>Sensitive information from campaigns is highly protected on the Rocketium platform. However, there is a hoard of data from successful, large-scale businesses who make creatives for different objectives (such as ads, app, push). And if we are as committed to our mission statement, we couldn&#8217;t have let this goldmine of data not be used for smarter, better projects.</p><p>Thus, TARS came into being. Just like its namesake, Rocketium&#8217;s TARS is a strongly tested and trained logic that uses the collective intelligence from the entire platform, looking at each element objectively, to help build high-performing creatives for our users. The engine enriches and unlocks existing data on the platform to make recommendations in the design for upcoming projects. And with every new creative made on the platform, the information is enriched further and it helps every new and old user to make better decisions the next time.</p><p><strong>The vision: smart recommendations for better performing designs.</strong></p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2En8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3883a7b-efb5-47cd-8d2a-c2678deaae10_1342x904.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2En8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3883a7b-efb5-47cd-8d2a-c2678deaae10_1342x904.png 424w, https://substackcdn.com/image/fetch/$s_!2En8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3883a7b-efb5-47cd-8d2a-c2678deaae10_1342x904.png 848w, https://substackcdn.com/image/fetch/$s_!2En8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3883a7b-efb5-47cd-8d2a-c2678deaae10_1342x904.png 1272w, https://substackcdn.com/image/fetch/$s_!2En8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3883a7b-efb5-47cd-8d2a-c2678deaae10_1342x904.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2En8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3883a7b-efb5-47cd-8d2a-c2678deaae10_1342x904.png" width="1342" height="904" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/e3883a7b-efb5-47cd-8d2a-c2678deaae10_1342x904.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:904,&quot;width&quot;:1342,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:159016,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2En8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3883a7b-efb5-47cd-8d2a-c2678deaae10_1342x904.png 424w, https://substackcdn.com/image/fetch/$s_!2En8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3883a7b-efb5-47cd-8d2a-c2678deaae10_1342x904.png 848w, https://substackcdn.com/image/fetch/$s_!2En8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3883a7b-efb5-47cd-8d2a-c2678deaae10_1342x904.png 1272w, https://substackcdn.com/image/fetch/$s_!2En8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3883a7b-efb5-47cd-8d2a-c2678deaae10_1342x904.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The whole project relied on two modules coming together in perfect harmony:</p><p>Tesseract: Building an analytics engine that can store and perform queries to retrieve &#8216;interesting&#8217; information and insights from a large number of creatives, and then compare this information.</p><p>Tars: Building a recommendation engine that can compare new information (from creatives and user actions) with guidelines set by the company.</p><p>The final outcome would be the compilation of data from the analytics engine, and then providing it as an input to the recommendation engine for better performance of every design created.</p><h2><strong>Part 1 - Building Tesseract: The Analytics Engine</strong></h2><p>At Rocketium, we store the input data in a JSON format, and then it converts to a richer output. Our technical terminology for this codification of creatives would be JSON -&gt; Video/Image/GIF converter. However, building this analytics engine cam with a few challenges:</p><p><strong>Problem #1</strong><br>Using MongoDB on our backend, the deeply nested creative data would be quite difficult to run analytics on. The existing data is quite heavy, and complex aggregated queries would be very slow in returning with a response.<br>So we had to figure out the best database, or some other analytics engine that can give better performance data.<br>We will circle back to this issue, but there&#8217;s more to look into for right now.</p><p></p><p><strong>Problem #2</strong></p><p>We wanted to slice and dice the data based on many keys, which meant we couldn&#8217;t use standard MySQL or MongoDB setups.<br>So we started with the research, and heavy as it was, we settled on Google&#8217;s BigQuery for the following reasons :<br>It allows for SQL-type data, but does not have the concept of indexes. This works in our favor, resolving the second problem mentioned above.<br>The performance was better once the data gets into the data flow.<br>It is quite cost-efficient when compared to other TTL tools such as Stitch - which we loved initially, but decided against for maintainability and control reasons.</p><p></p><p><strong>Problem #3</strong></p><p>If we were going to use two different databases to run this operation, we&#8217;d have to figure out a way to keep them synced.<br>To resolve this, we looked into the support from Mongo. We tackled this issue in two parts.</p><p>We needed to address the past data and then take a full dump. Our data was about 30GB or so,  and the transform script must run at each level. However, ours was only running on a single portion of that. But we figured this was good enough to be POC, and we set out.</p><p>For keeping things in sync during runtime, we leveraged the watch command on Mongo to receive any changes to our code.<br></p><pre><code>const tail = () =&gt; {
   const taskCollection = db.collection('capsules');
   const changeStream = taskCollection.watch({fullDocument: 'updateLookup', readPreference: 'secondary'});

   changeStream.on('change', (change) =&gt; {
      console.log(change.fullDocument);
   });
};</code></pre><p>So finally, our data arrived into BigQuery in a flattened format. Our single table from Mongo was now four different tables in BigQuery. And the next step would be to form queries and show them via our UI, for actual user insights.</p><ul><li><p>You have exceeded the recommended ratio of the logo to the container. Consider resizing.</p></li><li><p>The image to container ratio is exceeding the guideline for optimal CTRs in your category. Consider rearranging.</p></li><li><p>Too many font styles are used. Legibility for your aspect ratio is not optimal.</p></li></ul><p>As a newbie to this analytics team, I needed some time to recall what should happen next. But then I did, from something we all probably learned in XI grade. I identified that we can get histogram quantiles, and then make deductions according to the present value of inputs from a user.&nbsp;</p><p>Sample query for the first statement regarding logo:</p><pre><code>select 
  approx_quantiles(total_area, 100) as percentile 
from 
  (
    select 
      sum(
        if (
          stylesWithArea.area &gt;= 100, 0, stylesWithArea.area
        )
      ) as total_area 
    from 
      (
        select 
          *, 
          (
            (
              (
                (styles.size_height / 100) * (styles.size_width / 100) * (
                  (
                    100 - styles.modifyLength_top - styles.modifyLength_bottom
                  ) * (
                    100 - styles.modifyLength_left - styles.modifyLength_right
                  )
                )
              ) / (
                styles.size_width * styles.size_height
              )
            ) * 100
          ) as area 
        from 
          `new-vidgen-servers.analytics.styles_dev` as styles 
        where 
          styles.elementType in ('image') 
          and LOWER(styles.helpText) like '%logo%'
      ) as stylesWithArea 
      left outer join `new-vidgen-servers.analytics.capsules_dev` as capsules on stylesWithArea.capsuleId = capsules.capsuleId 
      and stylesWithArea.version = capsules.version 
    where 
      capsules.outputFormat = 'image' 
    group by 
      stylesWithArea.capsuleId, 
      stylesWithArea.version, 
      stylesWithArea.size
  )</code></pre><p>Now we had data in the format of 0 to 100 percentile, and what is the value at each number. We simply looked at the input value from the creative, and deduced the historical data to say something like:</p><blockquote><p><em>83% of creatives have the logo, more than 2% of your creatives.</em></p></blockquote><p>The entire analytics was executed at two levels, across the Rocketium data as well as within the customers&#8217; scope. Tactically, we stored the entire query in our database with variables in the query such as {{teamId}} for providing dynamic values.</p><h2>Part 2 - Building Tars: The Creative Evaluation Engine</h2><p>I thought of building Tars the way that ESLint rules work in our React app. A user provides a config JSON, and while developing we get errors or warnings if there are any issues. Of course, a designer cannot know the full depth of the brand guidelines, especially if there is a large team with many shareholders. So our intention here was to resolve the issue of reviewing repetitive stuff altogether.</p><blockquote><p>This meant providing suggestions like</p><p><em>The text should be between X and Y % of the banner.</em></p><p><em>The total number of characters in the banner between x &#8212; y.</em></p></blockquote><h3>Steps to building Tars</h3><p>Having Tesseract in place was definitely a huge advantage, as we decided upon using the same logic to get the flattened structure for Tars as well. With JSON rules engine (https://github.com/CacheControl/json-rules-engine) as the base, we were going to build on top of it.</p><p>The modular library offered us a huge deal of liberty in what we were trying to achieve. A single rule would give us a yes or no, but we wanted to have a loop of these rules constantly in motion. Furthermore, we must collect the values on which elements break.&nbsp;</p><p>We also needed aggregation in certain places, and I thought of the whole thing as if an SQL query. I had to build logic like grouping, filtering, and collecting data -- here is an example.&nbsp;</p><pre><code>{
   "_id" : "totalTextArea",
   "name" : "Total text area",
   "message" : "Text should be between 30 and 50 % of the banner",
   "ownerId" : "561796c9ce0203f33fe8e565",
   "order" : 1.0,
   "rules" : [
   {
      "type" : "filter",
      "key" : "styles",
      "outputKey" : "textElements",
      "customFact" : "area",
      "ruleJson" : {
         "all" : [
            {
               "any" : [
                  {
                     "fact" : "elementType",
                     "operator" : "equal",
                     "value" : "text"
                  },
                  {
                     "fact" : "elementType",
                     "operator" : "equal",
                     "value" : ""
                  }
               ]
            },
            {
               "fact" : "area",
               "operator" : "greaterThan",
               "value" : 0.0
            }
         ]
      }
   },
   {
      "type" : "aggregate",
      "ruleJson" : {
         "any" : [
            {
               "fact" : "sum_value",
               "operator" : "greaterThan",
               "value" : 50.0,
               "params" : {
                  "array" : "textElements",
                  "key" : "area",
                  "groupBy" : "size",
                  "groupByVal" : "max"
               }
            },
            {
               "fact" : "sum_value",
               "operator" : "lessThan",
               "value" : 30.0,
               "params" : {
                  "array" : "textElements",
                  "key" : "area",
                  "groupBy" : "size",
                  "groupByVal" : "min"
               }
            }
         ]
      }
   }
],
   "isDeleted" : false
}</code></pre><h3>How does this work?</h3><p>If you closely go through the JSON above, it reveals the following:</p><ul><li><p>The flattened structure includes capsule, scenes, elements, and styles as the four base structures.</p></li><li><p>The library compared data by determining greater than or less than values.</p></li><li><p>Custom facts are used to calculate areas, or min/max values.</p></li><li><p>Custom facts also come with a bunch of parameters.</p></li><li><p>We have two methods for filtering, and then aggregating the data.</p></li></ul><p>And finally, the rule engine was ready to use; all set to help customers define their rules.</p><h3><strong>To be continued</strong></h3><p>Everything incredible in the world has a version 2 which truly defines its capabilities. And Tars is going to follow the same route. We are yet to achieve all that we know we can offer, and we know what we want to achieve as well:</p><ul><li><p>Users making their own rules (for now we only offer them what we have put together in our database)</p></li><li><p>Adding more complex rules to enrich users&#8217; experience with more capabilities.</p></li><li><p>Constantly checking our analytics engine and building more queries.</p></li></ul><p>So we&#8217;re setting out on a bigger horizon. Until we get there and I share it with you, I hope this can suffice.</p><h5>What&#8217;s the wait for &#8212; TRY IT OUT!</h5><p>Go to <a href="https://rocketium.com">https://rocketium.com</a> and signup to see the mammoth Tars in action!</p>]]></content:encoded></item></channel></rss>