<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Ludwig – IMG.LY Blog</title><description>Posts by Ludwig on the IMG.LY blog.</description><link>https://img.ly/blog/author/ludwig/</link><language>en-us</language><image><url>https://img.ly/apple-touch-icon.png</url><title>Ludwig – IMG.LY Blog</title><link>https://img.ly/blog/author/ludwig/</link></image><atom:link href="https://img.ly/blog/author/ludwig/rss.xml" rel="self" type="application/rss+xml"/><generator>Astro</generator><lastBuildDate>Tue, 09 Jun 2026 13:47:30 GMT</lastBuildDate><ttl>60</ttl><item><title>Genki — A Design Developer System</title><link>https://img.ly/blog/genki-a-design-developer-system-71f874a633d9/</link><guid isPermaLink="true">https://img.ly/blog/genki-a-design-developer-system-71f874a633d9/</guid><description>Design Systems are great! They helped our team prototype solutions so much faster, allowed for unified designs on all our served platforms and helped tracking changes more easily with dedicated component library and product sketch files.</description><pubDate>Thu, 14 Jun 2018 13:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/embed/bEhoG-z6CQE?feature=oembed&quot;&gt;https://www.youtube.com/embed/bEhoG-z6CQE?feature=oembed&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;However after maintaining and using our system day in day out we faced a series of problems, and annoyances:&lt;/p&gt;
&lt;h3 id=&quot;naming&quot;&gt;Naming&lt;/h3&gt;
&lt;p&gt;When I first started working on the code of our app after designing the application for over one year, it struck me to see the naming was not at all related to the one we used in our sketch files.&lt;/p&gt;
&lt;p&gt;Naming conventions on the design part had no effect on the ones defined by our developers and vice versa. This makes an effective theming impossible with no clear reference to each color and coordinating style changes so much harder.&lt;/p&gt;
&lt;h3 id=&quot;theming&quot;&gt;Theming&lt;/h3&gt;
&lt;p&gt;This brings me to theming. Our product — &lt;a href=&quot;https://img.ly/products/photo-sdk/&quot;&gt;PhotoEditor SDK&lt;/a&gt; — is used in a variety of environments. Most of customers want to adapt the editor to their own CI, therefore it has to work in multiple color themes and screen resolutions. Icons and all other assets like illustrations should then adopt to the theme and display accordingly. In the past one created multiple sketch files to accommodate themes, each one relying on its own atomic and component level library. Naming had to be kept in sync and each change in one file had to be applied to the individual themes.&lt;/p&gt;
&lt;h3 id=&quot;style-creation&quot;&gt;Style Creation&lt;/h3&gt;
&lt;p&gt;We adopted the convention of creating atomic styles in a separate sketch library file. However the sketch component style creation is cumbersome and repetitive:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;each text style needs 3 versions for left, center and right alignment&lt;/li&gt;
&lt;li&gt;shadows and outlines variations need to be created for each radius used inside the app, since they can’t be masked&lt;/li&gt;
&lt;li&gt;outline and fill style need to be kept in sync manually&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;solution&quot;&gt;Solution&lt;/h2&gt;
&lt;p&gt;We propose a “Atomic Design-Developer System”. This system lives in one JSON file, that gets accessed by developers and designers alike, through any imaginable input (web interface, editor, sketch plugin). From this JSON file, the application then generates styles for all code bases and a sketch library file with a visual representation of the styles and a page with all atomic symbols. On the sketch part the above described problems get solved in the following way:&lt;/p&gt;
&lt;h3 id=&quot;naming-1&quot;&gt;Naming&lt;/h3&gt;
&lt;p&gt;By giving the generated symbols the same name as the JSON path, developers and designers work with the same vocabulary.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;“theme.color.navigation” → “Fill / Color / Navigation”&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;theming-1&quot;&gt;Theming&lt;/h3&gt;
&lt;p&gt;With the simple switch of a constant the theme can be switched. No more multiple screens for each theme. The themes can be compared side by side, without unnecessary clutter of the generated variations for each style, like &lt;strong&gt;right&lt;/strong&gt; and &lt;strong&gt;center&lt;/strong&gt; alignment for typography. Those variations get saved in a separate symbol page.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;A preview of each theme gets generated inside the file. Outlined one is the active.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 1002px) 1002px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;1002&quot; height=&quot;1226&quot; src=&quot;https://img.ly/_astro/image-11_ZJP7dm.webp&quot; srcset=&quot;/_astro/image-11_Z1zSVQL.webp 640w, /_astro/image-11_29PJdM.webp 750w, /_astro/image-11_Z1cIsGy.webp 828w, /_astro/image-11_ZJP7dm.webp 1002w&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;style-creation-1&quot;&gt;Style Creation&lt;/h3&gt;
&lt;p&gt;For each color and shadow variations in &lt;strong&gt;outline&lt;/strong&gt; and &lt;strong&gt;radius&lt;/strong&gt; are generated.The radius and line weight is defined globally and generated for each style.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 1400px) 1400px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;1400&quot; height=&quot;316&quot; src=&quot;https://img.ly/_astro/image-12_1pTvp7.webp&quot; srcset=&quot;/_astro/image-12_Z1sFVqV.webp 640w, /_astro/image-12_1SrJrJ.webp 750w, /_astro/image-12_Z2ju9xQ.webp 828w, /_astro/image-12_3QCMd.webp 1080w, /_astro/image-12_Zr2aVL.webp 1280w, /_astro/image-12_1pTvp7.webp 1400w&quot;&gt;&lt;/p&gt;
&lt;p&gt;The same holds true for typography. For each style a symbol for &lt;strong&gt;left&lt;/strong&gt;, &lt;strong&gt;center&lt;/strong&gt;and &lt;strong&gt;right&lt;/strong&gt; alignment is generated. Also we allow extending text styles. The generated symbols then inherit from the base style. Think &lt;strong&gt;bold, italic&lt;/strong&gt; versions of a text style, or button text on an image background.&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;We started integrating the generator in our process and are very happy with the results. No more naming conflicts and better communication. We would also like to thank the people behind &lt;a href=&quot;https://github.com/airbnb/react-sketchapp&quot;&gt;React Sketchapp&lt;/a&gt;, which made this project possible in the first place.&lt;/p&gt;
&lt;p&gt;You can download the project &lt;a href=&quot;https://github.com/imgly/ui-design-system-generator&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;*&lt;strong&gt;*Thanks for reading! To stay in the loop, subscribe to our&lt;/strong&gt; &lt;a href=&quot;https://photoeditorsdk.us13.list-manage.com/subscribe?u=dc9f652839dbb620d14d6d28d&amp;#x26;id=04a306e4b2&quot;&gt;&lt;strong&gt;Newsletter&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;.**&lt;/strong&gt;&lt;/p&gt;</content:encoded><dc:creator>Ludwig</dc:creator><media:content url="https://blog.img.ly/2020/04/image-45.png" medium="image"/><category>Sketch</category><category>Design Systems</category><category>Design Teams</category><category>Style Guides</category><category>Design</category><category>Insights</category></item><item><title>Designing a Photo Editor</title><link>https://img.ly/blog/designing-a-photo-editor-42c9ae750783/</link><guid isPermaLink="true">https://img.ly/blog/designing-a-photo-editor-42c9ae750783/</guid><pubDate>Mon, 10 Apr 2017 12:30:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;part-1-design-as-a-team&quot;&gt;Part 1: Design as a team&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;One designer on your team, in outright conviction that the current 2677FD can not be the right choice of blue, changes the color slightly to a more saturated 2676FB, unaware he again forgot to turn off flux. The next day Lisa is infuriated. The color she loved so much now looks terrible on her display. Aziz is furious. He was working on illustrations for the product website, nitpicking the right colors based on the original blue. Oh noes, what a mess…&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Heard or seen that before? Bear with me, you´re not alone: Even though we are just a small team of three designers, the journey we had redesigning our product, the &lt;a href=&quot;https://img.ly/products/photo-sdk&quot;&gt;PhotoEditor SDK&lt;/a&gt;, left us with numerous insights about design collaboration. Most of those lessons were learned the hard way and many of the following suggestions are techniques that matured over the last year. The methods discussed below can be applied to any team, be it two or fifty designers. So, whether your team also struggles with the inability of Sketch to allow for real collaboration or if you’re just curious about how we dealt with the struggle, read on my fellow designer!&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;final-147 product&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 2000px) 2000px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;2000&quot; height=&quot;1218&quot; src=&quot;https://img.ly/_astro/image-4_2s9801.webp&quot; srcset=&quot;/_astro/image-4_Z198ndm.webp 640w, /_astro/image-4_ZnEAi3.webp 750w, /_astro/image-4_1KTtlr.webp 828w, /_astro/image-4_Zz7Xgz.webp 1080w, /_astro/image-4_Z1iVSD3.webp 1280w, /_astro/image-4_Z1SddY2.webp 1668w, /_astro/image-4_2s9801.webp 2000w&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;use-style-guides-early-on&quot;&gt;Use style guides early on&lt;/h2&gt;
&lt;p&gt;Right after the first screen is considered finished, sit together as a team of designers and discuss colors (don’t let the developers get wind of it). Schedule the whole thing so you have enough time to get finished while the sun is still out. Otherwise you will look at the interface the next day and have a really hard time reading the ten percent opacity labels.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Small section of our Design System.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 1140px) 1140px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;1140&quot; height=&quot;920&quot; src=&quot;https://img.ly/_astro/image-5_1osUR2.webp&quot; srcset=&quot;/_astro/image-5_1Ds5hV.webp 640w, /_astro/image-5_1QkMsz.webp 750w, /_astro/image-5_2fdxFB.webp 828w, /_astro/image-5_Z1q47bs.webp 1080w, /_astro/image-5_1osUR2.webp 1140w&quot;&gt;&lt;/p&gt;
&lt;p&gt;The naming of colors/styles is crucial, they help to communicate with the developers and your fellow designers (we’ll get to that) and keeping a clean state of used styles.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Styles&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 176px) 176px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;176&quot; height=&quot;683&quot; src=&quot;https://img.ly/_astro/image-6_1EYTEv.webp&quot; srcset=&quot;/_astro/image-6_1EYTEv.webp 176w&quot;&gt;&lt;/p&gt;
&lt;p&gt;As you can see, naming styles with a predefined set of simple rules, facilitates finding the style you are searching for. Especially since the colors that come into question for the given element are right by your selection. The prefix indicates the type of color: &lt;strong&gt;s&lt;/strong&gt; for shadow, &lt;strong&gt;n&lt;/strong&gt; for neutral, &lt;strong&gt;p&lt;/strong&gt; for primary …&lt;/p&gt;
&lt;p&gt;Why start counting at 100? Sketch doesn’t order styles by their absolute value, thus 10 comes before 1. This also gives you the flexibility to define several color ranges for one color type.&lt;/p&gt;
&lt;p&gt;If your team defines their neutral colors in a dark spectrum, bright, neutral colors can then be defined as a detached unit by starting from the next hundreds.&lt;/p&gt;
&lt;h2 id=&quot;use-grids&quot;&gt;Use Grids&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;I am from a really cozy Bavarian village, miles away from any accumulation of at least 12 houses (at least it felt that way in my youth, where the fastest transport we could use was the new lawn mower from the neighbours). To visit my friends in the next village, walking across an area of meadows, cow shit and finally woodland was the fastest path to take. There was no real pathway so everyone took a slightly different route to uber between the villages, which was just fine during the summer. However, come winter, not so much.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Every year it took us a few weeks, a lot wet socks and thus angry mom’s, to settle for one path. Ultimately, one of us took the courage to create the path of truth by preparing a trail with really tiny steps. By this time the snow usually hit the 30 cm mark.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I encountered a similar situation 10 years later. I started in a team that did give zero fucks about any type of layout or grid. Basically, every member took his own route. Switching out a specific component was often accompanied by the change of multiple components on the project since the perception of equal spacing between each one wasn’t given anymore.&lt;/p&gt;
&lt;p&gt;Nowadays, I use grids everywhere, no matter how small the project, alone or in a team — and if you don’t already, I encourage you to start now! It makes it easier to let your creation feel coherent, speeds up the design process and helps any possible future collaborator to navigate trough and comprehend your design philosophy.&lt;/p&gt;
&lt;p&gt;*&lt;strong&gt;*Tip**&lt;/strong&gt;: choose an easy to reach shortcut for &lt;strong&gt;show grid&lt;/strong&gt; and &lt;strong&gt;show rulers&lt;/strong&gt; or make a macro to show and hide both (mine is one of the mouse buttons).&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;PhotoEditor SDK grid system&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 1700px) 1700px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;1700&quot; height=&quot;1083&quot; src=&quot;https://img.ly/_astro/image-7_Z2hFL8A.webp&quot; srcset=&quot;/_astro/image-7_2vzbrV.webp 640w, /_astro/image-7_RGFzt.webp 750w, /_astro/image-7_ZnwpO1.webp 828w, /_astro/image-7_Z1XYw8G.webp 1080w, /_astro/image-7_52nrF.webp 1280w, /_astro/image-7_1mlc4U.webp 1668w, /_astro/image-7_Z2hFL8A.webp 1700w&quot;&gt;&lt;/p&gt;
&lt;p&gt;For the photo editor we chose a primary grid of 8pt and a secondary one of 4pt. All components are aligned on the primary grid and fonts on the secondary. Designing isolated components based on the grid helps to keep things evenly spaced, even if components get switched out or rearranged.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 240px) 240px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;240&quot; height=&quot;240&quot; src=&quot;https://img.ly/_astro/image-8_2vwDqS.webp&quot; srcset=&quot;/_astro/image-8_2vwDqS.webp 240w&quot;&gt;&lt;/p&gt;
&lt;p&gt;We used a lot of different icon dimensions across all platforms (iOS, Android, HTML5), to guarantee a coherent look across them. It was essential to specify a layout and predefined rules for them as well. I will discuss the creation of icons in a future post, where I will also delve into finding a style that is unique and fits your project. So stay tuned!&lt;/p&gt;
&lt;p&gt;If you haven’t started yet, create grids from the start on in every component of the project! It will probably get your feet wet at first, but your moms will be happy, I promise.&lt;/p&gt;
&lt;h2 id=&quot;keep-your-symbols-organized&quot;&gt;Keep your symbols organized&lt;/h2&gt;
&lt;p&gt;Keeping all the components ordered and close to each other is, again, great for consistency. After defining a component once in the page view, you will most likely return to the symbols page for future refinements. Now you can easily compare the component to every other used across the app. It will also make you slightly more liked by developers, something you should strive for as a designer at every time (to increase the chances of your next masonry grid not to get waived off as: “to time consuming to implement in the current release — and the release after”). Framing the cooperation between the two parties as smooth as possible is paramount at all steps of the product cycle.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Sample of our symbols page&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 1712px) 1712px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;1712&quot; height=&quot;1033&quot; src=&quot;https://img.ly/_astro/image-9_1vPF9O.webp&quot; srcset=&quot;/_astro/image-9_Z1XVScj.webp 640w, /_astro/image-9_Xxzlb.webp 750w, /_astro/image-9_Z1W4tOg.webp 828w, /_astro/image-9_lLQqV.webp 1080w, /_astro/image-9_21HnrO.webp 1280w, /_astro/image-9_LfCqH.webp 1668w, /_astro/image-9_1vPF9O.webp 1712w&quot;&gt;&lt;/p&gt;
&lt;p&gt;And also, defining grids on both, the parent artboard and the components. This way pixel imperfections and inconsistencies will be visible immediately.&lt;/p&gt;
&lt;p&gt;Also now, all elements inside a component share similar rules about placement and margins. They are easily interchangeable and allow for fast prototyping and iteration even at the final design stage.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Gridception&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 1298px) 1298px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;1298&quot; height=&quot;466&quot; src=&quot;https://img.ly/_astro/image-10_Z1FVycY.webp&quot; srcset=&quot;/_astro/image-10_16wwgv.webp 640w, /_astro/image-10_11Q90F.webp 750w, /_astro/image-10_2c6C8b.webp 828w, /_astro/image-10_VlQBi.webp 1080w, /_astro/image-10_1zCuf7.webp 1280w, /_astro/image-10_Z1FVycY.webp 1298w&quot;&gt;&lt;/p&gt;
&lt;p&gt;One of the hardest things to accomplish while working day in day out on a project like this was keeping everything neatly organized while more and more components were created and added from different parties. In the sprints before an upcoming release, we often were sloppy keeping the symbols page organized, which in turn did cost us a lot of time later on. As a solution, we created a plugin, that lints your symbols page on safe.&lt;/p&gt;
&lt;h2 id=&quot;whats-next&quot;&gt;What’s next?&lt;/h2&gt;
&lt;p&gt;The project is far from being finished and we will most likely change things here and there, building upon the methods discussed above. We are on an exciting journey crafting, designing, redefining a creative editor that is already used by hundreds of customers with millions of users. So expect more insights and learnings from our team in future articles!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Thanks for reading! To stay in the loop, subscribe to our &lt;a href=&quot;https://photoeditorsdk.us13.list-manage.com/subscribe?u=dc9f652839dbb620d14d6d28d&amp;#x26;id=04a306e4b2&quot;&gt;Newsletter&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;</content:encoded><dc:creator>Ludwig</dc:creator><media:content url="https://blog.img.ly/2020/04/image-47.png" medium="image"/><category>Design</category><category>Sketch</category><category>Teamwork</category><category>Development</category><category>Design Process</category><category>Insights</category></item></channel></rss>