Sorry

This feed does not validate.

In addition, interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: http://rss1.smashingmagazine.com/feed/

  1. <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
  2. <rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  3.  <channel>
  4.    <title>Articles on Smashing Magazine — For Web Designers And Developers</title>
  5.    <link>https://www.smashingmagazine.com/articles/</link>
  6.    <description>Recent content in Articles on Smashing Magazine — For Web Designers And Developers</description>
  7.    <generator>Hugo -- gohugo.io</generator>
  8.    <language>en-us</language>
  9.    <lastBuildDate>Mon, 23 Jul 2018 11:42:51 +0000</lastBuildDate>
  10.    
  11.      <item>
  12.        
  13.          
  14.          <author>Rachel Andrew</author>
  15.        
  16.        <title>Text Editing Tips And Tricks Roundup</title>
  17.        <link>https://www.smashingmagazine.com/2018/07/text-editing-tips-tricks/</link>
  18.        <pubDate>Mon, 23 Jul 2018 13:30:35 +0200</pubDate>
  19.        <guid>https://www.smashingmagazine.com/2018/07/text-editing-tips-tricks/</guid>
  20.        <description>We asked the Smashing Community for their favorite text editing tricks, shortcuts, and features that save them time. Here’s a roundup of what we’ve found quite useful along with a couple of other suggestions you may find handy.
  21. Favourite Keyboard Shortcuts Many of you have favorite keyboard shortcuts. Some of these will be editor or operating system specific, although in many cases you’ll be able to find a similar shortcut with the tools you are using.</description>
  22.        <content:encoded><![CDATA[
  23.          <html>
  24.            <head>
  25.              <meta charset="utf-8">
  26.              <link rel="canonical" href="https://www.smashingmagazine.com/2018/07/text-editing-tips-tricks/" />
  27.              <title>Text Editing Tips And Tricks Roundup</title>
  28.            </head>
  29.            <body>
  30.              <article>
  31.                <header>
  32.                  <h1>Text Editing Tips And Tricks Roundup</h1>
  33.                  
  34.                    
  35.                    <address>Rachel Andrew</address>
  36.                  
  37.                  <time datetime="2018-07-23T13:30:35&#43;02:00" class="op-published">2018-07-23T13:30:35+02:00</time>
  38.                  <time datetime="2018-07-23T11:42:51&#43;00:00" class="op-modified">2018-07-23T11:42:51+00:00</time>
  39.                </header>
  40.                
  41.  
  42. <p><a href="https://twitter.com/smashingmag/status/1016214282290245632">We asked the Smashing Community</a> for their favorite text editing tricks, shortcuts, and features that save them time. Here’s a roundup of what we’ve found quite useful along with a couple of other suggestions you may find handy.</p>
  43.  
  44. <h3 id="favourite-keyboard-shortcuts">Favourite Keyboard Shortcuts</h3>
  45.  
  46. <p>Many of you have favorite keyboard shortcuts. Some of these will be editor or operating system specific, although in many cases you’ll be able to find a similar shortcut with the tools you are using. I’ve rounded up a few from the community below.</p>
  47.  
  48. <p>Ste Grainer shared <a href="https://twitter.com/stegrainer/status/1016263441634484224">a tip about the movement and selection shortcuts</a>:</p>
  49.  
  50. <blockquote>The basic movement/selection shortcuts that many don’t know about:<br /><br />Hold <kbd>Cmd</kbd> + <kbd>Arrow Key</kbd> to move to the beginning/end of a line or top/bottom of a document.<br /><br />Hold <kbd>Opt</kbd> + <kbd>Arrow Key</kbd> to move word to word horizontally and block to block vertically.<br /><br />Shift to select while doing those.</blockquote>
  51.  
  52. <p>From <a href="https://twitter.com/ThisIsJoFrank/status/1020609515115474944">Jo Frank</a>:</p>
  53.  
  54. <blockquote>Select all occurences of current selection (<kbd>Ctrl</kbd> + <kbd>SHIFT</kbd> + <kbd>L</kbd> in VSCode) and duplicate line/selection which I set up as <kbd>Ctrl</kbd> + <kbd>D</kbd>.</blockquote>
  55.  
  56. <p><a href="https://twitter.com/loriskumo/status/1016215865291935744">Loris Gillet</a> shared a few favorite shortcuts for hopping around or deleting text:</p>
  57.  
  58. <blockquote><kbd>⌥</kbd> + <kbd>forward/back arrows</kbd> allows to jump to the next word instead of the next letter<br /><kbd>⌥</kbd> + <kbd>up/down arrows</kbd> allows to jump to the beginning/end of the paragraph<br /><kbd>⌥</kbd> + <kbd>Backspace</kbd> deletes the whole word instead of letters by letters.</p></blockquote>
  59.  
  60. <p>Many of the suggested tips came from web developers &mdash; tips for the editors they used most frequently. We also received suggestions for Android Studio from <a href="https://twitter.com/mahernabeell/status/1016234135772368896">Maher Nabeel</a>:</p>
  61.  
  62. <blockquote>In Android Studio:<br />
  63. <ul>
  64. <li><kbd>Ctrl</kbd> + <kbd>D</kbd> &mdash; Duplicate line</li>
  65. <li><kbd>Ctrl</kbd> + <kbd>Y</kbd> &mdash; Delete line</li>
  66. <li><kbd>Ctrl</kbd> + <kbd>W</kbd> &mdash; Select block</li>
  67. <li><kbd>Ctrl</kbd> + <kbd>O</kbd> &mdash; Override methods</li>
  68. <li><kbd>Ctrl</kbd> + <kbd>ALT</kbd> + <kbd>L</kbd> &mdash; Reformat code</li>
  69. </ul></blockquote>
  70.  
  71.  
  72.  
  73. <aside class="product-panel product-panel__tilted product-panel--book" data-audience="non-subscriber">
  74.    <div class="container product-panel--book__container">
  75.      <div class="panel__description panel__description--book">
  76.    <p>Getting workflow <em>just</em> right ain’t an easy task. So are proper estimates. Or alignment among different departments. That’s why we’ve set up <strong>“this-is-how-I-work”-sessions</strong> — with smart cookies sharing what works well for them. A part of the <a href="http://smashed.by/workflowpanelmembership">Smashing Membership</a>, of course.</p>
  77.      <a href="http://smashed.by/workflowpanelmembership" class="btn btn--green btn--large">
  78.        Explore features&nbsp;→
  79.      </a>
  80.      </div>
  81.      <div class="panel__image panel__image--book">
  82.        <a href="http://smashed.by/workflowpanelmembership" class="books__book__image">
  83.        <div class="books__book__img">
  84.          <img src="https://www.smashingmagazine.com/images/smashing-cat/smashing-tv-box-cat.svg" alt="Smashing TV, with live sessions for professional designers and developers." width="310" height="400">
  85.        </div>
  86.      </a>
  87.      </div>
  88.    </div>
  89.  </aside>
  90.  
  91.  
  92.  
  93.  
  94. <h3 id="editor-shortcut-cheatsheets">Editor Shortcut Cheatsheets</h3>
  95.  
  96. <p>As we can see from the tips already posted, learning the keyboard shortcuts for your editor saves a lot of time. It is always worth taking a look at what is available for your editor, as learning a few of these shortcuts can save a lot of typing over the course of a day writing code.</p>
  97.  
  98. <p>On Twitter, <a href="https://twitter.com/tobomedia">Tobin Saunders</a> recommended the <a href="https://gist.github.com/chrissimpkins/5bf5686bae86b8129bee">Atom Editor Cheat Sheet</a> which is a detailed list of shortcuts for Atom. I also took a look at what was available for other frequently used editors.</p>
  99.  
  100. <h4 id="visual-studio-code">Visual Studio Code</h4>
  101.  
  102. <p>The VS Code website has a number of downloadable cheatsheets in PDF format, if you find it useful to keep a cheatsheet printed out on your desk.</p>
  103.  
  104. <ul>
  105. <li><a href="https://code.visualstudio.com/shortcuts/keyboard-shortcuts-windows.pdf">Windows</a></li>
  106. <li><a href="https://code.visualstudio.com/shortcuts/keyboard-shortcuts-macos.pdf">Mac</a></li>
  107. <li><a href="https://code.visualstudio.com/shortcuts/keyboard-shortcuts-linux.pdf">Linux</a></li>
  108. </ul>
  109.  
  110. <p><a href="https://twitter.com/codebycoffee">Joel Reis</a> noted that if you are switching to VS Code from Sublime Text, Atom, Vim or Visual Studio, then you can <a href="https://code.visualstudio.com/docs/getstarted/keybindings#_keymap-extensions">download the keymap extensions</a>. This means that you can maintain the keyboard shortcuts from your previous editor. This tip was also noted on Smashing Magazine earlier this year when Burke Holland shared with us some of the things that you might be surprised to find that VS Code can do, in his article “<a href="/2018/01/visual-studio-code/">Visual Studio Code Can Do That?</a>”</p>
  111.  
  112. <h4 id="sublime-text">Sublime Text</h4>
  113.  
  114. <p>A good selection of Sublime Text 3 shortcuts for Windows, Mac, and Linux can be found <a href="https://www.weebpal.com/blog/sublime-text-editor-keyboard-shortcut-cheatsheet-win-osx-and-linux">here</a>.</p>
  115.  
  116. <p>We also have an article here on Smashing Magazine in which Jai Panda shares some of his favorite <a href="/2016/06/shortcuts-and-tips-for-improving-your-productivity-with-sublime-text/">Sublime Text Tips and Tricks</a>.</p>
  117.  
  118. <h3 id="customizing-your-environment">Customizing Your Environment</h3>
  119.  
  120. <p>Our keyboards and default computer settings are designed more for typing text than typing code. Some commenters have made changes to their defaults in order to make it faster to type the things they most often need to type.</p>
  121.  
  122. <p><a href="https://twitter.com/desugaring/status/1016217160304082944">Alex Semenikhine</a> made this suggestion:</p>
  123.  
  124. <blockquote>I minimize the number of times I have to hold <kbd>Shift</kbd> and press a button. If I make brackets (<code>(</code> <code>)</code>) far more often than I use <code>9</code> and <code>0</code>, I customize the keyboard to reflect that, my <kbd>9</kbd> is <code>(</code> and <kbd>Shift</kbd> + <kbd>9</kbd> is <code>9</code>, etc.</blockquote>
  125.  
  126. <p><a href="https://twitter.com/PaulvdDool/status/1016574822736977920">Paul van den Tool</a> sets his ‘Key Repeat’ and ‘Delay Until Repeat’ to their highest setting in order that his cursor just “flies across the screen when using the arrows.”</p>
  127.  
  128. <p><a href="https://twitter.com/jaronbarends/status/1016245803680223237">Jarón Barends</a> told us how he, “created <kbd>Alt</kbd> + <kbd>;</kbd> as a shortcut to insert a semicolon at the end of a current line.”</p>
  129.  
  130. <h3 id="using-emmet">Using Emmet</h3>
  131.  
  132. <p>A number of people mentioned the text expansion system of <a href="https://emmet.io/">Emmet</a>. If you hand-code a lot of HTML and CSS then Emmet can save you a great deal of typing time. When writing HTML, Emmet abbreviations will be familiar to anyone who understands CSS. For example, if you want to create an unordered list inside a <code>div</code> element, you could use the following:</p>
  133.  
  134. <pre><code class="language-html">div&#x3E;ul&#x3E;li
  135. </code></pre>
  136.  
  137. <p>Which would then turn into:</p>
  138.  
  139. <pre><code class="language-html">&#x3C;div&#x3E;
  140.  &#x3C;ul&#x3E;
  141.    &#x3C;li&#x3E;&#x3C;/li&#x3E;
  142.  &#x3C;/ul&#x3E;
  143. &#x3C;/div&#x3E;
  144. </code></pre>
  145.  
  146. <p>The abbreviation is exactly the selector that would select the <code>li</code> in CSS. A <code>div</code> with a <code>ul</code> as a direct child, and a <code>li</code> as a direct child of the <code>ul</code>. Take a look at the <a href="https://docs.emmet.io/cheat-sheet/">Emmet Cheat Sheet</a> for more examples.</p>
  147.  
  148. <p>Emmet is built into VS Code and <a href="https://emmet.io/download/">is available as a plugin</a> for many other editors.</p>
  149.  
  150. <div class="sponsors__wide-place"></div>
  151.  
  152.  
  153.  
  154.  
  155. <h3 id="use-a-clipboard-manager">Use A Clipboard Manager</h3>
  156.  
  157. <p><a href="https://twitter.com/ErikVerb">Erik Verbeek</a> suggests using a clipboard manager so that you can grab copied code from the history. He suggests using <a href="http://www.clipmenu.com/">ClipMenu</a> for OS X, which sadly seems to be discontinued.</p>
  158.  
  159. <p>Similar tools include:</p>
  160.  
  161. <ul>
  162. <li><a href="https://itunes.apple.com/us/app/copyclip-clipboard-history-manager/id595191960?mt=12">CopyClip</a> for MacOS</li>
  163. <li><a href="https://itunes.apple.com/in/app/pastebot/id1179623856">PasteBot</a> for MacOS</li>
  164. <li><a href="https://ditto-cp.sourceforge.io/">Ditto</a> for Windows</li>
  165. <li><a href="http://1clipboard.io/">1Clipboard</a> Windows and MacOS (currently in Beta)</li>
  166. </ul>
  167.  
  168. <p>Many editors also include a clipboard history for copy and paste actions within the editor. On Twitter, <a href="https://twitter.com/codevoodoo">@codevoodoo</a> noted that Webstorm had such a feature. There is a <a href="https://marketplace.visualstudio.com/items?itemName=Anjali.clipboard-history">Clipboard History extension for VS Code</a> and <a href="https://atom.io/packages/clipboard-history">a package for Atom</a>; Sublime Text has this built in, as this <a href="https://wesbos.com/sublime-text-clipboard-history/">tutorial on the Sublime Text Clipboard History explains</a>.</p>
  169.  
  170. <h3 id="a-collection-of-recommended-tools">A Collection Of Recommended Tools</h3>
  171.  
  172. <p>There were a few specific tools recommended in the comments, so here is a roundup of useful tools you may not have heard of.</p>
  173.  
  174. <h4 id="vim">Vim</h4>
  175.  
  176. <p>People who like Vim, really really like Vim. It certainly comes with a learning curve, however, if you are very keen on optimizing your keyboard editing then the time invested is likely to be worth it. As <a href="https://twitter.com/JessTelford/status/1020628236542152705">Jess Telford points out</a>, you can do things like type <code>13k</code> to move the cursor 13 lines up.</p>
  177.  
  178. <p>Take a look at the <a href="https://vim.rtorr.com/">Vim Cheat Sheet</a> for a list of commands. You can use Vim emulation in many other editors. The key mapping mentioned earlier for VS Code include mappings for Vim, and there is <a href="https://github.com/t9md/atom-vim-mode-plus">a plugin available for Atom</a> as well.</p>
  179.  
  180. <h4 id="prettier">Prettier</h4>
  181.  
  182. <p><a href="https://prettier.io/">Prettier</a> is an open-source <em>opinionated</em> code formatting tool. Using Prettier ensures that all code is formatted to a consistent style. This is incredibly helpful when working in a team as it means that a consistent style is enforced, without anyone really needing to think about it.</p>
  183.  
  184. <p><a href="https://prettier.io/docs/en/editors.html">There are downloads available for several editors</a>, in order that you can use Prettier within whichever environment you chose.</p>
  185.  
  186. <h4 id="autohotkey">AutoHotkey</h4>
  187.  
  188. <p>I had not heard of the tool <a href="https://autohotkey.com/">AutoHotkey</a> until <a href="https://twitter.com/Hobbesenero/status/1016241767581184005">this suggestion from @Hobbesenero</a>. AutoHotkey is an automation scripting language for Windows. Using the scripting language you can create shortcuts for common tasks, for example, to insert a template.</p>
  189.  
  190. <h4 id="converting-text-formats-with-pandoc">Converting Text Formats With Pandoc</h4>
  191.  
  192. <p>One of my favorite tools is <a href="https://pandoc.org/">Pandoc</a>. I use Pandoc when I need to convert one text format to another. One of the really useful things Pandoc can do is turn HTML or Markdown into EPUB format. I frequently do this in order to turn a set of notes into a file I can read using iBooks on my iPad. I do this in order to have an easily accessible set of notes for my workshops or to turn lengthy documentation into an easy to read offline format to read on an airplane.</p>
  193.  
  194. <p>Pandoc can convert from and to many different file formats. In addition to creating quick EPUB files, I also use it to convert copy from Word documents to Markdown or other useful formats. This can be very useful if you get some messy copy from a client that needs to be converted to enter into a CMS.</p>
  195.  
  196. <div class="sponsors__wide-place"></div>
  197.  
  198.  
  199.  
  200.  
  201. <h4 id="textexpander-and-typinator">TextExpander And Typinator</h4>
  202.  
  203. <p><a href="https://textexpander.com/features/">TextExpander</a> is available for MacOS and Windows and is a tool that helps you create snippets which can be inserted using keyboard shortcuts or common abbreviations. TextExpander was recommended by <a href="https://twitter.com/andersnoren/status/1020606391789203456">Anders Norén</a>. If you prefer a solution that isn’t a subscription service then you might like to give <a href="http://www.ergonis.com/products/typinator/">Typinator</a> a try.</p>
  204.  
  205. <p>These text expansion tools can be useful outside of writing code. If you often find yourself typing the same information in answer to emails or support requests, creating a shortcut to insert that text can quickly pay dividends in terms of time saved.</p>
  206.  
  207. <h4 id="textwasher">Textwasher</h4>
  208.  
  209. <p>Recommended on Facebook by Dennis Germundal, <a href="http://textwasher.com/">Textwasher</a> is a very simple tool for cleaning any formatting from text.</p>
  210.  
  211. <h3 id="add-your-suggestions-in-the-comments">Add Your Suggestions In The Comments</h3>
  212.  
  213. <p>There are a vast number of ways to enhance productivity in the tools we use every day, and it is also incredibly easy to completely overlook them. I hope that among these suggestions there will be something for you to try out. Or perhaps this will be a prompt for you to dig a little deeper into the documentation for your editors and other tools. I have certainly been inspired to do so.</p>
  214.  
  215. <p>If you missed the tweet and have some great tips to share, then add them to the comments. We’d love to hear them!</p>
  216.  
  217. <div class="signature">
  218.  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial">
  219.  <span>(il)</span>
  220. </div>
  221.  
  222.  
  223.              </article>
  224.            </body>
  225.          </html>
  226.        ]]></content:encoded>
  227.      </item>
  228.    
  229.      <item>
  230.        
  231.          
  232.          <author>The Smashing Editorial</author>
  233.        
  234.        <title>Webfonts And Performance: SmashingConf Videos</title>
  235.        <link>https://www.smashingmagazine.com/2018/07/smashingconf-videos-web-fonts-performance/</link>
  236.        <pubDate>Fri, 20 Jul 2018 14:35:35 +0200</pubDate>
  237.        <guid>https://www.smashingmagazine.com/2018/07/smashingconf-videos-web-fonts-performance/</guid>
  238.        <description>Webfonts are difficult to get right. An often overlooked and disruptive piece of web performance, webfonts can slow down your site and leave your visitors confused and agitated. No one wants agitated visitors.
  239. Webfonts Are ▢▢▢ Rocket Science Recorded at our special web performance themed SmashingConf in London, Zach Leatherman demystifies webfonts in order that we can avoid font-related performance issues. He takes us through a detailed guide to best practices when using webfonts, so you can use beautiful fonts without sacrificing performance.</description>
  240.        <content:encoded><![CDATA[
  241.          <html>
  242.            <head>
  243.              <meta charset="utf-8">
  244.              <link rel="canonical" href="https://www.smashingmagazine.com/2018/07/smashingconf-videos-web-fonts-performance/" />
  245.              <title>Webfonts And Performance: SmashingConf Videos</title>
  246.            </head>
  247.            <body>
  248.              <article>
  249.                <header>
  250.                  <h1>Webfonts And Performance: SmashingConf Videos</h1>
  251.                  
  252.                    
  253.                    <address>The Smashing Editorial</address>
  254.                  
  255.                  <time datetime="2018-07-20T14:35:35&#43;02:00" class="op-published">2018-07-20T14:35:35+02:00</time>
  256.                  <time datetime="2018-07-23T11:42:51&#43;00:00" class="op-modified">2018-07-23T11:42:51+00:00</time>
  257.                </header>
  258.                
  259.  
  260. <p>Webfonts are difficult to get right. An often overlooked and disruptive piece of web performance, webfonts can slow down your site and leave your visitors confused and agitated. No one wants agitated visitors.</p>
  261.  
  262. <h3 id="webfonts-are-rocket-science">Webfonts Are ▢▢▢ Rocket Science</h3>
  263.  
  264. <p>Recorded at our special web performance themed <a href="https://smashingconf.com/london-2018/">SmashingConf in London</a>, <strong>Zach Leatherman demystifies webfonts</strong> in order that we can avoid font-related performance issues. He takes us through a detailed guide to best practices when using webfonts, so you can use beautiful fonts without sacrificing performance. If you have ever asked, “<strong>What is the best way to load webfonts?</strong>” then you need to hear this talk. Zach breaks down the various approaches in a straightforward way, so you should feel able to make the best decisions for your own use of webfonts.</p>
  265.  
  266. <figure class="video-container"><iframe data-src="https://player.vimeo.com/video/254727749" width="600" height="480" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></figure>
  267.  
  268. <p>In addition to this video, you can take a look at Zach’s “<a href="https://www.zachleat.com/web/comprehensive-webfonts/#font-face">Comprehensive Guide To Font Loading Strategies</a>,” and subscribe to his newsletter <a href="https://www.fontspeed.io/">fontspeed.io</a>.</p>
  269.  
  270. <h3 id="fontastic-web-performance">Fontastic Web Performance</h3>
  271.  
  272. <p>Another great introduction to font loading was made by Monica Dinculescu at <a href="https://smashingconf.com/barcelona-2017/">SmashingConf Barcelona</a>. She spoke about which new platform features are here to help us deliver pretty (but also!) fast experiences to everyone.</p>
  273.  
  274. <figure class="video-container"><iframe data-src="https://player.vimeo.com/video/241111413" width="600" height="480" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></figure>
  275.  
  276. <p>In her talk, Monica also mentions the following resources &mdash; in addition to Zach’s work:</p>
  277.  
  278. <ul>
  279. <li>“<a href="https://helenvholmes.com/writing/type-is-your-right">Type is Your Right</a>,” by Helen Holmes</li>
  280. <li>“<a href="https://jakearchibald.com/2014/minimising-font-downloads/">Minimising Font Downloads</a>,” by Jake Archibald</li>
  281. <li><a href="https://www.typewithpride.com/">Type With Pride</a></li>
  282. <li><a href="https://www.axis-praxis.org/">Axis Praxis</a></li>
  283. <li><a href="http://fontastic.me/">Fontastic</a></li>
  284. </ul>
  285.  
  286. <p>We also find Monca’s <a href="https://meowni.ca/font-style-matcher/">Font Style Matcher</a> tool really useful, helping you find a font that matches your webfont closely to prevent a jarring shift between the sizes.</p>
  287.  
  288. <p>Enjoyed listening to these talks? There are many more  <a href="https://vimeo.com/search?q=smashingconf">SmashingConf videos on Vimeo</a>, and we’re getting ready for the upcoming <a href="https://smashingconf.com/ny-2018/">SmashingConf in New York</a> &mdash; see you there? ;-)</p>
  289.  
  290.  
  291.  
  292. <aside class="product-panel product-panel__tilted product-panel--book" data-audience="non-subscriber">
  293.    <div class="container product-panel--book__container">
  294.      <div class="panel__description panel__description--book">
  295.    <p>With so much happening on the web, what should we really pay attention to? At <a href="https://smashingconf.com/ny-2018/">SmashingConf New York 2018</a> 🇺🇸 we’ll explore everything from PWAs, font loading best practices, web performance and eCommerce UX optimization, to refactoring CSS, design workflows and convincing your clients. With Sarah Drasner, Dan Mall, Sara Soueidan, Jason Grigsby, and <a href="http://smashed.by/confpanelspeakers">many other speakers</a>. Oct <span class="small-caps">23–24</span>.</p>
  296.      <a href="http://smashed.by/confpanelspeakers" class="btn btn--green btn--large">
  297.        Check the speakers&nbsp;→
  298.      </a>
  299.      </div>
  300.      <div class="panel__image panel__image--book">
  301.        <a href="http://smashed.by/confpanelspeakers" class="books__book__image">
  302.        <div class="books__book__img">
  303.          <img src="https://res.cloudinary.com/indysigner/image/upload/v1529498640/sarah-drasner-opt_kaxhos.png" alt="SmashingConf New York 2018, with Dan Mall, Sara Soueidan, Sarah Drasner and many others." width="310" height="400">
  304.        </div>
  305.      </a>
  306.      </div>
  307.    </div>
  308.  </aside>
  309.  
  310.  
  311.  
  312.  
  313. <div class="signature">
  314.  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial">
  315.  <span>(ra, il)</span>
  316. </div>
  317.  
  318.  
  319.              </article>
  320.            </body>
  321.          </html>
  322.        ]]></content:encoded>
  323.      </item>
  324.    
  325.      <item>
  326.        
  327.          
  328.          <author>The Smashing Editorial</author>
  329.        
  330.        <title>Animating SVG Files With SVGator</title>
  331.        <link>https://www.smashingmagazine.com/2018/07/animating-svg-files-svgator/</link>
  332.        <pubDate>Thu, 19 Jul 2018 14:00:00 +0200</pubDate>
  333.        <guid>https://www.smashingmagazine.com/2018/07/animating-svg-files-svgator/</guid>
  334.        <description>(This article is kindly sponsored by SVGator.) Animated SVG files have become very popular. They are entirely scalable (because they are vectors), small and 100% code-based, which allows for so many transformations and tweaks. This, however, comes at a price: the steep learning curve for complete beginners.
  335. SVGator pledges to solve this problem, making it really easy for anyone to make simple animations using a familiar interface. It’s a web-based animation app that lets you import, animate and export SVG animations, and it eliminates the need for beginners to learn to code.</description>
  336.        <content:encoded><![CDATA[
  337.          <html>
  338.            <head>
  339.              <meta charset="utf-8">
  340.              <link rel="canonical" href="https://www.smashingmagazine.com/2018/07/animating-svg-files-svgator/" />
  341.              <title>Animating SVG Files With SVGator</title>
  342.            </head>
  343.            <body>
  344.              <article>
  345.                <header>
  346.                  <h1>Animating SVG Files With SVGator</h1>
  347.                  
  348.                    
  349.                    <address>The Smashing Editorial</address>
  350.                  
  351.                  <time datetime="2018-07-19T14:00:00&#43;02:00" class="op-published">2018-07-19T14:00:00+02:00</time>
  352.                  <time datetime="2018-07-23T11:42:51&#43;00:00" class="op-modified">2018-07-23T11:42:51+00:00</time>
  353.                </header>
  354.                
  355.  
  356. <p>(<em>This article is kindly sponsored by SVGator</em>.) Animated SVG files have become very popular. They are entirely scalable (because they are vectors), small and 100% code-based, which allows for so many transformations and tweaks. This, however, comes at a price: the steep learning curve for complete beginners.</p>
  357.  
  358. <p>SVGator pledges to solve this problem, making it really easy for anyone to make simple animations using a familiar interface. It’s a web-based animation app that lets you import, animate and export SVG animations, and it eliminates the need for beginners to learn to code. We tried it, and we really loved it.</p>
  359.  
  360. <h3 id="start-using-the-app">Start Using The App</h3>
  361.  
  362. <p>Head over to <a href="https://www.svgator.com">https://www.svgator.com</a> to start using the app. The sign-up process is pretty straightforward (figures 1 to 3): Click “Animate now”, then “Create account”, fill in your details, and you’re good to go.</p>
  363.  
  364.  
  365.  
  366.  
  367.  
  368.  
  369.  
  370.  
  371.  
  372.  
  373.  
  374. <figure >
  375. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/32e93fc0-0aa4-441d-9f3d-c37b18307fc8/svgator-fig1.png">
  376. <img
  377. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/32e93fc0-0aa4-441d-9f3d-c37b18307fc8/svgator-fig1.png 400w,
  378.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/32e93fc0-0aa4-441d-9f3d-c37b18307fc8/svgator-fig1.png 800w,
  379.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/32e93fc0-0aa4-441d-9f3d-c37b18307fc8/svgator-fig1.png 1200w,
  380.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/32e93fc0-0aa4-441d-9f3d-c37b18307fc8/svgator-fig1.png 1600w,
  381.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/32e93fc0-0aa4-441d-9f3d-c37b18307fc8/svgator-fig1.png 2000w"
  382. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/32e93fc0-0aa4-441d-9f3d-c37b18307fc8/svgator-fig1.png"
  383. sizes="100vw"
  384. alt="Figure 1"
  385. />
  386. </a>
  387.  
  388. <figcaption class="op-vertical-bottom">
  389. Fig. 1 - click “Animate now”. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/32e93fc0-0aa4-441d-9f3d-c37b18307fc8/svgator-fig1.png'>Large preview</a>)
  390. </figcaption>
  391. </figure>
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404. <figure >
  405. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c3479083-ff0c-4c56-ad6a-be16e5d39125/svgator-fig2.png">
  406. <img
  407. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c3479083-ff0c-4c56-ad6a-be16e5d39125/svgator-fig2.png 400w,
  408.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c3479083-ff0c-4c56-ad6a-be16e5d39125/svgator-fig2.png 800w,
  409.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c3479083-ff0c-4c56-ad6a-be16e5d39125/svgator-fig2.png 1200w,
  410.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c3479083-ff0c-4c56-ad6a-be16e5d39125/svgator-fig2.png 1600w,
  411.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c3479083-ff0c-4c56-ad6a-be16e5d39125/svgator-fig2.png 2000w"
  412. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c3479083-ff0c-4c56-ad6a-be16e5d39125/svgator-fig2.png"
  413. sizes="100vw"
  414. alt="Figure 2"
  415. />
  416. </a>
  417.  
  418. <figcaption class="op-vertical-bottom">
  419. Fig. 2 - Click 'Create account'. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c3479083-ff0c-4c56-ad6a-be16e5d39125/svgator-fig2.png'>Large preview</a>)
  420. </figcaption>
  421. </figure>
  422.  
  423.  
  424.  
  425.  
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433.  
  434. <figure >
  435. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3259438d-f737-4f84-b29c-05c465a7a5a5/svgator-fig3.png">
  436. <img
  437. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3259438d-f737-4f84-b29c-05c465a7a5a5/svgator-fig3.png 400w,
  438.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3259438d-f737-4f84-b29c-05c465a7a5a5/svgator-fig3.png 800w,
  439.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3259438d-f737-4f84-b29c-05c465a7a5a5/svgator-fig3.png 1200w,
  440.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3259438d-f737-4f84-b29c-05c465a7a5a5/svgator-fig3.png 1600w,
  441.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3259438d-f737-4f84-b29c-05c465a7a5a5/svgator-fig3.png 2000w"
  442. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3259438d-f737-4f84-b29c-05c465a7a5a5/svgator-fig3.png"
  443. sizes="100vw"
  444. alt="Figure 3"
  445. />
  446. </a>
  447.  
  448. <figcaption class="op-vertical-bottom">
  449. Fig 3. - Enter your details. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3259438d-f737-4f84-b29c-05c465a7a5a5/svgator-fig3.png'>Large preview</a>)
  450. </figcaption>
  451. </figure>
  452.  
  453.  
  454. <p>You’ll be taken directly to the sample “Stopwatch” project, which let’s you explore SVGator’s features. If you can’t find your way within the app, there’s a neat tutorial (figure 4) that will guide you in how to start using it: Import a static SVG, add elements to the timeline, and add animators to elements and keyframes to animate the four currently available properties (scale, opacity, position and rotation).</p>
  455.  
  456. <p>If you&rsquo;ve ever used an animation app, the user interface of SVGator should feel pretty familiar to you, and everything will probably feel in its right place. You only add elements that you’ll animate, which keeps the timeline clean and easy to scan.</p>
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468. <figure >
  469. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4641c5a2-c1db-41c0-b409-8b7e89ae512f/svgator-fig4.png">
  470. <img
  471. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4641c5a2-c1db-41c0-b409-8b7e89ae512f/svgator-fig4.png 400w,
  472.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4641c5a2-c1db-41c0-b409-8b7e89ae512f/svgator-fig4.png 800w,
  473.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4641c5a2-c1db-41c0-b409-8b7e89ae512f/svgator-fig4.png 1200w,
  474.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4641c5a2-c1db-41c0-b409-8b7e89ae512f/svgator-fig4.png 1600w,
  475.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4641c5a2-c1db-41c0-b409-8b7e89ae512f/svgator-fig4.png 2000w"
  476. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4641c5a2-c1db-41c0-b409-8b7e89ae512f/svgator-fig4.png"
  477. sizes="100vw"
  478. alt="Figure 4"
  479. />
  480. </a>
  481.  
  482. <figcaption class="op-vertical-bottom">
  483. Fig. 4 - Tutorial. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4641c5a2-c1db-41c0-b409-8b7e89ae512f/svgator-fig4.png'>Large preview</a>)
  484. </figcaption>
  485. </figure>
  486.  
  487.  
  488. <p>The starter animated clock project does a great job of introducing you to SVGator. You can always come back to it and use it as a reference.</p>
  489.  
  490. <p>Now that we have the basics out of the way, let’s jump into making our own animations!</p>
  491.  
  492. <h3 id="what-we-ll-make">What We’ll Make</h3>
  493.  
  494. <p>Check out this simple envelope icon we designed in Sketch (figure 5). It starts off closed, then it opens, and a letter pops up, followed by its contents. Then, the letter jumps out of the envelope and scales up to show the green checkbox.</p>
  495.  
  496. <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8988cffe-15c3-45f1-9fec-e2c3d24c79d7/svgator-fig5.gif"><img src="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8988cffe-15c3-45f1-9fec-e2c3d24c79d7/svgator-fig5.gif" width=“516" height="516" alt="Figure 5" /></a><figcaption>Fig.5 - The whole animation. (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8988cffe-15c3-45f1-9fec-e2c3d24c79d7/svgator-fig5.gif">Large preview</a>)
  497. </figcaption></figure>
  498.  
  499. <p>Here’s a summary of the process:</p>
  500.  
  501. <ul>
  502. <li>We’ll begin by making a simple storyboard to visualize our icon in its different states. While we’re at it, we’ll constantly sync up with SVGator and import elements of the icon in order to ensure that everything works as expected.</li>
  503. <li>Then, we’ll create a master copy of the icon, which will include every single element that we’ll need, and export it to SVGator. We might need to modify this master copy a lot throughout the process.</li>
  504. <li>Next, we’ll do the whole animation in a single SVGator project and export it, making sure it works as expected.</li>
  505. <li>Finally, we’ll include the icon in a simple precoded newsletter form to see how it looks in a real web environment. We’ll also see it resize for smaller resolutions.</li>
  506. <li>You can download everything <a href="http://files.smashingmagazine.com/svgator-demo.zip">here</a>.</li>
  507. </ul>
  508.  
  509. <p>Let’s get started!</p>
  510.  
  511. <h3 id="part-1-create-and-export-an-icon-from-sketch">Part 1: Create And Export An Icon From Sketch</h3>
  512.  
  513. <ul>
  514. <li>There are some differences between designing a simple SVG icon and designing an SVG icon that you plan to animate later. For starters, it’s important to note that it should be made up of fairly simple shapes, and you should plan your animations around simple transitions based on manipulating <strong>only</strong> the following: scale, rotation, position and opacity. These are the only four properties that SVGator currently let’s you animate, so if you’ve drafted something more complex, you won’t be able to do it.</li>
  515. </ul>
  516.  
  517. <h4 id="make-a-simple-storyboard-to-save-time">Make A Simple Storyboard To Save Time</h4>
  518.  
  519. <p><a href="https://en.wikipedia.org/wiki/Storyboard">Storyboarding</a> lets you visualize all of your transitions before you actually import them in SVGator. It also makes it easy to test transformations before committing to making the whole animation. It often happens that you’ll discover an issue with the illustration that should have been done differently in Sketch, and so you have to go back in and change it. Then, you need to reimport the whole file in SVGator and start with the animations from scratch. Because you wouldn’t want to do this every single time, storyboarding helps by forcing you to plan things in advance.</p>
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531. <figure class="article__image break-out">
  532. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3f740811-ec18-4fae-a3bf-93c0441e93d4/svgator-fig6.png">
  533. <img
  534. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3f740811-ec18-4fae-a3bf-93c0441e93d4/svgator-fig6.png 400w,
  535.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3f740811-ec18-4fae-a3bf-93c0441e93d4/svgator-fig6.png 800w,
  536.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3f740811-ec18-4fae-a3bf-93c0441e93d4/svgator-fig6.png 1200w,
  537.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3f740811-ec18-4fae-a3bf-93c0441e93d4/svgator-fig6.png 1600w,
  538.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3f740811-ec18-4fae-a3bf-93c0441e93d4/svgator-fig6.png 2000w"
  539. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3f740811-ec18-4fae-a3bf-93c0441e93d4/svgator-fig6.png"
  540. sizes="100vw"
  541. alt="Figure 6"
  542. />
  543. </a>
  544.  
  545. <figcaption class="op-vertical-bottom">
  546. Fig. 6 - Storyboard. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3f740811-ec18-4fae-a3bf-93c0441e93d4/svgator-fig6.png'>Large preview</a>)
  547. </figcaption>
  548. </figure>
  549.  
  550.  
  551. <p>For example, I initially planned for the envelope to stay more towards the bottom of the screen, but after importing it to SVGator and playing with the closing and opening, it was clear that it needs to stay in the middle while closed and slightly down when opened — a detail that was omitted in the static images.</p>
  552.  
  553. <p><strong>Tip:</strong> <em>Check out the storyboard in the Sketch file → Artboard “storyboard”</em>.</p>
  554.  
  555. <h4 id="layer-naming-and-organization">Layer Naming And Organization</h4>
  556.  
  557. <p>If you name your layers in Sketch, it will work as expected, and all names you’ve assigned in Sketch will be transferred to your project in SVGator. But if you use SVGO Compressor or a similar plugin to make the SVG files smaller, the names will <strong>disappear</strong>, and SVGator will replace them with ones based on the HTML tag, and you’ll end up with something similar to what’s shown in figure 7.</p>
  558.  
  559. <p><strong>Tip:</strong> <em>If you’re already using SVGO Compressor for other SVGs and don’t want to disable it, just drag and drop the file from the export preview area in Sketch to your desired location (figure 8). This will circumvent SVGO Compressor and export the SVG as is!</em></p>
  560.  
  561.  
  562.  
  563.  
  564.  
  565.  
  566.  
  567.  
  568.  
  569.  
  570.  
  571. <figure >
  572. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a441bcb5-0a4d-4f67-9b18-28d5bc2e49c8/svgator-fig7.png">
  573. <img
  574. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a441bcb5-0a4d-4f67-9b18-28d5bc2e49c8/svgator-fig7.png 400w,
  575.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a441bcb5-0a4d-4f67-9b18-28d5bc2e49c8/svgator-fig7.png 800w,
  576.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a441bcb5-0a4d-4f67-9b18-28d5bc2e49c8/svgator-fig7.png 1200w,
  577.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a441bcb5-0a4d-4f67-9b18-28d5bc2e49c8/svgator-fig7.png 1600w,
  578.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a441bcb5-0a4d-4f67-9b18-28d5bc2e49c8/svgator-fig7.png 2000w"
  579. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a441bcb5-0a4d-4f67-9b18-28d5bc2e49c8/svgator-fig7.png"
  580. sizes="100vw"
  581. alt="Figure 7"
  582. />
  583. </a>
  584.  
  585. <figcaption class="op-vertical-bottom">
  586. Fig. 7 - By using SVGO compressor, you’ll lose the names of your layers in SVGator. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a441bcb5-0a4d-4f67-9b18-28d5bc2e49c8/svgator-fig7.png'>Large preview</a>)
  587. </figcaption>
  588. </figure>
  589.  
  590.  
  591. <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/358e72d1-d06e-4ab7-b52e-2462704ff86c/svgator-fig8.gif"><img src="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/358e72d1-d06e-4ab7-b52e-2462704ff86c/svgator-fig8.gif" width=“741" height="438" alt="Figure 8" /></a><figcaption>Fig. 8 - Dragging and dropping the file from the export preview area in Sketch circumvents use of SVGO Compressor. (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/358e72d1-d06e-4ab7-b52e-2462704ff86c/svgator-fig8.gif">Large preview</a>)
  592. </figcaption></figure>
  593.  
  594. <p>Using groups is great, too, because the app recognizes them, and you can even simultaneously animate a layer and its parent group, adding a bit more complexity.</p>
  595.  
  596. <p>We haven’t encountered any limitation on the number of layers used, but then again, our icon is pretty simple.</p>
  597.  
  598. <h4 id="preparing-the-icon-for-animation">Preparing The Icon for Animation</h4>
  599.  
  600. <p>Now that we have the idea in a storyboard and we’ve prepared the master file, let’s export it in a way that we can make sense of in SVGator. Be sure to double-check the layer hierarchy. Think of how a certain layer will interact with another and where it should be placed in the Layers panel. In figure 9, you’ll see we’ve selected “top_opened” — that’s the opened top flap of the envelope. It should stand behind the white sheet of paper. And vice versa, “top_closed” is the closed flap of the envelope, and it should stay on top of everything; that’s why it’s the first layer in our “content” group.</p>
  601.  
  602. <p><strong>Tip:</strong> <em>You might be wondering why the whole top flap is made of two layers. It’s because we can’t rotate shapes or really transform them in 3D space using SVGator. We’re emulating this by squashing the first layer and then stretching the second one, thus creating the illusion of a 3D transformation</em>.</p>
  603.  
  604.  
  605.  
  606.  
  607.  
  608.  
  609.  
  610.  
  611.  
  612.  
  613.  
  614. <figure >
  615. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/df7abb68-ae05-494b-a35b-c0bfdd693c35/svgator-fig9.png">
  616. <img
  617. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/df7abb68-ae05-494b-a35b-c0bfdd693c35/svgator-fig9.png 400w,
  618.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/df7abb68-ae05-494b-a35b-c0bfdd693c35/svgator-fig9.png 800w,
  619.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/df7abb68-ae05-494b-a35b-c0bfdd693c35/svgator-fig9.png 1200w,
  620.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/df7abb68-ae05-494b-a35b-c0bfdd693c35/svgator-fig9.png 1600w,
  621.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/df7abb68-ae05-494b-a35b-c0bfdd693c35/svgator-fig9.png 2000w"
  622. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/df7abb68-ae05-494b-a35b-c0bfdd693c35/svgator-fig9.png"
  623. sizes="100vw"
  624. alt="Figure 9"
  625. />
  626. </a>
  627.  
  628. <figcaption class="op-vertical-bottom">
  629. Fig.9 - Top flap’s “fake 3D” opening effect. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/df7abb68-ae05-494b-a35b-c0bfdd693c35/svgator-fig9.png'>Large preview</a>)
  630. </figcaption>
  631. </figure>
  632.  
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644. <figure >
  645. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d6954b37-1959-4390-9bf0-7a1bfa115af2/svgator-fig10.png">
  646. <img
  647. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d6954b37-1959-4390-9bf0-7a1bfa115af2/svgator-fig10.png 400w,
  648.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d6954b37-1959-4390-9bf0-7a1bfa115af2/svgator-fig10.png 800w,
  649.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d6954b37-1959-4390-9bf0-7a1bfa115af2/svgator-fig10.png 1200w,
  650.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d6954b37-1959-4390-9bf0-7a1bfa115af2/svgator-fig10.png 1600w,
  651.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d6954b37-1959-4390-9bf0-7a1bfa115af2/svgator-fig10.png 2000w"
  652. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d6954b37-1959-4390-9bf0-7a1bfa115af2/svgator-fig10.png"
  653. sizes="100vw"
  654. alt="Figure 10"
  655. />
  656. </a>
  657.  
  658. <figcaption class="op-vertical-bottom">
  659. Fig.10 - Letter scaling “fake 3D” effect. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d6954b37-1959-4390-9bf0-7a1bfa115af2/svgator-fig10.png'>Large preview</a>)
  660. </figcaption>
  661. </figure>
  662.  
  663.  
  664. <p>If you look at our storyboard, the original idea was to have the sheet jump out of the envelope and scale up to eventually hide it. We’re going to achieve that by pushing the original sheet up, while having another hidden sheet (“sheet_top”) in front of the envelope (figure 10). The moment they meet at the topmost point, they’ll switch, and the front sheet will fall in front of the envelope. That’s a visual illusion, too — we can’t really move the sheet in z-space, so that’s one way to emulate it.</p>
  665.  
  666. <p>Taking all of this into account, we can now export the icon. It’s practically a single SVG that contains all of the elements we’ll need, stacked on top of each other in a useful way.</p>
  667.  
  668. <p><strong>Tip:</strong> <em>Be sure to have all elements marked visible (not hidden) before exporting. You can look at the file we’ve used as the export in the Sketch file → Artboard “export”</em>.</p>
  669.  
  670. <h3 id="part-2-animating-the-icon">Part 2: Animating The Icon</h3>
  671.  
  672. <p>Open SVGator and click “Import new” to start a new project (figure 11):</p>
  673.  
  674.  
  675.  
  676.  
  677.  
  678.  
  679.  
  680.  
  681.  
  682.  
  683.  
  684. <figure >
  685. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/51182df9-b18a-4ffd-ad19-d2fe630c8480/svgator-fig11.png">
  686. <img
  687. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/51182df9-b18a-4ffd-ad19-d2fe630c8480/svgator-fig11.png 400w,
  688.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/51182df9-b18a-4ffd-ad19-d2fe630c8480/svgator-fig11.png 800w,
  689.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/51182df9-b18a-4ffd-ad19-d2fe630c8480/svgator-fig11.png 1200w,
  690.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/51182df9-b18a-4ffd-ad19-d2fe630c8480/svgator-fig11.png 1600w,
  691.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/51182df9-b18a-4ffd-ad19-d2fe630c8480/svgator-fig11.png 2000w"
  692. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/51182df9-b18a-4ffd-ad19-d2fe630c8480/svgator-fig11.png"
  693. sizes="100vw"
  694. alt="Figure 11"
  695. />
  696. </a>
  697.  
  698. <figcaption class="op-vertical-bottom">
  699. Fig.11 - Starting a brand new project. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/51182df9-b18a-4ffd-ad19-d2fe630c8480/svgator-fig11.png'>Large preview</a>)
  700. </figcaption>
  701. </figure>
  702.  
  703.  
  704.  
  705.  
  706.  
  707.  
  708.  
  709.  
  710.  
  711.  
  712.  
  713.  
  714. <figure >
  715. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/39ad0886-5784-442f-818a-e5adfb6ae7b4/svgator-fig12.png">
  716. <img
  717. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/39ad0886-5784-442f-818a-e5adfb6ae7b4/svgator-fig12.png 400w,
  718.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/39ad0886-5784-442f-818a-e5adfb6ae7b4/svgator-fig12.png 800w,
  719.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/39ad0886-5784-442f-818a-e5adfb6ae7b4/svgator-fig12.png 1200w,
  720.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/39ad0886-5784-442f-818a-e5adfb6ae7b4/svgator-fig12.png 1600w,
  721.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/39ad0886-5784-442f-818a-e5adfb6ae7b4/svgator-fig12.png 2000w"
  722. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/39ad0886-5784-442f-818a-e5adfb6ae7b4/svgator-fig12.png"
  723. sizes="100vw"
  724. alt="Figure 12"
  725. />
  726. </a>
  727.  
  728. <figcaption class="op-vertical-bottom">
  729. Fig.12 - How the file looks initially. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/39ad0886-5784-442f-818a-e5adfb6ae7b4/svgator-fig12.png'>Large preview</a>)
  730. </figcaption>
  731. </figure>
  732.  
  733.  
  734. <p>If you’ve done everything correctly, you should see something like figure 12 and the short clip below (clip 1): all layers stacked on top of each other and ready for use. If, by chance, you don’t see everything, go back into Sketch and double-check that all layers are visible.</p>
  735.  
  736. <figure class="video-container"><iframe data-src="https://player.vimeo.com/video/280163400" width="600" height="480" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></figure>
  737.  
  738. <h4 id="animating-the-opening-of-the-envelope">Animating The Opening Of The Envelope</h4>
  739.  
  740. <p>We’ll start by importing some elements in the timeline. The way SVGator functions is that you’ll start with an empty timeline. You choose which elements to add from the “Elements” dropdown. You’ll have to manually check them using the eye icon to see which is the layer you’re looking for. Alternatively, you can click directly on the element on the screen, which will do the same.</p>
  741.  
  742. <figure class="video-container"><iframe data-src="https://player.vimeo.com/video/280163872" width="600" height="480" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></figure>
  743.  
  744. <p>We’re going to work on steps 1 and 2 from the storyboard, specifically on the flap’s opening. Let’s disable the layers we don’t need for now; we’ll come back to them later (see clip 1 to see how to do that). We should be left with just the basic envelope, which means you should disable the following layers: “sheet_top_content”, “sheet_top_bgr” and “sheet_bottom_bgr”.</p>
  745.  
  746. <p>Then, click on “top_opened”, and click the plus icon to the left, or double-click the element to add it to the timeline. Do the same for “top_closed”. Now you should have both layers in the timeline (figure 13).</p>
  747.  
  748. <p><strong>Tip:</strong> <em>If you want to fast-forward through the whole process, check out clip 2 (the actions might not be in the same order as described below)</em>.</p>
  749.  
  750.  
  751.  
  752.  
  753.  
  754.  
  755.  
  756.  
  757.  
  758.  
  759.  
  760. <figure >
  761. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f7de026f-1d78-44ce-a216-bf3fc1a019f4/svgator-fig13.png">
  762. <img
  763. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f7de026f-1d78-44ce-a216-bf3fc1a019f4/svgator-fig13.png 400w,
  764.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f7de026f-1d78-44ce-a216-bf3fc1a019f4/svgator-fig13.png 800w,
  765.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f7de026f-1d78-44ce-a216-bf3fc1a019f4/svgator-fig13.png 1200w,
  766.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f7de026f-1d78-44ce-a216-bf3fc1a019f4/svgator-fig13.png 1600w,
  767.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f7de026f-1d78-44ce-a216-bf3fc1a019f4/svgator-fig13.png 2000w"
  768. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f7de026f-1d78-44ce-a216-bf3fc1a019f4/svgator-fig13.png"
  769. sizes="100vw"
  770. alt="Figure 13"
  771. />
  772. </a>
  773.  
  774. <figcaption class="op-vertical-bottom">
  775. Fig. 13 - Both parts of the flap on the timeline. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f7de026f-1d78-44ce-a216-bf3fc1a019f4/svgator-fig13.png'>Large preview</a>)
  776. </figcaption>
  777. </figure>
  778.  
  779.  
  780. <ul>
  781. <li>Click on “top_closed” in the timeline and then on the “Animators” dropdown. Add a Scale animator.</li>
  782. <li>Add a Scale animator for “top_opened”, too.</li>
  783. <li>Then, click on the little target icon next to the layer name in the timeline. This is the transform-origin property, and it lets you set a pivot point for the element’s transformation. Let’s pick top-center for “top_closed”, because we going to shrink it upwards (figure 14), and then bottom-center for “top_opened”.</li>
  784. <li>Now, with “top_closed” selected, click on the plus sign on the Scale property to add a keyframe to the timeline. A yellow diamond shape will appear in the timeline. Let’s move to 0.4s and click the plus sign again (figure 15). That second keyframe will be our final point of transformation, when the flap has already opened. So, let’s make its Scale 100% 0%, leaving the first keyframe as 100% 100%.</li>
  785. <li>Turn on Ease-in for “top_closed” by clicking the little target icon next to the layer name (figure 16).</li>
  786. <li>While on 0.4s, add an Opacity keyframe for “top_closed” by double-clicking Opacity in the “Animators” menu and then clicking the plus sign next to the Opacity property in the timeline. Change it to 0%.</li>
  787. <li>Go a few frames back, and add 100% for Opacity. We’re doing that to avoid glitching in the top flap part.</li>
  788. </ul>
  789.  
  790. <p><strong>Tip:</strong> <em>Easing will make the motion look more natural, and because we’re designing an animation that emulates the movement of a single element, it’s natural to ease-in the beginning and ease-out the ending of the animation</em>.</p>
  791.  
  792.  
  793.  
  794.  
  795.  
  796.  
  797.  
  798.  
  799.  
  800.  
  801.  
  802. <figure >
  803. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/39112432-68e8-4aaa-93c2-76e5b4e02cba/svgator-fig14.png">
  804. <img
  805. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/39112432-68e8-4aaa-93c2-76e5b4e02cba/svgator-fig14.png 400w,
  806.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/39112432-68e8-4aaa-93c2-76e5b4e02cba/svgator-fig14.png 800w,
  807.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/39112432-68e8-4aaa-93c2-76e5b4e02cba/svgator-fig14.png 1200w,
  808.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/39112432-68e8-4aaa-93c2-76e5b4e02cba/svgator-fig14.png 1600w,
  809.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/39112432-68e8-4aaa-93c2-76e5b4e02cba/svgator-fig14.png 2000w"
  810. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/39112432-68e8-4aaa-93c2-76e5b4e02cba/svgator-fig14.png"
  811. sizes="100vw"
  812. alt="Figure 14"
  813. />
  814. </a>
  815.  
  816. <figcaption class="op-vertical-bottom">
  817. fig. 14 (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/39112432-68e8-4aaa-93c2-76e5b4e02cba/svgator-fig14.png'>Large preview</a>)
  818. </figcaption>
  819. </figure>
  820.  
  821.  
  822.  
  823.  
  824.  
  825.  
  826.  
  827.  
  828.  
  829.  
  830.  
  831.  
  832. <figure >
  833. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fec4fe83-5f35-4461-863e-2784a7c6e994/svgator-fig15.png">
  834. <img
  835. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fec4fe83-5f35-4461-863e-2784a7c6e994/svgator-fig15.png 400w,
  836.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fec4fe83-5f35-4461-863e-2784a7c6e994/svgator-fig15.png 800w,
  837.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fec4fe83-5f35-4461-863e-2784a7c6e994/svgator-fig15.png 1200w,
  838.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fec4fe83-5f35-4461-863e-2784a7c6e994/svgator-fig15.png 1600w,
  839.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fec4fe83-5f35-4461-863e-2784a7c6e994/svgator-fig15.png 2000w"
  840. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fec4fe83-5f35-4461-863e-2784a7c6e994/svgator-fig15.png"
  841. sizes="100vw"
  842. alt="Figure 15"
  843. />
  844. </a>
  845.  
  846. <figcaption class="op-vertical-bottom">
  847. fig. 15 (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fec4fe83-5f35-4461-863e-2784a7c6e994/svgator-fig15.png'>Large preview</a>)
  848. </figcaption>
  849. </figure>
  850.  
  851.  
  852.  
  853.  
  854.  
  855.  
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862. <figure >
  863. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8882eaa4-6081-4e41-a41b-23960dcc9f4d/svgator-fig16.png">
  864. <img
  865. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8882eaa4-6081-4e41-a41b-23960dcc9f4d/svgator-fig16.png 400w,
  866.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8882eaa4-6081-4e41-a41b-23960dcc9f4d/svgator-fig16.png 800w,
  867.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8882eaa4-6081-4e41-a41b-23960dcc9f4d/svgator-fig16.png 1200w,
  868.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8882eaa4-6081-4e41-a41b-23960dcc9f4d/svgator-fig16.png 1600w,
  869.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8882eaa4-6081-4e41-a41b-23960dcc9f4d/svgator-fig16.png 2000w"
  870. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8882eaa4-6081-4e41-a41b-23960dcc9f4d/svgator-fig16.png"
  871. sizes="100vw"
  872. alt="Figure 16"
  873. />
  874. </a>
  875.  
  876. <figcaption class="op-vertical-bottom">
  877. fig. 16 (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8882eaa4-6081-4e41-a41b-23960dcc9f4d/svgator-fig16.png'>Large preview</a>)
  878. </figcaption>
  879. </figure>
  880.  
  881.  
  882. <p>Now, let’s deal with the “top_opened” part, the ending of the animation. As we noted earlier, we’re doing this in two parts to emulate a 3D opening of the flap.</p>
  883.  
  884. <ul>
  885. <li>Grab the “top_opened” layer in the timeline, go to 0.4s in the timeline, and add a Scale keyframe, then another keyframe at 0.8s<em>.</em> Make the Scale at 0.4s be 100% 0% and let the 0.8s Scale value remain 100% 100%.</li>
  886. <li>Turn on Ease-out. Hit play to preview the animation.</li>
  887. </ul>
  888.  
  889. <p>Looks cool, but now the whole envelope needs to move down so that it fits within the circled background. Find a group called just “g” in the Elements, and add a Position animator to it. Add a position keyframe to 0.2s and then to 0.8s. Change the 0.8s value to 0 35. Add Ease-in-out for a smooth animation. And that’s it! We have successfully animated the envelope open and even made it move a bit downwards.</p>
  890.  
  891. <h4 id="adding-complexity-the-letter-pops-up">Adding Complexity: The Letter Pops Up</h4>
  892.  
  893. <p>Opening envelope is neat, but we can make it more interesting by introducing a sheet of paper. To do so, we’ll need to reveal the sheet layer, which we called “sheet_bottom_bgr”.</p>
  894.  
  895. <ul>
  896. <li>Click on the eye icon next to “sheet_bottom_bgr” in the “Elements” menu to make it visible. Add it to the timeline (double-click on it).</li>
  897. <li>Now, go somewhere in the middle of the animation — for example, 0.5s — and add a Position keyframe. Add another one after 0.4s. Select the first keyframe and offset the layer by 140 pixels on the y-axis (0 140).</li>
  898. <li>Add an Ease-in-out effect. Now we have a bit more interesting animation.</li>
  899. </ul>
  900.  
  901. <p><strong>Tip:</strong> <em>If you prefer to watch this in a video, check out clip 3 below</em>.</p>
  902.  
  903. <figure class="video-container"><iframe data-src="https://player.vimeo.com/video/280166780" width="600" height="480" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></figure>
  904.  
  905. <h4 id="even-more-complexity-animating-the-scaling-of-the-letter">Even More Complexity: Animating the Scaling of the Letter</h4>
  906.  
  907. <p>To take it further, let’s animate the letter popping out of the envelope, and let’s reveal some lines of text “written” in the letter. To do that, we’ll have to modify the previous animation a bit. (If you want to fast-forward, you could just watch the screencast and repeat it.)</p>
  908.  
  909. <figure class="video-container"><iframe data-src="https://player.vimeo.com/video/280167092" width="600" height="480" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></figure>
  910.  
  911. <ul>
  912. <li>Start by moving the last Position keyframe of “sheet_bottom_bgr” from 0.9s to 1.1s, and change it to 0 -190. What we’re doing with this is taking the sheet out of the envelope, so that we can quickly swap it with the other sheet we’ve already prepared.</li>
  913. <li>Go to 1.1s, turn on “sheet_top_content” and “sheet_top_bgr” and add them to the timeline with Position keyframes for both of 0 -190.</li>
  914. <li>Add keyframes at 1.5s and make them 0 40.</li>
  915. <li>Enable Ease-out for both.</li>
  916. </ul>
  917.  
  918. <p>This is the front sheet’s movement, and it should look like what you see in figure 17.</p>
  919.  
  920. <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/62f19460-4bac-45d2-89c9-1359506557b3/svgator-fig17.gif"><img src="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/62f19460-4bac-45d2-89c9-1359506557b3/svgator-fig17.gif" width=“546" height="516" alt="Figure 17" /></a><figcaption>Fig. 17 - The front sheet. (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/62f19460-4bac-45d2-89c9-1359506557b3/svgator-fig17.gif">Large preview</a>)
  921. </figcaption></figure>
  922.  
  923. <p>Now let’s fix the back sheet. It should disappear once the front shows up, and the front sheet should only appear after that.</p>
  924.  
  925. <ul>
  926. <li>Go to 1.1s, and select “sheet_bottom_bgr”. Add an Opacity animator and a keyframe. Set it to 0%.</li>
  927. <li>Move one frame backwards and set another Opacity keyframe, making it 100%.</li>
  928. </ul>
  929.  
  930. <p>Let’s make the respective changes to the front sheet, too:</p>
  931.  
  932. <ul>
  933. <li>Go to 1.1s, select “sheet_top_bgr” and add an Opacity keyframe of 100%.</li>
  934. <li>Move a frame back, and make the opacity 0%.</li>
  935. </ul>
  936.  
  937. <p>You should see something like figure 18 below. We can spot two problems here:</p>
  938.  
  939. <ul>
  940. <li>The content is displayed on top of the envelope before the transition happens.</li>
  941. <li>There’s a glitch when swapping the back and the front sheet.</li>
  942. </ul>
  943.  
  944. <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/56f9d3b7-0032-4caf-839c-81127380d301/svgator-fig18.gif"><img src="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/56f9d3b7-0032-4caf-839c-81127380d301/svgator-fig18.gif" width=518" height="536" alt="Figure 18" /></a><figcaption>Fig. 18 - Problems with the front content and glitching. (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/56f9d3b7-0032-4caf-839c-81127380d301/svgator-fig18.gif">Large preview</a>)
  945. </figcaption></figure>
  946.  
  947. <p>Let’s fix the first issue. Let’s hide the content and the checkbox and show it after the front sheet has appeared.</p>
  948.  
  949. <ul>
  950. <li>Go to 1.5s, select “sheet_top_content” and add an Opacity keyframe of 100%.</li>
  951. <li>Go a frame backwards and set another Opacity keyframe to 0%.</li>
  952. <li>Now, we’ll make it a bit more interesting by animating each layer within the front content.
  953.  
  954. <ul>
  955. <li>Go to 1.5s and search for the contents of “sheet_top_content” in the Elements menu.</li>
  956. <li>Add Opacity keyframes for all three layers within “sheet_top_content”.</li>
  957. <li>Make the Opacity for all three layers 0%.</li>
  958. <li>Move to 1.7s and set it to 100% for all three layers.</li>
  959. <li>Stay on 1.7s and select Combined-shape<em>,</em> and add a Rotate keyframe.</li>
  960. <li>Go to 1.5s and set the rotation to -45deg.</li>
  961. <li>Add Ease-in-out for the rotation.</li>
  962. </ul></li>
  963. </ul>
  964.  
  965. <p>The second issue is a glitch that happens because our back sheet disappears too early.</p>
  966.  
  967. <ul>
  968. <li>Go to 1.1s, select “sheet_bottom_bgr” and shift its Opacity keyframes by one frame forward. Here’s what you should be looking at (figure 19):</li>
  969. </ul>
  970.  
  971. <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/93ae7d6d-62db-402c-b2fb-5c03107503ec/svgator-fig19.gif"><img src="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/93ae7d6d-62db-402c-b2fb-5c03107503ec/svgator-fig19.gif" width=“484" height="514" alt="Figure 19" /></a><figcaption>Fig. 19 - Fixed glitch and content’s appearance. (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/93ae7d6d-62db-402c-b2fb-5c03107503ec/svgator-fig19.gif">Large preview</a>)
  972. </figcaption></figure>
  973.  
  974. <p>To make it more appealing, let’s scale the front sheet and content when it pops out of the envelope. We could scale the whole “top_sheet_content”, but that might result in some misalignments in some browsers. It’s best to scale each of its child layers on its own.</p>
  975.  
  976. <ul>
  977. <li>Go to 1.1s, select &ldquo;sheet_top_bgr” and add a Scale keyframe.
  978.  
  979. <ul>
  980. <li>Do the same for Combined-Shape, “line_top” and &ldquo;line_bottom”.</li>
  981. </ul></li>
  982. <li>Go to 1.5s and add another Scale keyframe with values of 120% 120%.
  983.  
  984. <ul>
  985. <li>Do the same for Combined-Shape, “line_top” and “line_bottom”.</li>
  986. </ul></li>
  987. <li>Enable Ease-in-out.</li>
  988. <li>Because we scaled it, we need to decrease the amount that the whole front sheet moves down. Go to 1.5s, select “sheet_top_content” and “sheet_top_bgr”, and change their position from 0 40 to 0 20.
  989. <br /></li>
  990. </ul>
  991.  
  992. <p><strong>Tip:</strong> <em>It’s OK to scale content in SVG because it’s all vector-based, so you won’t lose any quality</em>.</p>
  993.  
  994. <p>Here’s what it should look like now (figure 20):</p>
  995.  
  996. <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6fb65399-7c27-49cd-802e-3b10aed90e7c/svgator-fig20.gif"><img src="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6fb65399-7c27-49cd-802e-3b10aed90e7c/svgator-fig20.gif" width=“502" height="524" alt="Figure 20" /></a><figcaption>Fig. 20 - Scaled sheet. (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6fb65399-7c27-49cd-802e-3b10aed90e7c/svgator-fig20.gif">Large preview</a>)
  997. </figcaption></figure>
  998.  
  999. <p>All good, but the whole animation needs to loop back to the first frame. That’s because we want to reuse it. Our idea is to have the front sheet slide down and the envelope close and turn to its original position.</p>
  1000.  
  1001. <ul>
  1002. <li>Go to 2.8s, select “sheet_top_bgr” and add Position keyframes.
  1003.  
  1004. <ul>
  1005. <li>Do the same for &ldquo;sheet_top_content”.</li>
  1006. </ul></li>
  1007. <li>We need to add more time, because the default timeline is 3s. Click on the cog icon in the bottom-left corner above the timeline, change the duration to 00:04:50 (figure 21), and press “Enter”. We’ve now extended the timeline.</li>
  1008. <li>Move to 3.6s, add another pair of Position keyframes, and make their values 0 360. Change the easing for both layers’ Position to Ease-in-out.</li>
  1009. </ul>
  1010.  
  1011.  
  1012.  
  1013.  
  1014.  
  1015.  
  1016.  
  1017.  
  1018.  
  1019.  
  1020.  
  1021. <figure >
  1022. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/92d0f992-d735-46e1-8a60-9b7e0fff76ae/svgator-fig21.png">
  1023. <img
  1024. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/92d0f992-d735-46e1-8a60-9b7e0fff76ae/svgator-fig21.png 400w,
  1025.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/92d0f992-d735-46e1-8a60-9b7e0fff76ae/svgator-fig21.png 800w,
  1026.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/92d0f992-d735-46e1-8a60-9b7e0fff76ae/svgator-fig21.png 1200w,
  1027.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/92d0f992-d735-46e1-8a60-9b7e0fff76ae/svgator-fig21.png 1600w,
  1028.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/92d0f992-d735-46e1-8a60-9b7e0fff76ae/svgator-fig21.png 2000w"
  1029. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/92d0f992-d735-46e1-8a60-9b7e0fff76ae/svgator-fig21.png"
  1030. sizes="100vw"
  1031. alt="Figure 21"
  1032. />
  1033. </a>
  1034.  
  1035. <figcaption class="op-vertical-bottom">
  1036. Fig. 21 (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/92d0f992-d735-46e1-8a60-9b7e0fff76ae/svgator-fig21.png'>Large preview</a>)
  1037. </figcaption>
  1038. </figure>
  1039.  
  1040.  
  1041. <ul>
  1042. <li>At 1.3s, select “top_closed” and “top_opened”, and add Scale keyframes.</li>
  1043. <li>Add two more at 1.5s. For the second keyframes, “top_closed” should have 100% 100% and “top_opened” 100% 0%. We’ve successfully closed the flap behind the scaled sheet.</li>
  1044. <li>Now, all we have to do is move the envelope back to the center and make sure the top flap shows up again. Go to 3s and add a Position keyframe for “g”. Add another one at 3.4s, and make it 0 0. Go to 2.8s, and add an Opacity 0% keyframe for “top_closed”. Then, move to 3s and change the opacity to 100%.</li>
  1045. </ul>
  1046.  
  1047. <p>Congratulations! We have animated the whole icon. Here’s what it should look like (figure 22):</p>
  1048.  
  1049. <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/07553943-f7ac-4aa2-9060-91e51ed20c69/svgator-fig22.gif"><img src="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/07553943-f7ac-4aa2-9060-91e51ed20c69/svgator-fig22.gif" width=494" height="514" alt="Figure 22" /></a><figcaption>Fig. 22 - Finished animation. (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/07553943-f7ac-4aa2-9060-91e51ed20c69/svgator-fig22.gif">Large preview</a>)
  1050. </figcaption></figure>
  1051.  
  1052. <h3 id="part-3-implementing-the-exported-animation-in-a-real-web-environment">Part 3: Implementing The Exported Animation In A Real Web Environment</h3>
  1053.  
  1054. <p>Let’s place the icon in a real environment. We’ve coded a simple newsletter form and included the icon there. You can export the icon from SVGator by clicking “Export SVG”.</p>
  1055.  
  1056. <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6080beb0-d068-40ca-8d24-cfb6114e627e/svgator-fig23.gif"><img src="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6080beb0-d068-40ca-8d24-cfb6114e627e/svgator-fig23.gif" width=“888" height="218" alt="Figure 23" /></a><figcaption>Fig. 23 - Simple newsletter form. (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6080beb0-d068-40ca-8d24-cfb6114e627e/svgator-fig23.gif">Large preview</a>)
  1057. </figcaption></figure>
  1058.  
  1059. <p>After you click “Subscribe”, a thank-you message is displayed, and the icon animation starts.</p>
  1060.  
  1061. <p>It works by having two SVG icons: The first one is a static one with just the first frame of the animation included, and the second is the animated one. You can find the static icon in the Sketch file → Artboard “export static”. We’ve included it as an inline SVG element within the code. We’ve also included the animated SVG inline, but hidden it by default. You can check out the code in the <a href="http://files.smashingmagazine.com/svgator-demo.zip">download</a>. When “Subscribe” receives a click, we hide the static SVG and show the animated one, which automatically starts.</p>
  1062.  
  1063. <p>A minor adjustment we made in the static SVG was to replace this line:</p>
  1064.  
  1065. <pre class="break-out"><code class="language-html">&lt;rect id="sheet_mask" fill="#E6E7EB" fill-rule="evenodd" x="0" y="162" width="384" height="131">&lt;/rect></code></pre>
  1066.  
  1067. <p>&hellip; with this:</p>
  1068.  
  1069. <pre class="break-out"><code class="language-html">&lt;rect id="sheet_mask" fill-rule="evenodd" x="0" y="162" width="384" height="131">&lt;/rect></code></pre>
  1070.  
  1071. <p>This will remove the gray rectangle that is displayed incorrectly on top of all elements.</p>
  1072.  
  1073. <p>This example also shows just how good SVGs are in responsive design: If you make the window smaller, the layout will rearrange, and the icon will enlarge with no loss of quality whatsoever.</p>
  1074.  
  1075. <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/96cee428-79ca-4103-9457-57280d99720b/svgator-fig24.gif"><img src="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/96cee428-79ca-4103-9457-57280d99720b/svgator-fig24.gif" width=“536" height="384" alt="Figure 24" /></a><figcaption>Fig. 24 - Responsive view. (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/96cee428-79ca-4103-9457-57280d99720b/svgator-fig24.gif">Large preview</a>)
  1076. </figcaption></figure>
  1077.  
  1078. <p><strong>Tip:</strong> <em>When we made the icon smaller, we found that it takes too much time for the sheet to get out of the canvas, so we had to go back and edit that particular timing a bit to make it shorter. We moved the last Position keyframes of “sheet_top_bgr” and “sheet_top_content” to 3.2s to make the movement faster</em>.</p>
  1079.  
  1080. <p>If you want, you can tweak the animation even after you’ve exported it, but it’s much easier to do this in SVGator, where you’ll have the convenient UI.</p>
  1081.  
  1082.  
  1083.  
  1084.  
  1085.  
  1086.  
  1087.  
  1088.  
  1089.  
  1090.  
  1091.  
  1092. <figure >
  1093. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/916b21d5-4407-443b-bd3c-538d6a43d8f3/svgator-fig25.png">
  1094. <img
  1095. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/916b21d5-4407-443b-bd3c-538d6a43d8f3/svgator-fig25.png 400w,
  1096.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/916b21d5-4407-443b-bd3c-538d6a43d8f3/svgator-fig25.png 800w,
  1097.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/916b21d5-4407-443b-bd3c-538d6a43d8f3/svgator-fig25.png 1200w,
  1098.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/916b21d5-4407-443b-bd3c-538d6a43d8f3/svgator-fig25.png 1600w,
  1099.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/916b21d5-4407-443b-bd3c-538d6a43d8f3/svgator-fig25.png 2000w"
  1100. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/916b21d5-4407-443b-bd3c-538d6a43d8f3/svgator-fig25.png"
  1101. sizes="100vw"
  1102. alt="Figure 25"
  1103. />
  1104. </a>
  1105.  
  1106. <figcaption class="op-vertical-bottom">
  1107. Fig. 25 - SVGator does the heavy lifting and calculations for you. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/916b21d5-4407-443b-bd3c-538d6a43d8f3/svgator-fig25.png'>Large preview</a>)
  1108. </figcaption>
  1109. </figure>
  1110.  
  1111.  
  1112. <h3 id="conclusion">Conclusion</h3>
  1113.  
  1114. <p>We’re pretty excited by tools such as SVGator, which really speed up the process when you’re making simple SVG animations. It’s easy to use and you can get a great-looking animation in no time.</p>
  1115.  
  1116. <ul>
  1117. <li>It’s not as powerful as Adobe After Effects, but it’s a lot more adaptive, and it exports everything in code, ready to use on the web. Comparing it to After Effects is apples and oranges, because both tools are so different.</li>
  1118. <li>When <strong>using SVGator for rapid explorations</strong>, beginners will see greater value in it, but that doesn’t mean that it’s targeted at them only. Advanced users can use the tool to brainstorm or quickly explore ideas without having to use a more complex tool. Because SVGator generates code, you can take it from there and customize anything the way you like. The only drawback is that the whole animation is placed within one timeline, which means that it’s basically one CSS animation, and everything happening inside has a different amount of delay before it fires up. This means you can’t currently fire events at certain steps of the animation, because everything is all-in-one CSS.</li>
  1119. <li>Comparing it to vanilla code is not fair either, because SVGator’s main purpose is to make SVG animation easier and faster. It’s clear that you can achieve more if you code the whole thing from scratch, but how much time would that take you?</li>
  1120. <li>One of SVGator’s strongest advantages is that it’s very beginner-friendly. Anyone can start using it, and the learning curve is close to none if you have experience with at least some design or animation software.</li>
  1121. <li>All users get a seven-day free trial once they create an account. All features are included, and once the trial is over, they can still download the animations from their &ldquo;My projects&rdquo; section. You can subscribe to the app monthly ($18 per month), quarterly ($45 per quarter) or annually ($144 per year).</li>
  1122. </ul>
  1123.  
  1124. <h4 id="further-reading-about-svgator">Further Reading About SVGator</h4>
  1125.  
  1126. <ul>
  1127. <li><a href="https://www.youtube.com/watch?v=EBghzfllGjw">How To Animate SVG Using SVGator</a> (video)</li>
  1128. <li><a href="https://twitter.com/SVGatorApp">SVGator’s Twitter</a> (contains many mini-tutorials and frequent updates about the app)</li>
  1129. <li><a href="https://www.svgator.com/faq">SVGator FAQ</a></li>
  1130. </ul>
  1131.  
  1132. <h4 id="further-reading-about-svg-animation-using-code">Further Reading About SVG Animation Using Code</h4>
  1133.  
  1134. <ul>
  1135. <li>“<a href="https://medium.com/@aniboaz/animate-svg-4fa7dd00e860">How I Stopped Worrying And Learned To Animate SVG</a>,” Boaz Lederer, Medium</li>
  1136. <li>“<a href="https://codyhouse.co/gem/animate-svg-icons-with-css-and-snap">How To Optimize SVG Code And Animate An SVG Icon Using CSS And Snap.svg Library</a>,” CodyHouse</li>
  1137. <li>“<a href="https://blog.prototypr.io/css-animations-for-non-developers-part-2-svgs-1f6713104764">CSS Animations For Non-Developers Part 2 — SVGs</a>,” Nicholas Kramer, Prototypr</li>
  1138. <li>“<a href="https://medium.com/@LewisMenelaws/how-to-create-beautiful-svg-animations-easily-610eb2690ac3">How to Create Beautiful SVG Animations Easily</a>,” Lewis Menelaws, Medium</li>
  1139. </ul>
  1140.  
  1141. <p><em>A special thanks to <a href="https://www.smashingmagazine.com/author/boyan-kostov/">Boyan Kostov</a> for helping us with this article &mdash; we appreciate your time and effort!</em></p>
  1142.  
  1143. <div class="signature">
  1144.  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial">
  1145.  <span>(ms, mb, ra, al, yk, il)</span>
  1146. </div>
  1147.  
  1148.  
  1149.              </article>
  1150.            </body>
  1151.          </html>
  1152.        ]]></content:encoded>
  1153.      </item>
  1154.    
  1155.      <item>
  1156.        
  1157.          
  1158.          <author>Myriam Jessier &amp; Stéphanie Walter</author>
  1159.        
  1160.        <title>Linkbuilding: The Citizen’s Field Guide</title>
  1161.        <link>https://www.smashingmagazine.com/2018/07/linkbuilding-the-citizens-field-guide/</link>
  1162.        <pubDate>Wed, 18 Jul 2018 14:00:07 +0200</pubDate>
  1163.        <guid>https://www.smashingmagazine.com/2018/07/linkbuilding-the-citizens-field-guide/</guid>
  1164.        <description>Before buying followers on Instagram was a common practice, before Russian trolls made fake news an Olympic sport, we had linkbuilding. Today, we still have linkbuilding, its just that you haven&#39;t noticed it &amp;mdash; or have you?
  1165. Welcome, to the Twilight Zone, dear folks. You are about to go through a linkbuilding crash course. This will help you preserve your website, detect potential problems in content or consider why you keep receiving strange emails from strangers wanting to get their links all over your content.</description>
  1166.        <content:encoded><![CDATA[
  1167.          <html>
  1168.            <head>
  1169.              <meta charset="utf-8">
  1170.              <link rel="canonical" href="https://www.smashingmagazine.com/2018/07/linkbuilding-the-citizens-field-guide/" />
  1171.              <title>Linkbuilding: The Citizen’s Field Guide</title>
  1172.            </head>
  1173.            <body>
  1174.              <article>
  1175.                <header>
  1176.                  <h1>Linkbuilding: The Citizen’s Field Guide</h1>
  1177.                  
  1178.                    
  1179.                    <address>Myriam Jessier &amp; Stéphanie Walter</address>
  1180.                  
  1181.                  <time datetime="2018-07-18T14:00:07&#43;02:00" class="op-published">2018-07-18T14:00:07+02:00</time>
  1182.                  <time datetime="2018-07-23T11:42:51&#43;00:00" class="op-modified">2018-07-23T11:42:51+00:00</time>
  1183.                </header>
  1184.                <p>Before buying followers on Instagram was a common practice, before Russian trolls made fake news an Olympic sport, we had linkbuilding. Today, we <em>still</em> have linkbuilding, its just that you haven't noticed it &mdash; or have you?</p>
  1185.  
  1186. <p>Welcome, to the Twilight Zone, dear folks. You are about to go through a linkbuilding crash course. This will help you preserve your website, detect potential problems in content or consider why you keep receiving strange emails from strangers wanting to get their links all over your content.</p>
  1187.  
  1188. <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d8d5e61f-9264-4a43-bb2a-df9703a7a910/05-linkbuilding-the-citizen-s-field-guide.gif"><img src="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d8d5e61f-9264-4a43-bb2a-df9703a7a910/05-linkbuilding-the-citizen-s-field-guide.gif" width="360" height="261" alt="Rod Serling in the Twilight Zone TV series." /></a><figcaption>Rod Serling in the Twilight Zone TV series.</figcaption></figure>
  1189.  
  1190. <p><strong>Note</strong>: <em>If you are a website owner, a marketer, a blogger, a social media specialist or a regular user of the internet (and everything else in between)...you should take the time to read this!</em></p>
  1191.  
  1192. <h3>What Is Linkbuilding?</h3>
  1193.  
  1194. <blockquote>Links are basically a popularity contest. Linkbuilding is the process of gaining links to your online content in order to boost your visibility in search engines.</blockquote>
  1195.  
  1196. <p>Through links, search engines can analyze popularity but also other vital metrics such as authority, spam, trust. Google uses links to establish which websites are popular with users, are trusted by users or are seen as spam by users.</p>
  1197.  
  1198.  
  1199.  
  1200.  <aside class="product-panel product-panel__tilted product-panel--book" data-audience="non-subscriber">
  1201.    <div class="container product-panel--book__container">
  1202.      <div class="panel__description panel__description--book">
  1203.    <p>Getting the process <em>just</em> right ain't an easy task. That's why we've set up <strong>'this-is-how-I-work'-sessions</strong> — with smart cookies sharing what works really well for them. A part of the <a href="http://smashed.by/casestudypanelmembership">Smashing Membership</a>, of course.</p>
  1204.      <a href="http://smashed.by/casestudypanelmembership" class="btn btn--green btn--large">
  1205.        Explore features&nbsp;→
  1206.      </a>
  1207.      </div>
  1208.      <div class="panel__image panel__image--book">
  1209.        <a href="http://smashed.by/casestudypanelmembership" class="books__book__image">
  1210.        <div class="books__book__img">
  1211.          <img src="https://www.smashingmagazine.com/images/smashing-cat/cat-scubadiving-panel.svg" alt="Smashing TV, with live sessions for professional designers and developers." width="310" height="400">
  1212.        </div>
  1213.      </a>
  1214.      </div>
  1215.    </div>
  1216.  </aside>
  1217.  
  1218.  
  1219.  
  1220.  
  1221. <h3>Key Signals That Influence The Value Of a Link</h3>
  1222.  
  1223. <p>You have the stock exchange, and then you have the link exchange. All links are not created equal. Some of you may get flooded with spammy requests while others are reading this article wondering why they've never heard of linkbuilding. Some websites are more valuable and thus more targeted than others by linkbuilding attempts. Here are some key metrics that help establish the value of a link:</p>
  1224.  
  1225. <h4>Global Popularity</h4>
  1226.  
  1227. <p>The more popular a website is, the more a link from that site will have value. Wikipedia or Huffington Post have a lot of websites pointing to them which is a signal for search engines that these websites are probably important or at least very popular. Here is an example of linkbuilders trying to sell links on well-known publications that may not be aware their platform is used to peddle paid links.</p>
  1228.  
  1229.  
  1230.  
  1231.  
  1232.  
  1233.  
  1234.  
  1235.  
  1236.  
  1237.  
  1238.  
  1239. <figure class="article__image break-out">
  1240. <img
  1241. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fd0739a7-68d2-4127-9771-6fc809966160/03-linkbuilding-the-citizen-s-field-guide.png 400w,
  1242.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fd0739a7-68d2-4127-9771-6fc809966160/03-linkbuilding-the-citizen-s-field-guide.png 800w,
  1243.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fd0739a7-68d2-4127-9771-6fc809966160/03-linkbuilding-the-citizen-s-field-guide.png 1200w,
  1244.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fd0739a7-68d2-4127-9771-6fc809966160/03-linkbuilding-the-citizen-s-field-guide.png 1600w,
  1245.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fd0739a7-68d2-4127-9771-6fc809966160/03-linkbuilding-the-citizen-s-field-guide.png 2000w"
  1246. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fd0739a7-68d2-4127-9771-6fc809966160/03-linkbuilding-the-citizen-s-field-guide.png"
  1247. sizes="100vw"
  1248. alt=""
  1249. />
  1250.  
  1251. <figcaption class="op-vertical-bottom">
  1252. <a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fd0739a7-68d2-4127-9771-6fc809966160/03-linkbuilding-the-citizen-s-field-guide.png'>Large preview</a>
  1253. </figcaption>
  1254. </figure>
  1255.  
  1256.  
  1257. <h4>Topical Or Local Popularity</h4>
  1258.  
  1259. <p>Links that are topic-specific and highly related to your subject matter are worth more than links from general or off-topic sites. A link from a dog training business pointing to an SEO training website (like the one I run) will have less value than if Smashing Magazine (a website recognized for its topical authority on the web) will. Which means that placing a link on "SEO training website" would have been an amazing opportunity for me.</p>
  1260.  
  1261. <h4>Placement In The Page</h4>
  1262.  
  1263. <p class="c-pre-sidenote--left">If a link is "editorially placed", meaning that it looks like something the author placed in the content naturally, then Google will give it more credibility. If the link is something someone with a shady profile shared in the comments, the impact won't be the same. The position of a link within a page is important. Most linkbuilders will always negotiate for a link at the beginning or in the middle of your main content. Links in footers and sidebars do not have the same value.<sup>1</sup</p><p class="c-sidenote c-sidenote--right"><sup>1</sup> “<a href="https://backlinko.com/link-building#chapter5">The Skinny On Black Hat Link Building</a>,” Link Building For SEO: The Definitive Guide (2018 Update), Backlinko</p>
  1264.  
  1265. <h4>Types Of Links Matter</h4>
  1266.  
  1267. <p>A text link tends to have more weight than an image link. Furthermore, most people forget to provide an ALT attribute for their images, which means that Google will have a hard time getting context regarding the link placed on the image. Links can also be placed in iframes.</p>
  1268.  
  1269. <h4>Anchor Text</h4>
  1270.  
  1271. <p>You know what would be an even better anchor than "SEO training website" for me? I would love to also push a local signal on top of a topical one with "SEO training in Montreal" Why is that better than placing a link on a random word like "platypus"? Well, because one of the strongest signals used by search engines is anchor text. What is anchor text? Anchor Text is the visible, clickable text in a hyperlink. For most of us, it's the blue text that's underlined, like the ones you see below. As you can see, Smashing Magazine has made it a mission to explain <a href="https://www.smashingmagazine.com/2012/06/links-should-never-say-click-here/">why links should never say "Click Here"</a>.</p>
  1272.  
  1273.  
  1274.  
  1275.  
  1276.  
  1277.  
  1278.  
  1279.  
  1280.  
  1281.  
  1282.  
  1283. <figure class="article__image break-out">
  1284. <img
  1285. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0f0306bf-f6da-4383-82b5-960f32d55dee/04-linkbuilding-the-citizen-s-field-guide.jpg 400w,
  1286.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0f0306bf-f6da-4383-82b5-960f32d55dee/04-linkbuilding-the-citizen-s-field-guide.jpg 800w,
  1287.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0f0306bf-f6da-4383-82b5-960f32d55dee/04-linkbuilding-the-citizen-s-field-guide.jpg 1200w,
  1288.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0f0306bf-f6da-4383-82b5-960f32d55dee/04-linkbuilding-the-citizen-s-field-guide.jpg 1600w,
  1289.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0f0306bf-f6da-4383-82b5-960f32d55dee/04-linkbuilding-the-citizen-s-field-guide.jpg 2000w"
  1290. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0f0306bf-f6da-4383-82b5-960f32d55dee/04-linkbuilding-the-citizen-s-field-guide.jpg"
  1291. sizes="100vw"
  1292. alt=""
  1293. />
  1294.  
  1295. <figcaption class="op-vertical-bottom">
  1296. <a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0f0306bf-f6da-4383-82b5-960f32d55dee/04-linkbuilding-the-citizen-s-field-guide.jpg'>Large preview</a>
  1297. </figcaption>
  1298. </figure>
  1299.  
  1300.  
  1301. <h4>Trust Score</h4>
  1302.  
  1303. <p>The internet is made up of a lot of spam. In order to stay relevant to users, search engines use systems that analyze link profiles and provide a trust score. Earning links from websites with a high Trust metric can boost your own scoring metric and impact your organic visibility. That's why most SEO experts will favor non-profit organizations, universities or government websites. Those websites benefit from great Trust Score normally. I call the trust factor a trust score because each SEO tool has its own nomenclature (TrustRank, TrustFlow, etc.). This is the Trust Score of Smashing Magazine:</p>
  1304.  
  1305.  
  1306.  
  1307.  
  1308.  
  1309.  
  1310.  
  1311.  
  1312.  
  1313.  
  1314.  
  1315. <figure class="article__image break-out">
  1316. <img
  1317. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e509d4c2-889e-444a-a21d-9892289467aa/majestic-seo-trust-flow-of-smashing-magazine.png 400w,
  1318.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e509d4c2-889e-444a-a21d-9892289467aa/majestic-seo-trust-flow-of-smashing-magazine.png 800w,
  1319.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e509d4c2-889e-444a-a21d-9892289467aa/majestic-seo-trust-flow-of-smashing-magazine.png 1200w,
  1320.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e509d4c2-889e-444a-a21d-9892289467aa/majestic-seo-trust-flow-of-smashing-magazine.png 1600w,
  1321.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e509d4c2-889e-444a-a21d-9892289467aa/majestic-seo-trust-flow-of-smashing-magazine.png 2000w"
  1322. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e509d4c2-889e-444a-a21d-9892289467aa/majestic-seo-trust-flow-of-smashing-magazine.png"
  1323. sizes="100vw"
  1324. alt=""
  1325. />
  1326.  
  1327. <figcaption class="op-vertical-bottom">
  1328. <a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e509d4c2-889e-444a-a21d-9892289467aa/majestic-seo-trust-flow-of-smashing-magazine.png'>Large preview</a>
  1329. </figcaption>
  1330. </figure>
  1331.  
  1332.  
  1333. <p>So of course, you can imagine that this makes Smashing Magazine a very desirable website to have a link on. This leads to hilarious situations like this comical email by a link builder trying to buy a link from me:</p>
  1334.  
  1335.  
  1336.  
  1337.  
  1338.  
  1339.  
  1340.  
  1341.  
  1342.  
  1343.  
  1344.  
  1345. <figure class="article__image break-out">
  1346. <img
  1347. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/56dc6b81-4b75-4213-a8fe-abd4286fd9d9/05-linkbuilding-the-citizen-s-field-guide.png 400w,
  1348.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/56dc6b81-4b75-4213-a8fe-abd4286fd9d9/05-linkbuilding-the-citizen-s-field-guide.png 800w,
  1349.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/56dc6b81-4b75-4213-a8fe-abd4286fd9d9/05-linkbuilding-the-citizen-s-field-guide.png 1200w,
  1350.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/56dc6b81-4b75-4213-a8fe-abd4286fd9d9/05-linkbuilding-the-citizen-s-field-guide.png 1600w,
  1351.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/56dc6b81-4b75-4213-a8fe-abd4286fd9d9/05-linkbuilding-the-citizen-s-field-guide.png 2000w"
  1352. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/56dc6b81-4b75-4213-a8fe-abd4286fd9d9/05-linkbuilding-the-citizen-s-field-guide.png"
  1353. sizes="100vw"
  1354. alt=""
  1355. />
  1356.  
  1357. <figcaption class="op-vertical-bottom">
  1358. <a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/56dc6b81-4b75-4213-a8fe-abd4286fd9d9/05-linkbuilding-the-citizen-s-field-guide.png'>Large preview</a>
  1359. </figcaption>
  1360. </figure>
  1361.  
  1362.  
  1363. <h4>Link Neighborhood</h4>
  1364.  
  1365. <p>The notion of a "link neighborhood" means that if a website is spammy and links to another website, Google will be suspicious that the other website is spammy as well. This is important because sometimes, websites are targeted by negative SEO attacks. One of the quickest ways to sabotage a competitor's organic visibility is to have a lot of spammy websites pointing to its website. This is where the notion of link neighborhood becomes incredibly important.</p>
  1366.  
  1367. <h4>Freshness And Pertinence</h4>
  1368.  
  1369. <p>Link signals tend to decay over time. That's why it's important to keep earning new links over time. This helps establish the pertinence of a website. But you have to be careful: If you keep earning links from hype websites that aren't necessarily trustworthy, your website could be seen as pertinent but not trustworthy. It's a fine balance between authority and pertinence.</p>
  1370.  
  1371. <h4>Social Sharing</h4>
  1372.  
  1373. <p>Search engines treat socially shared links differently than any other type of link. The SEO community is still debating how strong of a signal social links are.</p>
  1374.  
  1375. <h4>The Importance Of A Link</h4>
  1376.  
  1377. <p>Getting a link from a website that is considered a reputable and expert source of information is a highly valuable asset. Let's use this article to do some good and give a link to someone in Web that deserves it. Meet Nicolas Steenhout, a <a href="https://a11yrules.com/">great accessibility consultant in Montreal</a> doing great work. Bonjour Monsieur! I hope this link helps give your work more visibility!</p>
  1378.  
  1379. <h3>Common Linkbuilding Tactics</h3>
  1380.  
  1381. <p>Here is a quick recap of what happens to some of us on a daily basis:</p>
  1382.  
  1383. <ul>
  1384. <li>We receive some type of communication trying to get us to put things on our websites for strange reasons we don't understand.</li>
  1385. <li>Someone requests or demands, depending on how combative their writing style is, that we guest blog for free on platforms that we do not know, trust or like.</li>
  1386. <li>We get folks peddling SEO services. They use scare tactics to push you to pay them for their services.</li>
  1387. <li>Websites get hacked for links...or worse.</li>
  1388. </ul>
  1389.  
  1390. <p>Here are some of common linkbuilding tactics you should be aware of:</p>
  1391.  
  1392. <ul>
  1393. <li><strong>Broken linkbuilding</strong><br />If you notice a broken link in a quality website, you can email the owner and say what page the link is on and what could be a solid resource to replace the current webpage that's no longer available. Of course, the replacement you offer just so happens to be from your own website that you want to rank in search engines.</li>
  1394. <li><strong>Comment spam linkbuilding</strong><br />There is a reason why strange spammy comments keep trying to peddle certain products or websites - it's called linkbuilding.</li>
  1395. <li><strong>Negative SEO</strong><br />If you can't be first because you are the best, then buy a bunch of links to make your competitors go down in Google. That's basically what negative SEO is. Here is a <a href="https://www.myriamjessier.com/blog/nseo-stephanie-walter/">real life case of negative SEO</a> if you want to see how this can happen to any type of website owner, not just big startups or famous people.</li>
  1396. <li><strong>Sponsored content linkbuilding</strong><br />I have had many bloggers complain to me because they had been duped by agencies "buying" a sponsored article for a year on their blog. They discovered later on that what the company actually bought was a link that they could control.</li>
  1397. <li><strong>Hacking websites</strong><br />Oftentimes, websites will get hacked for SEO purposes. Because if you can't rank honestly, then parasite good websites to rank no matter what! That's the philosophy of some ruthless search engine optimization specialists. If you gain access to a website, you can place any link where you want, for as long as you want. As a website owner, it's important that you <strong>secure your website</strong> and make sure nothing strange is going on in your content. Want to see what a hacked website can look like? I recently had a case where a very legitimate website in the IT sector was hacked to host and promote a discount NBA jersey store. This is the what the website looks like:
  1398.  
  1399.  
  1400.  
  1401.  
  1402.  
  1403.  
  1404.  
  1405.  
  1406.  
  1407.  
  1408.  
  1409. <figure class="article__image break-out">
  1410. <img
  1411. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/91028a3f-141f-443f-8d87-702e6f0e2e25/ma-carriere-techno-home.png 400w,
  1412.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/91028a3f-141f-443f-8d87-702e6f0e2e25/ma-carriere-techno-home.png 800w,
  1413.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/91028a3f-141f-443f-8d87-702e6f0e2e25/ma-carriere-techno-home.png 1200w,
  1414.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/91028a3f-141f-443f-8d87-702e6f0e2e25/ma-carriere-techno-home.png 1600w,
  1415.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/91028a3f-141f-443f-8d87-702e6f0e2e25/ma-carriere-techno-home.png 2000w"
  1416. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/91028a3f-141f-443f-8d87-702e6f0e2e25/ma-carriere-techno-home.png"
  1417. sizes="100vw"
  1418. alt=""
  1419. />
  1420.  
  1421. <figcaption class="op-vertical-bottom">
  1422. <a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/91028a3f-141f-443f-8d87-702e6f0e2e25/ma-carriere-techno-home.png'>Large preview</a>
  1423. </figcaption>
  1424. </figure>
  1425.  
  1426.  
  1427. However, what they were not aware of was that the website had been hacked. Upon analyzing their incoming links, it was clear that this IT focused website was known for "cheap NBA jerseys" and "wholesale NBA jerseys" than anything else. I wondered why, and found a lot of pages were receiving links:
  1428.  
  1429.  
  1430.  
  1431.  
  1432.  
  1433.  
  1434.  
  1435.  
  1436.  
  1437.  
  1438.  
  1439. <figure class="article__image break-out">
  1440. <img
  1441. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d90a4329-026d-4bd1-b62d-31194f67e770/jerseys.png 400w,
  1442.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d90a4329-026d-4bd1-b62d-31194f67e770/jerseys.png 800w,
  1443.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d90a4329-026d-4bd1-b62d-31194f67e770/jerseys.png 1200w,
  1444.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d90a4329-026d-4bd1-b62d-31194f67e770/jerseys.png 1600w,
  1445.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d90a4329-026d-4bd1-b62d-31194f67e770/jerseys.png 2000w"
  1446. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d90a4329-026d-4bd1-b62d-31194f67e770/jerseys.png"
  1447. sizes="100vw"
  1448. alt=""
  1449. />
  1450.  
  1451. <figcaption class="op-vertical-bottom">
  1452. <a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d90a4329-026d-4bd1-b62d-31194f67e770/jerseys.png'>Large preview</a>
  1453. </figcaption>
  1454. </figure>
  1455.  
  1456.  
  1457. The wonderful developer team cleaned up the damage and made sure to patch any security breach they found. However, this specific hacker thrives in websites that have been hacked and are full of malware such as this one:
  1458.  
  1459.  
  1460.  
  1461.  
  1462.  
  1463.  
  1464.  
  1465.  
  1466.  
  1467.  
  1468.  
  1469. <figure class="article__image break-out">
  1470. <img
  1471. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3dfdc8c0-d8b3-4db0-91be-48aa0cfa87ff/ecommerce-nba-jersey-hack.png 400w,
  1472.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3dfdc8c0-d8b3-4db0-91be-48aa0cfa87ff/ecommerce-nba-jersey-hack.png 800w,
  1473.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3dfdc8c0-d8b3-4db0-91be-48aa0cfa87ff/ecommerce-nba-jersey-hack.png 1200w,
  1474.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3dfdc8c0-d8b3-4db0-91be-48aa0cfa87ff/ecommerce-nba-jersey-hack.png 1600w,
  1475.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3dfdc8c0-d8b3-4db0-91be-48aa0cfa87ff/ecommerce-nba-jersey-hack.png 2000w"
  1476. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3dfdc8c0-d8b3-4db0-91be-48aa0cfa87ff/ecommerce-nba-jersey-hack.png"
  1477. sizes="100vw"
  1478. alt=""
  1479. />
  1480.  
  1481. <figcaption class="op-vertical-bottom">
  1482. <a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3dfdc8c0-d8b3-4db0-91be-48aa0cfa87ff/ecommerce-nba-jersey-hack.png'>Large preview</a>
  1483. </figcaption>
  1484. </figure>
  1485. </li>
  1486. <li><strong>Link outreach</strong><br />If you get bombarded with emails asking you to review a product or add a link in your blog article, chances are that you have been targeted during a link outreach campaign. You can always decline or simply not answer this unsolicited email. On the flipside of the coin, if you get offers to place your links in some highly regarded publications, know that this is an offer the person is making you to place your links on certain website.</li>
  1487. <li><strong>Guest blogging</strong><br />If someone asks you to create an article on their platform, the often want free quality content with your notoriety to promote it in order to garner links. If on the other hand, someone offers you free content for your website, chances are that it is for linkbuilding purposes.</li>
  1488. <li><strong>PBN</strong><br />A <strong>P</strong>rivate <strong>B</strong>log <strong>N</strong>etwork is a network of websites with great SEO metrics used to build links to a main website in order to help it rank higher in search engines. It means that someone usually ranks multiple websites high in Google in order to use them to place links that will boost the visibility of a chosen site. Google does not appreciate PBN efforts or link exchange efforts and routinely penalizes networks of websites.</li>
  1489. <li><strong>Creating awesome content</strong><br />There are many linkbuilding tactics that push for the creation of tools, content or other types of media that is so good, so useful and so relevant that they will naturally garner links from other website owners. We won't detail them here but they usually work well because they provide something <strong>useful that deserves to be shared with others!</strong></li>
  1490. </ul>
  1491.  
  1492. <div class="sponsors__wide-place"></div>
  1493.  
  1494.  
  1495.  
  1496.  
  1497. <h3>The Hidden Survival Guide To Linkbuilding</h3>
  1498.  
  1499. <p>Read this part if you are a website owner, a UX, a customer, a visitor, a blogger, my friend Igor (hi Igor, please read this!) or anyone else using search engines regularly to find information. Let's get started by giving you access to the <a href="https://support.google.com/webmasters/answer/35769?hl=en">official Google guidelines</a> on the matter. Website guidelines vary from search engine to search engine. You can check each search engine's guidelines but oftentimes, the broader concepts of what qualifies as a good website in terms of SEO are the same.</p>
  1500.  
  1501. <h4>The Ugly Truth: Not All Linkbuilding Is Bad</h4>
  1502.  
  1503. <p>Google clearly disagrees with paying for links or selling links. However, keep this in mind: not all linkbuilding efforts are bad. Earlier in this article, I gave a shout out to a friend of mine because I know that it will help give his website some visibility in search engines. Offering a link is a way to show your support for a product, an article, a tool, a website, a person. It is a vote of confidence in their favor. If you go out of your way to do it, technically, that counts as linkbuilding. Linkbuilding is also a way to make money. Some website owners may leverage linkbuilding to earn money despite legal regulations and Google's guidelines.</p>
  1504.  
  1505. <h4>If You See Something, Say Something!</h4>
  1506.  
  1507. <p>You can signal bad links and anything strange going on that may be related to a hack, malware or even paid links to Google. You can <a href="https://support.google.com/webmasters/answer/93713?hl=en">report bad links</a> very easily. If you want to review the entire list of what constitutes a bad practices in Google's eyes, you can head on over to this <a href="https://support.google.com/webmasters/topic/6001971?hl=en&ref_topic=6001981">official documentation</a>.</p>
  1508.  
  1509. <h4>Make It Clear If You Accept Or Refuse Linkbuilding Offers</h4>
  1510.  
  1511. <p>If you are a blogger, make sure you are aware of your rights and responsibilities when it comes to linkbuilding efforts. Make sure to update your key pages to reflect your linkbuilding policy. This could be done in the about page, the services page if you offer services or the contact page.</p>
  1512.  
  1513. <p>Take the time to specify if you accept of refuse commercial or affiliate links in the content of a guest blog post for example. This will also help avoid nasty linkbuilding surprises in the future.</p>
  1514.  
  1515. <h4>Nofollow: You Can Have Sponsored Content And Still Respect The Guidelines!</h4>
  1516.  
  1517. <p>So what do you do if you realize that someone is using your website to place a link? Well, if this is something that was done legally, you can fix the situation by placing an attribute on your link that will signal to search engine bots not to follow the link. A nofollow link is a way to make sure that links from sponsored posts are not going against Google's guidelines. This type of link cancels the linkbuilding benefits as Google gives them no love because the nofollow tag in the code signals "do not take this link into account." Website owners and administrators should <a href="https://support.google.com/webmasters/answer/96569?hl=en">know how to make a link</a> into a nofollow link as it can be done quickly and easily.</p>
  1518.  
  1519. <p>This is what a nofollow link looks like in the code:</p>
  1520.  
  1521.  
  1522.  
  1523.  
  1524.  
  1525.  
  1526.  
  1527.  
  1528.  
  1529.  
  1530.  
  1531. <figure class="article__image break-out">
  1532. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7786efc2-2498-4310-98e0-49bdbc7bfa5d/nofollow-link-in-wikipedia.png">
  1533. <img
  1534. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7786efc2-2498-4310-98e0-49bdbc7bfa5d/nofollow-link-in-wikipedia.png 400w,
  1535.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7786efc2-2498-4310-98e0-49bdbc7bfa5d/nofollow-link-in-wikipedia.png 800w,
  1536.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7786efc2-2498-4310-98e0-49bdbc7bfa5d/nofollow-link-in-wikipedia.png 1200w,
  1537.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7786efc2-2498-4310-98e0-49bdbc7bfa5d/nofollow-link-in-wikipedia.png 1600w,
  1538.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7786efc2-2498-4310-98e0-49bdbc7bfa5d/nofollow-link-in-wikipedia.png 2000w"
  1539. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7786efc2-2498-4310-98e0-49bdbc7bfa5d/nofollow-link-in-wikipedia.png"
  1540. sizes="100vw"
  1541. alt=""
  1542. />
  1543. </a>
  1544.  
  1545. <figcaption class="op-vertical-bottom">
  1546. <a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7786efc2-2498-4310-98e0-49bdbc7bfa5d/nofollow-link-in-wikipedia.png'>Large preview</a>
  1547. </figcaption>
  1548. </figure>
  1549.  
  1550.  
  1551. <p>So, what do you do if you are asked for a link in exchange for a review?</p>
  1552.  
  1553. <p>This is the most common way most bloggers are approached in order to get links placed on their websites. Here are some guidelines for bloggers that <a href="https://webmasters.googleblog.com/2016/03/best-practices-for-bloggers-reviewing.html">receive free products in exchange for reviews</a>.</p>
  1554.  
  1555. <p>If you think your website is hacked for links, you must first secure your website and do a security audit. The second step would entail cleaning up the links and the third step includes submitting a <a href="https://support.google.com/webmasters/answer/2648487?hl=en">disavow file</a> to Google that signals any shady domains that may be pointing to you because of hacker activity.</p>
  1556.  
  1557. <h4>Red Flag #1 : You Start Seeing Your Organic Traffic Go Down</h4>
  1558.  
  1559. <p>If you haven't changed anything and you see your organic traffic go down, make sure it's not a link issue. You could have suffered an attack. We recommend you use the Google Search Console tool available to all website owners and administrators. You must validate that you own the website and then, you will be able to receive an alert if Google detects something is very wrong with your website. Careful, if something is wrong with your website, it could mean a penalty and cause a substantial organic traffic drop. To know more about the types of penalties and alerts Google Search Console provides, you can <a href="https://www.myriamjessier.com/blog/5-types-of-google-penalties/">read an article on this topic</a> or check the official documentation.</p>
  1560.  
  1561. <h4>Red Flag #2: Downloading A Premium Theme Or Plugin For Free</h4>
  1562.  
  1563. <p>This is a very underhanded technique to obtain links. Some individuals will pay for a premium theme or plugin or software and offer it for free on torrent websites or forums where free or hacked versions of premium products are made available. When someone downloads the theme and uses it on a website, the doctored version of theme is used to place links in the website. Oftentimes, the owners never notice that their website is hosting parasite links.</p>
  1564.  
  1565. <h4>Red Flag #3: You Start Getting Strange Feedback About Your Website Or See Strange Content Appear</h4>
  1566.  
  1567. <p>If your readers, customers, visitors or even Google Search Console start telling you about strange content or links showing up on your website, this means that it's time for an SEO audit and a security audit to assess the damage done to your website. Something tells me that Schneiters Gold did not plan on ever offering the BEST Online Viagra OFFERS...</p>
  1568.  
  1569.  
  1570.  
  1571.  
  1572.  
  1573.  
  1574.  
  1575.  
  1576.  
  1577.  
  1578.  
  1579. <figure class="article__image break-out">
  1580. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f3d5bb5b-f20f-4c68-b4de-379ab6fa2121/viagra-phama-hack.png">
  1581. <img
  1582. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f3d5bb5b-f20f-4c68-b4de-379ab6fa2121/viagra-phama-hack.png 400w,
  1583.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f3d5bb5b-f20f-4c68-b4de-379ab6fa2121/viagra-phama-hack.png 800w,
  1584.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f3d5bb5b-f20f-4c68-b4de-379ab6fa2121/viagra-phama-hack.png 1200w,
  1585.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f3d5bb5b-f20f-4c68-b4de-379ab6fa2121/viagra-phama-hack.png 1600w,
  1586.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f3d5bb5b-f20f-4c68-b4de-379ab6fa2121/viagra-phama-hack.png 2000w"
  1587. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f3d5bb5b-f20f-4c68-b4de-379ab6fa2121/viagra-phama-hack.png"
  1588. sizes="100vw"
  1589. alt=""
  1590. />
  1591. </a>
  1592.  
  1593. <figcaption class="op-vertical-bottom">
  1594. <a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f3d5bb5b-f20f-4c68-b4de-379ab6fa2121/viagra-phama-hack.png'>Large preview</a>
  1595. </figcaption>
  1596. </figure>
  1597.  
  1598.  
  1599. <h4>Red Flag #4: You Get A Google Search Console Warning</h4>
  1600.  
  1601. <p>If you get an email from the Google Search Console team telling you about some spam issues or other problems that cause you to break their guidelines, you should investigate immediately the source of the problem and fix the issue fast or you could risk a penalty.</p>
  1602.  
  1603. <h4>Red Flag #5: The Link Looks Like It Could Be A Hidden Affiliate Link Or A Redirect</h4>
  1604.  
  1605. <p>Always check the links before placing them. Click the links and see where they lead. You could be provided a link that looks like a high-quality content but instead, it points to a spammy page.</p>
  1606.  
  1607. <p>Make sure to ask if a link is an affiliate link. Affiliate links are links that contain information that helps track a sale back to the person who promoted the product. These affiliate partners get a cut each sale that is attributed to them. Companies like Amazon and Forever21 among others have affiliate programs. You do not want someone promoting a product purely for money and you do not want to lose the trust of search engines and human visitors.</p>
  1608.  
  1609. <div class="sponsors__wide-place"></div>
  1610.  
  1611.  
  1612.  
  1613.  
  1614. <h3>Advice For Linkbuilders, Growth Hackers And Anyone Looking to Gain More Visibility In Search Engines</h3>
  1615.  
  1616. <h5>Vet a website before getting in touch</h5>
  1617.  
  1618. <p>Go ahead, click on the link and check out the website before you do anything else. Otherwise, you will end up contacting your competitors, unrelated blogs, spammy websites, etc.</p>
  1619.  
  1620. <h5>Read the advertising page</h5>
  1621.  
  1622. <p>Most websites have a page, it can be the contact, advertise or about page, that lists the specs and guidelines to collaborate with the websites. Respect what's written on there! Do not bother folks that clearly said they do not want to be contacted for links. <strong>No, you are not the one that will make them change their minds. Yes, we're sure.</strong></p>
  1623.  
  1624. <h5>Avoid metric blindness</h5>
  1625.  
  1626. <p>My very good friend Igor, proud owner of Igor.io, gets contacted all the time by linkbuilding companies. Why? Because their website was once upon a time (before they removed their incredible archive of technical articles) had incredible metrics. For reference, Igor has a fully responsive, accessible website and it looks like this:</p>
  1627.  
  1628.  
  1629.  
  1630.  
  1631.  
  1632.  
  1633.  
  1634.  
  1635.  
  1636.  
  1637.  
  1638. <figure >
  1639. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ea85d880-49ae-44a3-aafd-f97f1692d8ed/06-linkbuilding-igors-weblog.png">
  1640. <img
  1641. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ea85d880-49ae-44a3-aafd-f97f1692d8ed/06-linkbuilding-igors-weblog.png 400w,
  1642.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ea85d880-49ae-44a3-aafd-f97f1692d8ed/06-linkbuilding-igors-weblog.png 800w,
  1643.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ea85d880-49ae-44a3-aafd-f97f1692d8ed/06-linkbuilding-igors-weblog.png 1200w,
  1644.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ea85d880-49ae-44a3-aafd-f97f1692d8ed/06-linkbuilding-igors-weblog.png 1600w,
  1645.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ea85d880-49ae-44a3-aafd-f97f1692d8ed/06-linkbuilding-igors-weblog.png 2000w"
  1646. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ea85d880-49ae-44a3-aafd-f97f1692d8ed/06-linkbuilding-igors-weblog.png"
  1647. sizes="100vw"
  1648. alt="igor.io"
  1649. />
  1650. </a>
  1651.  
  1652. <figcaption class="op-vertical-bottom">
  1653. <a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ea85d880-49ae-44a3-aafd-f97f1692d8ed/06-linkbuilding-igors-weblog.png'>Large preview</a>
  1654. </figcaption>
  1655. </figure>
  1656.  
  1657.  
  1658. <p>But Igor's weblog's metrics look like this (and they looked even more enticing to SEOs the last time I checked):</p>
  1659.  
  1660.  
  1661.  
  1662.  
  1663.  
  1664.  
  1665.  
  1666.  
  1667.  
  1668.  
  1669.  
  1670. <figure class="article__image break-out">
  1671. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0f325993-4f1a-4187-b64e-6bcd789ff04f/07-linkbuilding-the-citizen-s-field-guide.png">
  1672. <img
  1673. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0f325993-4f1a-4187-b64e-6bcd789ff04f/07-linkbuilding-the-citizen-s-field-guide.png 400w,
  1674.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0f325993-4f1a-4187-b64e-6bcd789ff04f/07-linkbuilding-the-citizen-s-field-guide.png 800w,
  1675.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0f325993-4f1a-4187-b64e-6bcd789ff04f/07-linkbuilding-the-citizen-s-field-guide.png 1200w,
  1676.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0f325993-4f1a-4187-b64e-6bcd789ff04f/07-linkbuilding-the-citizen-s-field-guide.png 1600w,
  1677.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0f325993-4f1a-4187-b64e-6bcd789ff04f/07-linkbuilding-the-citizen-s-field-guide.png 2000w"
  1678. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0f325993-4f1a-4187-b64e-6bcd789ff04f/07-linkbuilding-the-citizen-s-field-guide.png"
  1679. sizes="100vw"
  1680. alt=""
  1681. />
  1682. </a>
  1683.  
  1684. <figcaption class="op-vertical-bottom">
  1685. <a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0f325993-4f1a-4187-b64e-6bcd789ff04f/07-linkbuilding-the-citizen-s-field-guide.png'>Large preview</a>
  1686. </figcaption>
  1687. </figure>
  1688.  
  1689.  
  1690. <p>This meant that a lot of companies wanted to contact the owner of a website that had more than 1000 high-quality websites referring to it. But if they had bothered to check out Igor's website, they would have seen that nothing was on there. Back in the days, this website just read: <em>igor's weblog</em> and the archive was hidden in the code. You had to know where to look for it... or you would find it very easily if you happened to be a bot. That's why the metrics were the so high: only a bot and those in the know would discover and share Igor's content.</p>
  1691.  
  1692. <h5>Know who you are talking to</h5>
  1693.  
  1694. <p>I get emails telling me to ask my boss if the company can place a link on my website. Now, quick reminder, if you go on myriamjessier.com and contact me, the person with an email that contains the words myriam + jessier, chances are that you are talking to the owner herself, right? Which leads me to another point: write my name correctly please and do not address me as sir, or dear, or dear sir. This is a common issue that Stéphanie Walter has as half of the Internet doesn't seem to know <a href="https://the-pastry-box-project.net/stephanie-walter/2018-february-12">how to spell her name</a>.</p>
  1695.  
  1696.  
  1697.  
  1698.  
  1699.  
  1700.  
  1701.  
  1702.  
  1703.  
  1704.  
  1705.  
  1706. <figure >
  1707. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9fab39de-e602-4a32-a646-177ac33c6957/08-linkbuilding-the-citizen-s-field-guide.png">
  1708. <img
  1709. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9fab39de-e602-4a32-a646-177ac33c6957/08-linkbuilding-the-citizen-s-field-guide.png 400w,
  1710.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9fab39de-e602-4a32-a646-177ac33c6957/08-linkbuilding-the-citizen-s-field-guide.png 800w,
  1711.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9fab39de-e602-4a32-a646-177ac33c6957/08-linkbuilding-the-citizen-s-field-guide.png 1200w,
  1712.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9fab39de-e602-4a32-a646-177ac33c6957/08-linkbuilding-the-citizen-s-field-guide.png 1600w,
  1713.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9fab39de-e602-4a32-a646-177ac33c6957/08-linkbuilding-the-citizen-s-field-guide.png 2000w"
  1714. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9fab39de-e602-4a32-a646-177ac33c6957/08-linkbuilding-the-citizen-s-field-guide.png"
  1715. sizes="100vw"
  1716. alt=""
  1717. />
  1718. </a>
  1719.  
  1720. <figcaption class="op-vertical-bottom">
  1721. <a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9fab39de-e602-4a32-a646-177ac33c6957/08-linkbuilding-the-citizen-s-field-guide.png'>Large preview</a>
  1722. </figcaption>
  1723. </figure>
  1724.  
  1725.  
  1726. <h5>Not knowing or ignoring legal guidelines and Google's guidelines</h5>
  1727.  
  1728. <p>If you do not disclose why you are asking for a link and that there could be a risk to a website selling you a link, then you are not being transparent.</p>
  1729.  
  1730. <h5>Bonus Tip</h5>
  1731.  
  1732. <p>Don't reach out to experts who do what you do for a living. I receive linkbuilding offers (buying and selling) from other search engine optimization "specialists" all the time. If you found me on the web and are offering to sell me links because my website <em>isn't visible enough</em>, then maybe, just maybe, my SEO efforts are working no?</p>
  1733.  
  1734. <h3>Conclusion</h3>
  1735.  
  1736. <p>We hope that you learned a few things about linkbuilding. Here is a quick recap:</p>
  1737.  
  1738. <ul>
  1739. <li>There's money in the <a href="https://www.quora.com/What-is-the-origin-of-the-quote-Theres-always-money-in-the-banana-stand">banana stand</a> and in linkbuilding.</li>
  1740. <li>Not all links are equal, key metrics are : authority, freshness, placement, relevancy.</li>
  1741. <li>People will go to extremes to get links so if a “great deal” is offered to you, look for the hidden link in there!</li>
  1742. <li>Secure your website to avoid SEO problems. If you make it hard work for hackers, they will often give up and move on to an easier prey.</li>
  1743. <li>If you want to help someone out, make sure you give them a link with a good anchor! It really helps!</li>
  1744. </ul>
  1745.  
  1746. <div class="signature">
  1747.  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial">
  1748.  <span>(ra, yk, il)</span>
  1749. </div>
  1750.  
  1751.  
  1752.              </article>
  1753.            </body>
  1754.          </html>
  1755.        ]]></content:encoded>
  1756.      </item>
  1757.    
  1758.      <item>
  1759.        
  1760.          
  1761.          <author>Lyndon Cerejo</author>
  1762.        
  1763.        <title>So You Want to Persuade Users? Make Things Simple!</title>
  1764.        <link>https://www.smashingmagazine.com/2018/07/persuasion-user-experience-design/</link>
  1765.        <pubDate>Tue, 17 Jul 2018 16:15:38 +0200</pubDate>
  1766.        <guid>https://www.smashingmagazine.com/2018/07/persuasion-user-experience-design/</guid>
  1767.        <description>(This article is kindly sponsored by Adobe.) The persuasive design toolbox is filled with powerful tools based on psychology. These tools range from Cialdini’s set of six principles of persuasion to ten times that number of Persuasive Patterns. Presented with all these methods, it can be tempting to use all of them to cover all possible bases, using a shotgun approach, hoping that one will resonate with your target users.</description>
  1768.        <content:encoded><![CDATA[
  1769.          <html>
  1770.            <head>
  1771.              <meta charset="utf-8">
  1772.              <link rel="canonical" href="https://www.smashingmagazine.com/2018/07/persuasion-user-experience-design/" />
  1773.              <title>So You Want to Persuade Users? Make Things Simple!</title>
  1774.            </head>
  1775.            <body>
  1776.              <article>
  1777.                <header>
  1778.                  <h1>So You Want to Persuade Users? Make Things Simple!</h1>
  1779.                  
  1780.                    
  1781.                    <address>Lyndon Cerejo</address>
  1782.                  
  1783.                  <time datetime="2018-07-17T16:15:38&#43;02:00" class="op-published">2018-07-17T16:15:38+02:00</time>
  1784.                  <time datetime="2018-07-23T11:42:51&#43;00:00" class="op-modified">2018-07-23T11:42:51+00:00</time>
  1785.                </header>
  1786.                
  1787.  
  1788. <p><p>(<em>This article is kindly sponsored by Adobe</em>.) The persuasive design toolbox is filled with powerful tools based on psychology. These tools range from Cialdini’s set of six principles of persuasion to <a href="https://shop.ui-patterns.com/product/persuasive-patterns-card-deck/">ten times that number of Persuasive Patterns</a>. Presented with all these methods, it can be tempting to use all of them to cover all possible bases, using a shotgun approach, hoping that one will resonate with your target users.</p>
  1789.  
  1790. <p>However, applying persuasion principles and patterns in a haphazard manner just ends up being persuasive design clutter. Like user experience design, designing for everyone is designing for no one. Randomly thrown together persuasive techniques will also make users feel manipulated, not in control, making them abandon the site or experience. The key to persuading your users is to keep it simple: using focused persuasive techniques and tactics that will work for your users.</p>
  1791.  
  1792. <h3 id="persuasion-funnel">Persuasion Funnel</h3>
  1793.  
  1794. <p><a href="https://en.wikipedia.org/wiki/AIDA_(marketing)">AIDA</a> is an acronym used in marketing and advertising to describe the stages that a customer goes through in the purchase process. The stages of <strong>A</strong>ttention, <strong>I</strong>nterest, <strong>D</strong>esire and <strong>A</strong>ction, generically follow a series of cognitive (thinking) and affective (feeling) stages culminating in a behavioral (doing e.g. purchase or trial) stage. This should sound familiar since this is what we do through design, especially persuasive design.</p>
  1795.  
  1796. <p>When it comes to persuasive design, users go through a few stages between Awareness and Action, and the design should guide them from one stage to the next. I don’t have a clever acronym for it (yet), but the stages the design has to take the users through are:</p>
  1797.  
  1798. <ul>
  1799. <li>Awareness</li>
  1800. <li>Relevant</li>
  1801. <li>Credible</li>
  1802. <li>Usable</li>
  1803. <li>Desirable</li>
  1804. <li>Persuasive</li>
  1805. <li>Action</li>
  1806. </ul>
  1807.  
  1808.  
  1809.  
  1810.  
  1811.  
  1812.  
  1813.  
  1814.  
  1815.  
  1816.  
  1817.  
  1818. <figure >
  1819. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5b6a1e88-7419-4c7a-8095-627d7fb667e5/awareness-action-funnel-large.png">
  1820. <img
  1821. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5b6a1e88-7419-4c7a-8095-627d7fb667e5/awareness-action-funnel-large.png 400w,
  1822.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5b6a1e88-7419-4c7a-8095-627d7fb667e5/awareness-action-funnel-large.png 800w,
  1823.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5b6a1e88-7419-4c7a-8095-627d7fb667e5/awareness-action-funnel-large.png 1200w,
  1824.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5b6a1e88-7419-4c7a-8095-627d7fb667e5/awareness-action-funnel-large.png 1600w,
  1825.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5b6a1e88-7419-4c7a-8095-627d7fb667e5/awareness-action-funnel-large.png 2000w"
  1826. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5b6a1e88-7419-4c7a-8095-627d7fb667e5/awareness-action-funnel-large.png"
  1827. sizes="100vw"
  1828. alt=""
  1829. />
  1830. </a>
  1831.  
  1832. <figcaption class="op-vertical-bottom">
  1833. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5b6a1e88-7419-4c7a-8095-627d7fb667e5/awareness-action-funnel-large.png'>Large preview</a>)
  1834. </figcaption>
  1835. </figure>
  1836.  
  1837.  
  1838. <p>When users are contemplating an action (like booking a hotel room), they have to be aware of your site, app, or experience. Once they begin their journey on your site, they quickly evaluate the experience and either proceed to the next step or leave and go elsewhere. With fewer users continuing to subsequent stages, the number of users at each stage begins to resemble the shape of a funnel as shown above.</p>
  1839.  
  1840. <p>Let’s peek inside what could be going on in hypothetical users’ minds as they go through the experience of booking a hotel room for New Year’s Eve in Times Square, and some of the reasons they may drop off in each stage.</p>
  1841.  
  1842. <h4 id="awareness">Awareness</h4>
  1843.  
  1844. <blockquote>“Hmmm… Where do I start? Hotel chains promise the lowest rate if we book directly with them, but I won’t be able to see other hotel options around Times Square. Hotel… Maybe I should try an online travel agency like Trivago (looks like the <a href="https://nutmegcreative.com/blog/meet-trivago-guy-tim-williams/">Trivago guy</a> / <a href="https://www.theguardian.com/travel/2017/aug/28/trivago-girl-gabrielle-miller">Trivago girl</a> advertising works!) to find a wider range of hotels. I’m going to also quickly Google it to see if there are other options.”</blockquote>
  1845.  
  1846. <p>Users have to be aware of your site, app or experience to use it &mdash; Duh!</p>
  1847.  
  1848. <h4 id="relevant">Relevant</h4>
  1849.  
  1850. <blockquote>“I found HotelTonight on Google. It looks like a great way to get rooms last minute, but not this far in advance &mdash; it’s not relevant to me.”</blockquote>
  1851.  
  1852. <p>If your experience is not relevant to the task they are trying to accomplish, users will leave and try elsewhere. If your products or services are relevant, but not findable by the user, work on your navigation, search, and content layout to ensure your products and services are visible. Everything does not have to be one click away, but if the user gets the <a href="https://www.nngroup.com/articles/wrong-information-scent-costs-sales/">scent of information</a>, or cues that make them think they are on the right path, they will follow the trail to that information.</p>
  1853.  
  1854. <h4 id="credible">Credible</h4>
  1855.  
  1856. <blockquote>“This design looks like it hasn’t been updated since the [GeoCities era](http://www.arngren.net/).<br /><br />&mdash; Warning bells go off in head &mdash;<br /><br />I’m out of here.”</blockquote>
  1857.  
  1858. <p>Users are aware of many of the risks available online and look for trust indicators including a known brand and domain, secure site, professional design, real-world contact information and third-party certificates or badges. Incorporate these elements to create a comfort level for the user.</p>
  1859.  
  1860. <h4 id="usable">Usable</h4>
  1861.  
  1862. <blockquote>“I can’t figure out where things are in the navigation, and the search results had hundreds of unhelpful results. The homepage has nice big images, but that meant I had to scroll before I could see any real content.”</blockquote>
  1863.  
  1864. <p>Usability is surprisingly still an issue with many sites. Follow User Experience best practices during design, and test with users to validate that the design is usable.</p>
  1865.  
  1866. <h4 id="desirable">Desirable</h4>
  1867.  
  1868. <blockquote>“This reminds me of Craigslist &mdash; it is usable, but the design does not make me want to stay and use it. I’ll try that other hotel website that provides an immersive, interactive experience as I search for hotels.”</blockquote>
  1869.  
  1870. <p>As much as we like to believe it, users’ decisions are not always rational, and very often driven by emotion, and we can address that through design. Usability is about making it work well; this is about making it beautiful as well.</p>
  1871.  
  1872. <p>In his book <a href="https://amzn.to/2txzH9i">Emotional Design</a>, Don Norman explains: &ldquo;Attractive things do work better &mdash; their attractiveness produces positive emotions, causing mental processes to be more creative, more tolerant of minor difficulties.&rdquo; Don talks about the three different aspects of design: visceral, behavioral, and reflective. Visceral design is about appearance, behavioral about the pleasure and effectiveness of use, and reflective design involves the rationalization and intellectualization of a product.</p>
  1873.  
  1874. <h4 id="persuasive">Persuasive</h4>
  1875.  
  1876. <blockquote>“Oh, Wow! That’s a long list of hotels, with plenty of availability for New Year’s Eve. There’s no real reason to book now. I’ll just come back to book after Thanksgiving…”</blockquote>
  1877.  
  1878. <p>The user was interested, able, and willing, but the design did not motivate him to take intended action. Use relevant persuasion techniques that apply to your user to move them toward the desired action.</p>
  1879.  
  1880.  
  1881.  
  1882.  
  1883.  
  1884.  
  1885.  
  1886.  
  1887.  
  1888.  
  1889.  
  1890. <figure class="article__image break-out">
  1891. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dd063f00-f552-4af0-b18d-3bb852053f6e/persuasive-methods-travelocity-example-large.png">
  1892. <img
  1893. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dd063f00-f552-4af0-b18d-3bb852053f6e/persuasive-methods-travelocity-example-large.png 400w,
  1894.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dd063f00-f552-4af0-b18d-3bb852053f6e/persuasive-methods-travelocity-example-large.png 800w,
  1895.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dd063f00-f552-4af0-b18d-3bb852053f6e/persuasive-methods-travelocity-example-large.png 1200w,
  1896.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dd063f00-f552-4af0-b18d-3bb852053f6e/persuasive-methods-travelocity-example-large.png 1600w,
  1897.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dd063f00-f552-4af0-b18d-3bb852053f6e/persuasive-methods-travelocity-example-large.png 2000w"
  1898. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dd063f00-f552-4af0-b18d-3bb852053f6e/persuasive-methods-travelocity-example-large.png"
  1899. sizes="100vw"
  1900. alt="Examples of persuasive methods while shopping on Travelocity for a hotel room for New Year’s Eve."
  1901. />
  1902. </a>
  1903.  
  1904. <figcaption class="op-vertical-bottom">
  1905. Examples of persuasive methods while shopping on Travelocity for a hotel room for New Year’s Eve. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dd063f00-f552-4af0-b18d-3bb852053f6e/persuasive-methods-travelocity-example-large.png'>Large preview</a>)
  1906. </figcaption>
  1907. </figure>
  1908.  
  1909.  
  1910. <h4 id="action">Action</h4>
  1911.  
  1912. <blockquote>“Oh, Wow! 65% of hotels are already booked in this area for New Year’s Eve. I better make a reservation now. <Scanning the results list, like the screenshot above>. This looks like a nice hotel, and it also offers free cancellation - I’m reserving it now!”</blockquote>
  1913.  
  1914. <p>The user who made it to this stage was interested, able, and willing, and the design nudged him to take intended action of making a reservation before leaving the site.</p>
  1915.  
  1916. <p>Persuasion is not about applying all available principles and patterns to your designs, but systematically identifying how you can address users’ barriers and motivators during each step of the journey, and guiding your users through the funnel to take the desired action.</p>
  1917.  
  1918. <h3 id="the-kiss-approach">The KISS Approach</h3>
  1919.  
  1920. <p>Most of us are familiar with the acronym <a href="https://en.wikipedia.org/wiki/KISS_principle">KISS</a>: &ldquo;Keep It Simple, Stupid,&rdquo; a principle advocating simplicity as a key goal in design by avoiding unnecessary complexity. Let’s borrow that acronym for a 4-step approach to persuasive design.</p>
  1921.  
  1922. <h4 id="k-now-the-right-behavior-to-target"><strong>K</strong>now The Right Behavior To Target</h4>
  1923.  
  1924. <p>The first step is knowing the behavior you would like to target, and identifying the simplest action that can lead to that behavior change. Take the example of term life insurance companies who, to put it very bluntly, stand to benefit if their policyholders are healthy and don’t die while the policy is active. While those companies have a long-term ambitious goal of helping their policyholders lead healthy lives (mutually beneficial), that could be broken down into a simpler target behavior of walking 10,000 steps daily. This behavior is simple to understand, achieve, measure, and contributes to the long-term goal of healthier policyholders.</p>
  1925.  
  1926. <p>One such insurance company is offering new policyholders the latest Apple Watch for a low initial down payment ($25). The ongoing monthly payments can be waived each month that the policyholder leads an active lifestyle and exercises regularly (e.g. walks about 10,000 steps a day). About half the people who participated have <a href="https://www.cnbc.com/2017/10/23/apple-watches-offered-to-all-john-hancock-life-insurance-customers.html">achieved monthly goals</a>, despite <a href="https://gizmodo.com/when-an-insurer-sells-you-an-apple-watch-for-25-how-m-1819912738">potential privacy implications</a>.</p>
  1927.  
  1928.  
  1929.  
  1930.  
  1931.  
  1932.  
  1933.  
  1934.  
  1935.  
  1936.  
  1937.  
  1938. <figure >
  1939. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8eea2ad6-9d3e-4b7c-add7-f5edfdd81bf9/life-insurance-apple-watch-offer-large.png">
  1940. <img
  1941. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8eea2ad6-9d3e-4b7c-add7-f5edfdd81bf9/life-insurance-apple-watch-offer-large.png 400w,
  1942.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8eea2ad6-9d3e-4b7c-add7-f5edfdd81bf9/life-insurance-apple-watch-offer-large.png 800w,
  1943.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8eea2ad6-9d3e-4b7c-add7-f5edfdd81bf9/life-insurance-apple-watch-offer-large.png 1200w,
  1944.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8eea2ad6-9d3e-4b7c-add7-f5edfdd81bf9/life-insurance-apple-watch-offer-large.png 1600w,
  1945.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8eea2ad6-9d3e-4b7c-add7-f5edfdd81bf9/life-insurance-apple-watch-offer-large.png 2000w"
  1946. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8eea2ad6-9d3e-4b7c-add7-f5edfdd81bf9/life-insurance-apple-watch-offer-large.png"
  1947. sizes="100vw"
  1948. alt="John Hancock Term Life Insurance Apple Watch offer targets walking about 10,000 steps a day."
  1949. />
  1950. </a>
  1951.  
  1952. <figcaption class="op-vertical-bottom">
  1953. John Hancock Term Life Insurance Apple Watch offer targets walking about 10,000 steps a day. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8eea2ad6-9d3e-4b7c-add7-f5edfdd81bf9/life-insurance-apple-watch-offer-large.png'>Large preview</a>)
  1954. </figcaption>
  1955. </figure>
  1956.  
  1957.  
  1958. <h4 id="i-dentify-barriers-and-motivators"><strong>I</strong>dentify Barriers And Motivators</h4>
  1959.  
  1960. <p>User research for persuasive design digs below the surface thinking level to the feeling level, and moves beyond the rational to the emotional level, as shown below. <a href="https://www.smashingmagazine.com/2018/06/how-to-get-to-know-your-users/">Getting to know your users at a deeper level</a> will help you use psychology to focus your design to get users to engage in the target behavior identified above. User interviews that focus on users’ feelings and emotions are used to uncover barriers and motivators they consciously or subconsciously face while trying to achieve the target behavior. This helps us identify which blocks we need to weaken, and which motivators we should strengthen, through persuasive design techniques and tactics.</p>
  1961.  
  1962.  
  1963.  
  1964.  
  1965.  
  1966.  
  1967.  
  1968.  
  1969.  
  1970.  
  1971.  
  1972. <figure >
  1973. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/eb2e9399-310e-497d-a2ff-8e4be0e78854/tip-of-the-iceberg-user-research-large.jpg">
  1974. <img
  1975. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/eb2e9399-310e-497d-a2ff-8e4be0e78854/tip-of-the-iceberg-user-research-large.jpg 400w,
  1976.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/eb2e9399-310e-497d-a2ff-8e4be0e78854/tip-of-the-iceberg-user-research-large.jpg 800w,
  1977.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/eb2e9399-310e-497d-a2ff-8e4be0e78854/tip-of-the-iceberg-user-research-large.jpg 1200w,
  1978.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/eb2e9399-310e-497d-a2ff-8e4be0e78854/tip-of-the-iceberg-user-research-large.jpg 1600w,
  1979.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/eb2e9399-310e-497d-a2ff-8e4be0e78854/tip-of-the-iceberg-user-research-large.jpg 2000w"
  1980. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/eb2e9399-310e-497d-a2ff-8e4be0e78854/tip-of-the-iceberg-user-research-large.jpg"
  1981. sizes="100vw"
  1982. alt="Tip of the iceberg user research diagram"
  1983. />
  1984. </a>
  1985.  
  1986. <figcaption class="op-vertical-bottom">
  1987. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/eb2e9399-310e-497d-a2ff-8e4be0e78854/tip-of-the-iceberg-user-research-large.jpg'>Large preview</a>)
  1988. </figcaption>
  1989. </figure>
  1990.  
  1991.  
  1992. <h4 id="s-implify-the-experience"><strong>S</strong>implify The Experience</h4>
  1993.  
  1994. <p>Simplify the design experience of the first stages of the funnel, as users go through the mental verifications of relevancy, credibility, and usability of the experience. This includes making it easy for the user to find what they are looking for, credibility indicators like professional design, contact information, and third-party certificates or badges, as well as addressing usability issues. As Steve Krug put it very succinctly: &ldquo;<a href="https://amzn.to/2MoAh0D">Don’t Make Me Think</a>&rdquo;.</p>
  1995.  
  1996. <h4 id="s-elect-appropriate-triggers"><strong>S</strong>elect Appropriate Triggers</h4>
  1997.  
  1998. <p>Users who have made it this far in the process are interested in something you have to offer. As a designer, you have to nudge them to take the desired action. A good starting point is Robert Cialdini’s, <a href="https://www.influenceatwork.com/principles-of-persuasion/">six key principles of persuasion</a>:</p>
  1999.  
  2000. <ol>
  2001. <li><strong>Reciprocity</strong><br />
  2002. People are obliged to give something back in exchange for receiving something.</li>
  2003. <li><strong>Scarcity</strong><br />
  2004. People want more of those things they can have less of.</li>
  2005. <li><strong>Authority</strong><br />
  2006. People follow the lead of credible, knowledgeable experts.</li>
  2007. <li><strong>Consistency</strong><br />
  2008. People like to be consistent with the things they have previously said or done.</li>
  2009. <li><strong>Liking</strong><br />
  2010. People prefer to say yes to those that they like.</li>
  2011. <li><strong>Consensus (Social Proof)</strong><br />
  2012. Especially when they are uncertain, people will look to the actions and behaviors of others to determine their own.</li>
  2013. </ol>
  2014.  
  2015. <p>These principles can be applied through dozens of different persuasive design patterns and methods, some of which have been previously published on Smashing Magazine (<a href="https://www.smashingmagazine.com/2015/10/beyond-usability-designing-with-persuasive-patterns">patterns</a>, <a href="https://www.smashingmagazine.com/2010/11/persuasion-triggers-in-web-design/">triggers</a>), or in the books listed in the resources at the end. As you may notice, many persuasive patterns are related to UI patterns, because part of persuasion is reducing friction and simplifying what the user needs to do at any given point in time. For example, the persuasive pattern of <a href="http://ui-patterns.com/patterns/Limited-choice">Limited Choice</a> can be realized through UI Pattern of <a href="http://ui-patterns.com/patterns/ProgressiveDisclosure">Progressive Disclosure</a>.</p>
  2016.  
  2017. <p>Given that there are dozens of patterns and methods (depending on where you look), it is important to selectively use methods that will resonate with your users. Applying all design patterns in the hope of some working will result in persuasion clutter and overwhelm the user, possibly driving them away from your site.</p>
  2018.  
  2019. <h3 id="examining-persuasion">Examining Persuasion</h3>
  2020.  
  2021. <p>Let’s take a closer look at the earlier example of the term life insurance through the eyes of someone who is motivated (shopping for life insurance) and has the ability (to pay monthly life insurance cost). Like me, let’s assume that this user was made aware of this through a sponsored post on Facebook. During the stages of awareness and relevance, there are a few persuasive triggers as shown below that make the user click &ldquo;Learn More&rdquo;.</p>
  2022.  
  2023.  
  2024.  
  2025.  
  2026.  
  2027.  
  2028.  
  2029.  
  2030.  
  2031.  
  2032.  
  2033. <figure class="article__image break-out">
  2034. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3a5f0222-720d-421c-bb7e-2f99c88cd96e/jh-facebook-post-persuasion-large.png">
  2035. <img
  2036. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3a5f0222-720d-421c-bb7e-2f99c88cd96e/jh-facebook-post-persuasion-large.png 400w,
  2037.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3a5f0222-720d-421c-bb7e-2f99c88cd96e/jh-facebook-post-persuasion-large.png 800w,
  2038.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3a5f0222-720d-421c-bb7e-2f99c88cd96e/jh-facebook-post-persuasion-large.png 1200w,
  2039.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3a5f0222-720d-421c-bb7e-2f99c88cd96e/jh-facebook-post-persuasion-large.png 1600w,
  2040.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3a5f0222-720d-421c-bb7e-2f99c88cd96e/jh-facebook-post-persuasion-large.png 2000w"
  2041. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3a5f0222-720d-421c-bb7e-2f99c88cd96e/jh-facebook-post-persuasion-large.png"
  2042. sizes="100vw"
  2043. alt="facebook"
  2044. />
  2045. </a>
  2046.  
  2047. <figcaption class="op-vertical-bottom">
  2048. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3a5f0222-720d-421c-bb7e-2f99c88cd96e/jh-facebook-post-persuasion-large.png'>Large preview</a>)
  2049. </figcaption>
  2050. </figure>
  2051.  
  2052.  
  2053. <p>Clicking the &ldquo;Learn More&rdquo; button takes the user to a landing page that we will examine in sections for a persuasive flow:</p>
  2054.  
  2055.  
  2056.  
  2057.  
  2058.  
  2059.  
  2060.  
  2061.  
  2062.  
  2063.  
  2064.  
  2065. <figure >
  2066. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0521424b-45b4-4978-978f-aeba231d4e4b/jh-landing-persuasion-1of2-large.png">
  2067. <img
  2068. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0521424b-45b4-4978-978f-aeba231d4e4b/jh-landing-persuasion-1of2-large.png 400w,
  2069.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0521424b-45b4-4978-978f-aeba231d4e4b/jh-landing-persuasion-1of2-large.png 800w,
  2070.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0521424b-45b4-4978-978f-aeba231d4e4b/jh-landing-persuasion-1of2-large.png 1200w,
  2071.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0521424b-45b4-4978-978f-aeba231d4e4b/jh-landing-persuasion-1of2-large.png 1600w,
  2072.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0521424b-45b4-4978-978f-aeba231d4e4b/jh-landing-persuasion-1of2-large.png 2000w"
  2073. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0521424b-45b4-4978-978f-aeba231d4e4b/jh-landing-persuasion-1of2-large.png"
  2074. sizes="100vw"
  2075. alt=""
  2076. />
  2077. </a>
  2078.  
  2079. <figcaption class="op-vertical-bottom">
  2080. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/0521424b-45b4-4978-978f-aeba231d4e4b/jh-landing-persuasion-1of2-large.png'>Large preview</a>)
  2081. </figcaption>
  2082. </figure>
  2083.  
  2084.  
  2085. <p>The user’s primary motivation in shopping for term life insurance is: &ldquo;Protect Family,&rdquo; and a big barrier is “High Cost.”</p>
  2086.  
  2087. <ol>
  2088. <li><strong>Reputable Name (Credibility)</strong><br />Even if you’ve not heard of this company, John Hancock is a famous person and the term used as a synonym in the United States for one's signature. The company reinforces it’s longevity later on the page.</li>
  2089. <li><strong>Toll-free Number (Credibility)</strong><br />Established and legitimate organization.</li>
  2090. <li><strong>Message Framing</strong><br />Live healthy, is also reinforced by the image of a family enjoying outdoors.<br /><blockquote>“This life insurance product will help me live longer, lead a happy life like them, and protect my family in case something happens, and won’t cost much.”</blockquote></li>
  2091. <li><strong>People Like Me & Association</strong><br />This family looks like mine (or the family next door) &mdash; I can see myself in this wide-open field (visceral and reflective triggers).</li>
  2092. <li><strong>Extrinsic Reward</strong><br />An Apple watch for $25 &mdash; that’s a bonus here!</li>
  2093. <li><strong>Visual Cueing</strong><br />The person in focus (stereotypical breadwinner) has his gaze directly focused at the form below, leading the user to the next step.</li>
  2094. <li><strong>Foot In The Door</strong><br />This quote won’t cost anything &mdash; zip, <em>nada</em>.</li>
  2095. <li><strong>Computer As A Social Actor</strong><br />The information takes a conversational tone and format, not the usual form in rows and columns. The information seems reasonable to generate a quote.</li>
  2096. <li><strong>Commitment & Consistency</strong><br />By filling this quick, easy, and free form, chances are that the user will act consistently and proceed when it comes to the next step (application), unless there’s another barrier (price, benefits, etc.)
  2097.  
  2098.  
  2099.  
  2100.  
  2101.  
  2102.  
  2103.  
  2104.  
  2105.  
  2106.  
  2107.  
  2108. <figure >
  2109. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6dc361e3-b860-4715-a4ac-395cf5961c61/jh-landing-persuasion-2of2-large.png">
  2110. <img
  2111. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6dc361e3-b860-4715-a4ac-395cf5961c61/jh-landing-persuasion-2of2-large.png 400w,
  2112.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6dc361e3-b860-4715-a4ac-395cf5961c61/jh-landing-persuasion-2of2-large.png 800w,
  2113.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6dc361e3-b860-4715-a4ac-395cf5961c61/jh-landing-persuasion-2of2-large.png 1200w,
  2114.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6dc361e3-b860-4715-a4ac-395cf5961c61/jh-landing-persuasion-2of2-large.png 1600w,
  2115.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6dc361e3-b860-4715-a4ac-395cf5961c61/jh-landing-persuasion-2of2-large.png 2000w"
  2116. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6dc361e3-b860-4715-a4ac-395cf5961c61/jh-landing-persuasion-2of2-large.png"
  2117. sizes="100vw"
  2118. alt=""
  2119. />
  2120. </a>
  2121.  
  2122. <figcaption class="op-vertical-bottom">
  2123. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6dc361e3-b860-4715-a4ac-395cf5961c61/jh-landing-persuasion-2of2-large.png'>Large preview</a>)
  2124. </figcaption>
  2125. </figure>
  2126.  
  2127. </li>
  2128. <li><strong>Control</strong><br />The user has a choice of devices.</li>
  2129. <li><strong>Extrinsic Rewards</strong><br />More rewards to be earned.</li>
  2130. <li><strong>Control</strong><br />The user controls how much they pay (the more active, the less you’ll pay). Also, in case the user does is not active, the cost is framed as just $13 (for a month).</li>
  2131. <li><strong>Credibility</strong><br />The company reinforces longevity and protector of America.</li>
  2132. <li><strong>Authority</strong><br />Licensed Coverage Coach (not just a sales agent).</li>
  2133. <li><strong>Flow</strong><br />One way to keep users in the flow and not get distracted is by disabling the social media links (which could raise the question: why display them?).</li>
  2134. </ol>
  2135.  
  2136. <p>That took longer to dissect and read than it does in real life, where most of this is processed consciously and subconsciously in a few seconds, often with a glance or two.</p>
  2137.  
  2138. <p>Apart from the methods establishing credibility, the persuasive methods are used to strengthen the primary motivator of &ldquo;Protect Family&rdquo; (get insurance, extrinsic reward will help me live longer for my family), and weaken the barrier of “High Cost” (low monthly cost, additional savings, no ongoing watch payments). Note how they work together and don’t conflict or clutter the experience.</p>
  2139.  
  2140. <h3 id="conclusion">Conclusion</h3>
  2141.  
  2142. <p>Persuasion is all around us, in our everyday lives. As designers, we can use <a href="https://www.smashingmagazine.com/2018/06/ethics-of-persuasion/">ethical</a> persuasive design methods to get users to take some action. With plenty of persuasive methods available, we have to be selective about what we use. We can use the KISS approach to keep it simple:</p>
  2143.  
  2144. <ul>
  2145. <li><strong>K</strong>now the right behavior to target</li>
  2146. <li><strong>I</strong>dentify barriers and motivators</li>
  2147. <li><strong>S</strong>implify the experience</li>
  2148. <li><strong>S</strong>elect appropriate triggers</li>
  2149. </ul>
  2150.  
  2151. <p>KISS also reminds us to <strong>K</strong>eep <strong>I</strong>t <strong>S</strong>imple &amp; <strong>S</strong>traightforward, by selecting a simple target behavior, simplifying the experience for the user, and by applying persuasive techniques that will lead to the target behavior without overwhelming the user.</p>
  2152.  
  2153. <h4 id="further-reading">Further Reading</h4>
  2154.  
  2155. <ul>
  2156. <li>“<a href="https://amzn.to/2KiLwam">Neuro Web Design: What Makes Them Click?</a>,” Susan Weinschenk</li>
  2157. <li>“<a href="https://amzn.to/2K5XM1Z">Design for the Mind: Seven Psychological Principles of Persuasive Design</a>,” Victor S. Yocco</li>
  2158. <li>“<a href="https://amzn.to/2tpXvwA">Influence: The Psychology of Persuasion</a>, by Robert B. Cialdini</li>
  2159. <li>“<a href="https://amzn.to/2txyRJK">Persuasive Technology: Using Computers to Change What We Think and Do</a>,” B.J. Fogg</li>
  2160. <li>“<a href="http://ui-patterns.com/patterns">Persuasive Design Patterns</a> (scroll down the page),” UI-Patterns</li>
  2161. <li>“<a href="https://shop.ui-patterns.com/product/persuasive-patterns-card-deck/">Persuasive Patterns Card Deck</a>,” UI-Patterns</li>
  2162. </ul>
  2163.  
  2164. <p><em>This article is part of the UX design series sponsored by Adobe. Adobe XD tool is made for a <a href="https://adobe.ly/2kAN84i">fast and fluid UX design process</a>, as it lets you go from idea to prototype faster. Design, prototype, and share — all in one app. You can check out more inspiring projects created with <a href="https://www.behance.net/galleries/adobe/5/XD">Adobe XD on Behance</a>, and also <a href="https://adobe.ly/2yKueO8">sign up for the Adobe experience design newsletter</a> to stay updated and informed on the latest trends and insights for UX/UI design.</em></p>
  2165.  
  2166.  
  2167.  
  2168.  
  2169. <div class="signature">
  2170.  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial">
  2171.  <span>(yk, il)</span>
  2172. </div>
  2173.  
  2174.  
  2175.              </article>
  2176.            </body>
  2177.          </html>
  2178.        ]]></content:encoded>
  2179.      </item>
  2180.    
  2181.      <item>
  2182.        
  2183.          
  2184.          <author>Oliver Williams</author>
  2185.        
  2186.        <title>The Holy Grail Of Reusable Components: Custom Elements, Shadow DOM, And NPM</title>
  2187.        <link>https://www.smashingmagazine.com/2018/07/reusable-components-custom-elements-shadow-dom-npm/</link>
  2188.        <pubDate>Mon, 16 Jul 2018 13:30:58 +0200</pubDate>
  2189.        <guid>https://www.smashingmagazine.com/2018/07/reusable-components-custom-elements-shadow-dom-npm/</guid>
  2190.        <description>For even the simplest of components, the cost in human-labour may have been significant. UX teams do usability testing. An array of stakeholders have to sign off on the design.
  2191. Developers conduct AB tests, accessibility audits, unit tests and cross-browser checks. Once you’ve solved a problem, you don’t want to repeat that effort. By building a reusable component library (rather than building everything from scratch), we can continuously utilize past efforts and avoid revisiting already solved design and development challenges.</description>
  2192.        <content:encoded><![CDATA[
  2193.          <html>
  2194.            <head>
  2195.              <meta charset="utf-8">
  2196.              <link rel="canonical" href="https://www.smashingmagazine.com/2018/07/reusable-components-custom-elements-shadow-dom-npm/" />
  2197.              <title>The Holy Grail Of Reusable Components: Custom Elements, Shadow DOM, And NPM</title>
  2198.            </head>
  2199.            <body>
  2200.              <article>
  2201.                <header>
  2202.                  <h1>The Holy Grail Of Reusable Components: Custom Elements, Shadow DOM, And NPM</h1>
  2203.                  
  2204.                    
  2205.                    <address>Oliver Williams</address>
  2206.                  
  2207.                  <time datetime="2018-07-16T13:30:58&#43;02:00" class="op-published">2018-07-16T13:30:58+02:00</time>
  2208.                  <time datetime="2018-07-23T11:42:51&#43;00:00" class="op-modified">2018-07-23T11:42:51+00:00</time>
  2209.                </header>
  2210.                <p>For even the simplest of components, the cost in human-labour may have been significant. UX teams do usability testing. An array of stakeholders have to sign off on the design.</p>
  2211.  
  2212. <p>Developers conduct AB tests, accessibility audits, unit tests and cross-browser checks. Once you’ve solved a problem, <em>you don’t want to repeat that effort</em>. By building a reusable component library (rather than building everything from scratch), we can continuously utilize past efforts and avoid revisiting already solved design and development challenges.</p>
  2213.  
  2214.  
  2215.  
  2216.  
  2217.  
  2218.  
  2219.  
  2220.  
  2221.  
  2222.  
  2223.  
  2224. <figure >
  2225. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fd61c2a7-6c87-42c0-864c-624bc0e0403f/materialcomponents.png">
  2226. <img
  2227. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fd61c2a7-6c87-42c0-864c-624bc0e0403f/materialcomponents.png 400w,
  2228.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fd61c2a7-6c87-42c0-864c-624bc0e0403f/materialcomponents.png 800w,
  2229.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fd61c2a7-6c87-42c0-864c-624bc0e0403f/materialcomponents.png 1200w,
  2230.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fd61c2a7-6c87-42c0-864c-624bc0e0403f/materialcomponents.png 1600w,
  2231.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fd61c2a7-6c87-42c0-864c-624bc0e0403f/materialcomponents.png 2000w"
  2232. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fd61c2a7-6c87-42c0-864c-624bc0e0403f/materialcomponents.png"
  2233. sizes="100vw"
  2234. alt="A screenshot of Google’s material components website – showing various components."
  2235. />
  2236. </a>
  2237.  
  2238. <figcaption class="op-vertical-bottom">
  2239. <a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fd61c2a7-6c87-42c0-864c-624bc0e0403f/materialcomponents.png'>Large preview</a>
  2240. </figcaption>
  2241. </figure>
  2242.  
  2243.  
  2244. <p>Building an arsenal of components is particularly useful for companies such as Google that own a considerable portfolio of websites all sharing a common brand. By codifying their UI into composable widgets, larger companies can both speed up development time and achieve consistency of both visual and user-interaction design across projects. There’s been a rise in interest in style guides and pattern libraries over the last several years. Given multiple developers and designers spread over multiple teams, large companies seek to attain consistency. We can do better than simple color swatches. <strong>What we need is easily distributable code</strong>.</p>
  2245.  
  2246. <h4>Sharing And Reusing Code</h4>
  2247.  
  2248. <p>Manually copy-and-pasting code is effortless. Keeping that code up-to-date, however, is a maintenance nightmare. Many developers, therefore, rely on a package manager to reuse code across projects. Despite its name, the Node Package Manager has become the unrivalled platform for <em>front-end</em> package management. There are currently over 700,000 packages in the NPM registry and <em>billions</em> of packages are downloaded every month. Any folder with a package.json file can be uploaded to NPM as a shareable package. While NPM is primarily associated with JavaScript, a package can include CSS and markup. NPM makes it easy to reuse and, importantly, <em>update</em> code. Rather than needing to amend code in myriad places, you change the code only in the package.</p>
  2249.  
  2250.  
  2251.  
  2252. <aside class="product-panel product-panel__tilted product-panel--book" data-audience="non-subscriber">
  2253.    <div class="container product-panel--book__container">
  2254.      <div class="panel__description panel__description--book">
  2255.    <p>Getting workflow <em>just</em> right ain’t an easy task. So are proper estimates. Or alignment among different departments. That’s why we’ve set up <strong>“this-is-how-I-work”-sessions</strong> — with smart cookies sharing what works well for them. A part of the <a href="http://smashed.by/workflowpanelmembership">Smashing Membership</a>, of course.</p>
  2256.      <a href="http://smashed.by/workflowpanelmembership" class="btn btn--green btn--large">
  2257.        Explore features&nbsp;→
  2258.      </a>
  2259.      </div>
  2260.      <div class="panel__image panel__image--book">
  2261.        <a href="http://smashed.by/workflowpanelmembership" class="books__book__image">
  2262.        <div class="books__book__img">
  2263.          <img src="https://www.smashingmagazine.com/images/smashing-cat/smashing-tv-box-cat.svg" alt="Smashing TV, with live sessions for professional designers and developers." width="310" height="400">
  2264.        </div>
  2265.      </a>
  2266.      </div>
  2267.    </div>
  2268.  </aside>
  2269.  
  2270.  
  2271.  
  2272.  
  2273. <h4>The Markup Problem</h4>
  2274.  
  2275. <p>Sass and Javascript are easily portable with the use of import statements. Templating languages give HTML the same ability &mdash; templates can import other fragments of HTML in the form of partials. You can write the markup for your footer, for example, just once, then include it in other templates. To say there exists a multiplicity of templating languages would be an understatement. Tying yourself to <em>just one</em> severely limits the potential reusability of your code. The alternative is to copy-and-paste markup and to use NPM only for styles and javascript.</p>
  2276.  
  2277. <p>This is the approach taken by the Financial Times with their <a href="http://origami.ft.com"><em>Origami</em></a> component library. In her talk “<a href="https://www.youtube.com/watch?v=LAVNOQroZYA">Can't You Just Make It More like Bootstrap?</a>” Alice Bartlett concluded “there is no good way to let people include templates in their projects”. Speaking about his experience of maintaining a component library at Lonely Planet, <a href="https://www.ianfeather.co.uk/a-maintainable-style-guide/">Ian Feather reiterated the problems with this approach:</a></p>
  2278.  
  2279. <blockquote>“Once they copy that code they are essentially cutting a version which needs to be maintained indefinitely. When they copied the markup for a working component it had an implicit link to a snapshot of the CSS at that point. If you then update the template or refactor the CSS, you need to update all versions of the template scattered around your site.”</blockquote>
  2280.  
  2281. <h4>A Solution: Web Components</h4>
  2282.  
  2283. <p>Web components solve this problem by defining markup in JavaScript. The author of a component is free to alter markup, CSS, and Javascript. The consumer of the component can benefit from these upgrades without needing to trawl through a project altering code by hand. Syncing with the latest changes project-wide can be achieved with a terse <code>npm update</code> via terminal. Only the name of the component and its API need to stay consistent.</p>
  2284.  
  2285. <p>Installing a web component is as simple as typing <code>npm install component-name</code> into a terminal. The Javascript can be included with an import statement:</p>
  2286.  
  2287. <pre><code class="language-css">&lt;script type="module"&gt;
  2288. import './node_modules/component-name/index.js';
  2289. &lt;/script&gt;
  2290. </code></pre>
  2291.  
  2292. <p>Then you can use the component anywhere in your markup. Here is a simple example component that copies text to the clipboard.</p>
  2293.  
  2294. <p data-height="500"
  2295.   data-theme-id="light"
  2296.   data-slug-hash="KemvbM"
  2297.   data-user="cssgrid"
  2298.   data-default-tab="result"
  2299.   class='codepen'>See the Pen <a href="https://codepen.io/cssgrid/pen/KemvbM/">Simple web component demo</a> by CSS GRID (<a href="https://codepen.io/cssgrid">@cssgrid</a>) on <a href="https://codepen.io">CodePen</a>.</p>
  2300.  
  2301.  
  2302. <p>A component-centric approach to front-end development has become ubiquitous, ushered in by Facebook’s React framework. Inevitably, given the pervasiveness of frameworks in modern front-end workflows, a number of companies have built component libraries using their framework of choice. Those components are reusable only within that particular framework.</p>
  2303.  
  2304.  
  2305.  
  2306.  
  2307.  
  2308.  
  2309.  
  2310.  
  2311.  
  2312.  
  2313.  
  2314. <figure >
  2315. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d5cdd3ce-b918-405b-b709-0b6a9a60f5eb/reactonly.png">
  2316. <img
  2317. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d5cdd3ce-b918-405b-b709-0b6a9a60f5eb/reactonly.png 400w,
  2318.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d5cdd3ce-b918-405b-b709-0b6a9a60f5eb/reactonly.png 800w,
  2319.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d5cdd3ce-b918-405b-b709-0b6a9a60f5eb/reactonly.png 1200w,
  2320.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d5cdd3ce-b918-405b-b709-0b6a9a60f5eb/reactonly.png 1600w,
  2321.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d5cdd3ce-b918-405b-b709-0b6a9a60f5eb/reactonly.png 2000w"
  2322. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d5cdd3ce-b918-405b-b709-0b6a9a60f5eb/reactonly.png"
  2323. sizes="100vw"
  2324. alt="A component from IBM’s Carbon Design System"
  2325. />
  2326. </a>
  2327.  
  2328. <figcaption class="op-vertical-bottom">
  2329. A component from IBM’s Carbon Design System. For use in React applications only. Other significant examples of component libraries built in React include <a href='http://atlaskit.atlassian.com/packages'>Atlaskit</a> from Atlassian and <a href='https://polaris.shopify.com/components/get-started/'>Polaris</a> from Shopify. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d5cdd3ce-b918-405b-b709-0b6a9a60f5eb/reactonly.png'>Large preview</a>)
  2330. </figcaption>
  2331. </figure>
  2332.  
  2333.  
  2334. <p>It’s rare for a sizeable company to have a uniform front-end and replatorming from one framework to another isn’t uncommon. Frameworks come and go. To enable the maximum amount of potential reuse across projects, we need components that are <em>framework agnostic</em>.</p>
  2335.  
  2336.  
  2337.  
  2338.  
  2339.  
  2340.  
  2341.  
  2342.  
  2343.  
  2344.  
  2345.  
  2346. <figure >
  2347. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3cb17761-cd4a-4de8-aa1c-518eef1a6281/fragmented.png">
  2348. <img
  2349. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3cb17761-cd4a-4de8-aa1c-518eef1a6281/fragmented.png 400w,
  2350.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3cb17761-cd4a-4de8-aa1c-518eef1a6281/fragmented.png 800w,
  2351.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3cb17761-cd4a-4de8-aa1c-518eef1a6281/fragmented.png 1200w,
  2352.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3cb17761-cd4a-4de8-aa1c-518eef1a6281/fragmented.png 1600w,
  2353.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3cb17761-cd4a-4de8-aa1c-518eef1a6281/fragmented.png 2000w"
  2354. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3cb17761-cd4a-4de8-aa1c-518eef1a6281/fragmented.png"
  2355. sizes="100vw"
  2356. alt="A screenshot from npmjs.com showing components that do that same thing built exclusively for particular javascript frameworks."
  2357. />
  2358. </a>
  2359.  
  2360. <figcaption class="op-vertical-bottom">
  2361. Searching for components via <a href='https://www.npmjs.com'>npmjs.com</a> reveals a fragmented Javascript ecosystem. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3cb17761-cd4a-4de8-aa1c-518eef1a6281/fragmented.png'>Large preview</a>)
  2362. </figcaption>
  2363. </figure>
  2364.  
  2365.  
  2366.  
  2367.  
  2368.  
  2369.  
  2370.  
  2371.  
  2372.  
  2373.  
  2374.  
  2375.  
  2376. <figure >
  2377. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f9d9a4a9-4ee2-4982-ac18-e3f3257bbe16/frameworkgraph.png">
  2378. <img
  2379. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f9d9a4a9-4ee2-4982-ac18-e3f3257bbe16/frameworkgraph.png 400w,
  2380.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f9d9a4a9-4ee2-4982-ac18-e3f3257bbe16/frameworkgraph.png 800w,
  2381.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f9d9a4a9-4ee2-4982-ac18-e3f3257bbe16/frameworkgraph.png 1200w,
  2382.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f9d9a4a9-4ee2-4982-ac18-e3f3257bbe16/frameworkgraph.png 1600w,
  2383.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f9d9a4a9-4ee2-4982-ac18-e3f3257bbe16/frameworkgraph.png 2000w"
  2384. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f9d9a4a9-4ee2-4982-ac18-e3f3257bbe16/frameworkgraph.png"
  2385. sizes="100vw"
  2386. alt="A graph charting the popularity of frameworks over time. Ember, Knockout and Backbone have plunged in popularity, replaced by newer offerings."
  2387. />
  2388. </a>
  2389.  
  2390. <figcaption class="op-vertical-bottom">
  2391. The ever-changing popularity of frameworks over time. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f9d9a4a9-4ee2-4982-ac18-e3f3257bbe16/frameworkgraph.png'>Large preview</a>)
  2392. </figcaption>
  2393. </figure>
  2394.  
  2395.  
  2396. <blockquote>“I have built web applications using: Dojo, Mootools, Prototype, jQuery, Backbone, Thorax, and React over the years...I would love to have been able to bring that killer Dojo component that I slaved over with me to my React app of today.”<br /><br />&mdash; <a href="https://medium.com/ben-and-dion/web-components-building-web-tools-for-future-dion-1d0e731c96d2">Dion Almaer</a>, Director of Engineering, Google</blockquote>
  2397.  
  2398. <p>When we talk about a web component, we are talking about the combination of a custom element with shadow DOM. Custom Elements and shadow DOM are part of both the W3C DOM specification and the WHATWG DOM Standard &mdash; <em>meaning web components are a web standard</em>. Custom elements and shadow DOM are <em>finally</em> set to achieve cross-browser support this year. By using a standard part of the native web platform, we ensure that our components can survive the fast-moving cycle of front-end restructuring and architectural rethinks. Web components can be used with any templating language and any front-end framework &mdash; they’re truly cross-compatible and interoperable. They can be used everywhere from a Wordpress blog to a single page application.</p>
  2399.  
  2400.  
  2401.  
  2402.  
  2403.  
  2404.  
  2405.  
  2406.  
  2407.  
  2408.  
  2409.  
  2410. <figure >
  2411. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8727121e-eefc-44b8-8ef4-1b64f3bbb432/frameworkcompat.png">
  2412. <img
  2413. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8727121e-eefc-44b8-8ef4-1b64f3bbb432/frameworkcompat.png 400w,
  2414.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8727121e-eefc-44b8-8ef4-1b64f3bbb432/frameworkcompat.png 800w,
  2415.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8727121e-eefc-44b8-8ef4-1b64f3bbb432/frameworkcompat.png 1200w,
  2416.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8727121e-eefc-44b8-8ef4-1b64f3bbb432/frameworkcompat.png 1600w,
  2417.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8727121e-eefc-44b8-8ef4-1b64f3bbb432/frameworkcompat.png 2000w"
  2418. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8727121e-eefc-44b8-8ef4-1b64f3bbb432/frameworkcompat.png"
  2419. sizes="100vw"
  2420. alt="The Custom Elements Everywhere project by Rob Dodson documents the interoperability of web components with various client-side Javascript frameworks."
  2421. />
  2422. </a>
  2423.  
  2424. <figcaption class="op-vertical-bottom">
  2425. The <a href='https://custom-elements-everywhere.com/'>Custom Elements Everywhere</a> project by Rob Dodson documents the interoperability of web components with various client-side Javascript frameworks. React, the outlier here, will hopefully resolve these issues with React 17. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8727121e-eefc-44b8-8ef4-1b64f3bbb432/frameworkcompat.png'>Large preview</a>)
  2426. </figcaption>
  2427. </figure>
  2428.  
  2429.  
  2430. <h3>Making A Web Component</h3>
  2431.  
  2432. <h4>Defining A Custom Element</h4>
  2433.  
  2434. <p>It's always been possible to make up tag-names and have their content appear on the page.</p>
  2435.  
  2436. <pre><code class="language-html">&lt;made-up-tag&gt;Hello World!&lt;/made-up-tag&gt;</code></pre>
  2437.  
  2438. <p>HTML is designed to be fault tolerant. The above will render, even though it’s not a valid HTML element. There’s never been a good reason to do this &mdash; deviating from standardized tags has traditionally been a bad practice. By defining a new tag using the custom element API, however, we can augment HTML with reusable elements that have built-in functionality. Creating a custom element is much like creating a component in React &mdash; but here were extending <code>HTMLElement</code>.</p>
  2439.  
  2440. <pre><code class="language-css">class ExpandableBox extends HTMLElement {
  2441.      constructor() {
  2442.        super()
  2443.      }
  2444.    }
  2445. </code></pre>
  2446.  
  2447. <p>A parameter-less call to <code>super()</code> must be the first statement in the constructor. The constructor should be used to set up initial state and default values and to set up any event listeners.  A new custom element needs to be defined with a name for its HTML tag and the elements corresponding class:</p>
  2448.  
  2449. <pre><code class="language-css">customElements.define('expandable-box', ExpandableBox)</code></pre>
  2450.  
  2451. <p>It’s a convention to capitalize class names. The syntax of the HTML tag is, however, more than a convention. What if browsers wanted to implement a new HTML element and they wanted to call it expandable-box? To prevent naming collisions, no new standardized HTML tags will include a dash. By contrast, the names of custom elements <em>have to</em> include a dash.</p>
  2452.  
  2453. <pre><code class="language-css">customElements.define('whatever', Whatever) // invalid
  2454. customElements.define('what-ever', Whatever) // valid
  2455. </code></pre>
  2456.  
  2457. <div class="sponsors__wide-place"></div>
  2458.  
  2459.  
  2460.  
  2461.  
  2462. <h4>Custom Element Lifecycle</h4>
  2463.  
  2464. <p>The API offers four custom element <em>reactions</em> &mdash; functions that can be defined within the class that will automatically be called in response to certain events in the lifecycle of a custom element.</p>
  2465.  
  2466. <p><strong>connectedCallback</strong> is run when the custom element is added to the DOM.</p>
  2467.  
  2468. <pre><code class="language-css">connectedCallback() {
  2469.    console.log("custom element is on the page!")
  2470. }
  2471. </code></pre>
  2472.  
  2473. <p>This includes adding an element with Javascript:</p>
  2474.  
  2475. <pre><code class="language-javascript">document.body.appendChild(document.createElement("expandable-box")) //“custom element is on the page”</code></pre>
  2476.  
  2477. <p>as well as simply including the element within the page with a HTML tag:</p>
  2478.  
  2479. <pre><code class="language-html">&lt;expandable-box&gt;&lt;/expandable-box&gt; // "custom element is on the page"</code></pre>
  2480.  
  2481. <p>Any work that involves fetching resources or rendering should be in here.</p>
  2482.  
  2483. <p><strong>disconnectedCallback</strong> is run when the custom element is removed from the DOM.</p>
  2484.  
  2485. <pre><code class="language-javascript">disconnectedCallback() {
  2486.    console.log("element has been removed")
  2487. }
  2488. document.querySelector("expandable-box").remove() //"element has been removed"
  2489. </code></pre>
  2490.  
  2491. <p><code>adoptedCallback</code> is run when the custom element is adopted into a new document. You probably don’t need to worry about this one too often.</p>
  2492.  
  2493. <p><code>attributeChangedCallback</code> is run when an attribute is added, changed, or removed. It can be used to listen for changes to both standardized native attributes like <em>disabled</em> or <em>src</em>, as well as any custom ones we make up. This is one of the most powerful aspects of custom elements as it enables the creation of a user-friendly API.</p>
  2494.  
  2495. <h4>Custom Element Attributes</h4>
  2496.  
  2497. <p>There are a great many HTML attributes. So that the browser doesn’t waste time calling our <code>attributeChangedCallback</code> when <em>any</em> attribute is changed, we need to provide a list of the attribute changes we want to listen for. For this example, we’re only interested in one.</p>
  2498.  
  2499. <pre><code class="language-javascript">static get observedAttributes() {
  2500.            return ['expanded']
  2501.        }
  2502. </code></pre>
  2503.  
  2504. <p>So now our <code>attributeChangedCallback</code> will only be called when we change the value of the expanded attribute on the custom element, as it’s the only attribute we’ve listed.</p>
  2505.  
  2506. <p>HTML attributes can have corresponding values (think <em>href, src, alt, value</em> etc) while others are either true or false (e.g. <em>disabled, selected, required</em>). For an attribute with a corresponding value, we would include the following within the custom element’s class definition.</p>
  2507.  
  2508. <pre><code class="language-javascript">get yourCustomAttributeName() {
  2509.  return this.getAttribute('yourCustomAttributeName');
  2510. }
  2511. set yourCustomAttributeName(newValue) {
  2512.  this.setAttribute('yourCustomAttributeName', newValue);
  2513. }
  2514. </code></pre>
  2515.  
  2516. <p>For our example element, the attribute will either be true or false, so defining the getter and setter is a little different.</p>
  2517.  
  2518. <pre><code class="language-javascript">get expanded() {
  2519.  return this.hasAttribute('expanded')
  2520. }
  2521.        
  2522. // the second argument for setAttribute is mandatory, so we’ll use an empty string
  2523. set expanded(val) {
  2524.  if (val) {
  2525.    this.setAttribute('expanded', '');
  2526.  }
  2527.  else {
  2528.    this.removeAttribute('expanded')
  2529.  }
  2530. }
  2531. </code></pre>
  2532.  
  2533. <p>Now that the boilerplate has been dealt with, we can make use of <code>attributeChangedCallback</code>.</p>
  2534.  
  2535. <pre><code class="language-javascript">attributeChangedCallback(name, oldval, newval) {
  2536.  console.log(`the ${name} attribute has changed from ${oldval} to ${newval}!!`);
  2537.  // do something every time the attribute changes
  2538. }
  2539. </code></pre>
  2540.  
  2541. <p>Traditionally, configuring a Javascript component would have involved passing arguments to an <code>init</code> function. By utilising the <code>attributeChangedCallback</code>, its possible to make a custom element that’s configurable just with markup.</p>
  2542.  
  2543. <p>Shadow DOM and custom elements can be used separately, and you may find custom elements useful all by themselves. Unlike shadow DOM, they <em>can</em> be polyfilled. However, the two specs work well in conjunction.</p>
  2544.  
  2545. <div class="sponsors__wide-place"></div>
  2546.  
  2547.  
  2548.  
  2549.  
  2550. <h4>Attaching Markup And Styles With Shadow DOM</h4>
  2551.  
  2552. <p>So far, we’ve handled the <em>behavior</em> of a custom element. In regard to markup and styles, however, our custom element is equivalent to an empty unstyled <code>&lt;span></code>. To encapsulate HTML and CSS as part of the component, we need to attach a shadow DOM. It’s best to do this within the constructor function.</p>
  2553.  
  2554. <pre class="break-out"><code class="language-javascript">class FancyComponent extends HTMLElement {
  2555.        constructor() {
  2556.            super()
  2557.            var shadowRoot = this.attachShadow({mode: 'open'})
  2558.            shadowRoot.innerHTML = `&lt;h2>hello world!&lt;/h2>`
  2559.            }
  2560. </code></pre>
  2561.  
  2562. <p>Don’t worry about understanding what the mode means &mdash; its boilerplate you have to include, but you’ll pretty much <em>always</em> want <code>open</code>. This simple example component will just render the text “hello world”. Like most other HTML elements, a custom element can have children &mdash; but not by default. So far the above custom element we’ve defined won’t render any children to the screen. To display any content between the tags, we need to make use of a <code>slot</code> element.</p>
  2563.  
  2564. <pre><code class="language-html">shadowRoot.innerHTML = `
  2565. &lt;h2&gt;hello world!&lt;/h2&gt;
  2566. &lt;slot&gt;&lt;/slot&gt;
  2567. `
  2568. </code></pre>
  2569.  
  2570. <p>We can use a style tag to apply some CSS to the component.</p>
  2571.  
  2572. <pre><code class="language-css">shadowRoot.innerHTML =
  2573. `&lt;style&gt;
  2574. p {
  2575. color: red;
  2576. }
  2577. &lt;/style&gt;
  2578. &lt;h2&gt;hello world!&lt;/h2&gt;
  2579. &lt;slot&gt;some default content&lt;/slot&gt;`
  2580. </code></pre>
  2581.  
  2582. <p>These styles will only apply to the component, so we are free to make use of element selectors without the styles affecting anything else of the page. This simplifies writing CSS, making naming conventions like BEM unnecessary.</p>
  2583.  
  2584. <h4>Publishing A Component On NPM</h4>
  2585.  
  2586. <p>NPM packages are published via the command line. Open a terminal window and move into a directory that you would like to turn into a reusable package. Then type the following commands into the terminal:</p>
  2587.  
  2588. <ol>
  2589. <li>If your project doesn’t already have a <a href="https://docs.npmjs.com/files/package.json">package.json</a>, <code>npm init</code> will walk you through generating one.</li>
  2590. <li><code>npm adduser</code> links your machine to your NPM account. If you don’t have a preexisting account, it will create a new one for you.</li>
  2591. <li><code>npm publish</code></li>
  2592. </ol>
  2593.  
  2594.  
  2595.  
  2596.  
  2597.  
  2598.  
  2599.  
  2600.  
  2601.  
  2602.  
  2603.  
  2604. <figure >
  2605. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b594f06b-c102-49bd-9463-3caf5d742be7/terminal.png">
  2606. <img
  2607. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b594f06b-c102-49bd-9463-3caf5d742be7/terminal.png 400w,
  2608.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b594f06b-c102-49bd-9463-3caf5d742be7/terminal.png 800w,
  2609.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b594f06b-c102-49bd-9463-3caf5d742be7/terminal.png 1200w,
  2610.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b594f06b-c102-49bd-9463-3caf5d742be7/terminal.png 1600w,
  2611.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b594f06b-c102-49bd-9463-3caf5d742be7/terminal.png 2000w"
  2612. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b594f06b-c102-49bd-9463-3caf5d742be7/terminal.png"
  2613. sizes="100vw"
  2614. alt="NPM packages are published via the command line"
  2615. />
  2616. </a>
  2617.  
  2618. <figcaption class="op-vertical-bottom">
  2619. <a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b594f06b-c102-49bd-9463-3caf5d742be7/terminal.png'>Large preview</a>
  2620. </figcaption>
  2621. </figure>
  2622.  
  2623.  
  2624. <p>If all’s gone well, you now have a component in the NPM registry, ready to be installed and used in your own projects &mdash; and shared with the world.</p>
  2625.  
  2626.  
  2627.  
  2628.  
  2629.  
  2630.  
  2631.  
  2632.  
  2633.  
  2634.  
  2635.  
  2636. <figure >
  2637. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ff9b48c4-72c9-49ae-829e-28e3611f322a/npm.png">
  2638. <img
  2639. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ff9b48c4-72c9-49ae-829e-28e3611f322a/npm.png 400w,
  2640.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ff9b48c4-72c9-49ae-829e-28e3611f322a/npm.png 800w,
  2641.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ff9b48c4-72c9-49ae-829e-28e3611f322a/npm.png 1200w,
  2642.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ff9b48c4-72c9-49ae-829e-28e3611f322a/npm.png 1600w,
  2643.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ff9b48c4-72c9-49ae-829e-28e3611f322a/npm.png 2000w"
  2644. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ff9b48c4-72c9-49ae-829e-28e3611f322a/npm.png"
  2645. sizes="100vw"
  2646. alt="An example of a component in the NPM registry, ready to be installed and used in your own projects."
  2647. />
  2648. </a>
  2649.  
  2650. <figcaption class="op-vertical-bottom">
  2651. <a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ff9b48c4-72c9-49ae-829e-28e3611f322a/npm.png'>Large preview</a>
  2652. </figcaption>
  2653. </figure>
  2654.  
  2655.  
  2656. <p>The web components API isn’t perfect. Custom elements are currently unable to <a href="https://github.com/w3c/webcomponents/issues/187">include data in form submissions</a>. The progressive enhancement story isn’t great. Dealing with <a href="https://github.com/WICG/aom/blob/gh-pages/explainer.md#use-case-1-setting-non-reflected-default-accessibility-properties-for-web-components">accessibility isn’t as easy as it should be</a>.</p>
  2657.  
  2658. <p>Although originally announced in 2011, browser support still isn’t universal. Firefox support is due later this year. Nevertheless, some high-profile websites (like Youtube) are already making use of them. Despite their current shortcomings, for <em>universally</em> shareable components they’re the singular option and in the future we can expect <a href="https://github.com/w3c/webcomponents/blob/gh-pages/proposals/Template-Instantiation.md">exciting additions</a> to what they have to offer.</p>
  2659.  
  2660. <div class="signature">
  2661.  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial">
  2662.  <span>(il, ra, yk)</span>
  2663. </div>
  2664.  
  2665.  
  2666.              </article>
  2667.            </body>
  2668.          </html>
  2669.        ]]></content:encoded>
  2670.      </item>
  2671.    
  2672.      <item>
  2673.        
  2674.          
  2675.          <author>Anselm Hannemann</author>
  2676.        
  2677.        <title>Monthly Web Development Update 7/2018: Practical Accessibility, Design Mistakes, And Feature Control</title>
  2678.        <link>https://www.smashingmagazine.com/2018/07/monthly-web-development-update-7-2018/</link>
  2679.        <pubDate>Fri, 13 Jul 2018 14:20:17 +0200</pubDate>
  2680.        <guid>https://www.smashingmagazine.com/2018/07/monthly-web-development-update-7-2018/</guid>
  2681.        <description>The web continues to amaze me. With all its variety and different changes to the platform, it’s hard to see a straight pattern &amp;mdash; if there even is (just) one. But it’s wonderful to see what is being changed, which features are added to the platform, which ones get deprecated, and how browsers implement more and more technology to protect the user from malicious website attacks. It’s interesting to see that these security features nowadays are getting as much attention as a feature for developers; this shows the importance of privacy and security and how unstable and insecure the web was in the past.</description>
  2682.        <content:encoded><![CDATA[
  2683.          <html>
  2684.            <head>
  2685.              <meta charset="utf-8">
  2686.              <link rel="canonical" href="https://www.smashingmagazine.com/2018/07/monthly-web-development-update-7-2018/" />
  2687.              <title>Monthly Web Development Update 7/2018: Practical Accessibility, Design Mistakes, And Feature Control</title>
  2688.            </head>
  2689.            <body>
  2690.              <article>
  2691.                <header>
  2692.                  <h1>Monthly Web Development Update 7/2018: Practical Accessibility, Design Mistakes, And Feature Control</h1>
  2693.                  
  2694.                    
  2695.                    <address>Anselm Hannemann</address>
  2696.                  
  2697.                  <time datetime="2018-07-13T14:20:17&#43;02:00" class="op-published">2018-07-13T14:20:17+02:00</time>
  2698.                  <time datetime="2018-07-23T11:42:51&#43;00:00" class="op-modified">2018-07-23T11:42:51+00:00</time>
  2699.                </header>
  2700.                <p>The web continues to amaze me. With all its variety and different changes to the platform, it’s hard to see a straight pattern &mdash; if there even is (just) one. But it’s wonderful to see what is being changed, which features are added to the platform, which ones get deprecated, and how browsers implement more and more technology to protect the user from malicious website attacks. It’s interesting to see that these security features nowadays are getting as much attention as a feature for developers; this shows <strong>the importance of privacy and security</strong> and how unstable and insecure the web was in the past. </p>
  2701.  
  2702. <p>But the best thing about all of this is that it shows how important it is to stick to the things that people give us. Instead of implementing our own solutions for everything, it’s often much better to re-use an existing system. Not only is it safer to rely on, but also less work while more inclusive to extend a native DOM element with a custom element (instead of writing our own custom element from scratch). If we think about whether we should build our own version of SSL or use an existing software for this, why would we build a clickable element based on nothing instead of altering the behavior of an <code>a</code> or <code>button</code> element? And why would we check for resource host validation on our own, if the browser already gives us an API for that? This week’s articles are all dedicated to these topics.</p>
  2703.  
  2704. <p>Another thing that has been stuck in my head is Andrea Giammarchi’s article, “<a href="https://medium.com/@WebReflection/a-bloatless-web-d4f811c7991b">A Bloatless Web</a>,” in which he describes how we blindly use Babel as developers when we write JavaScript to be able to write modern ECMAScript. But we usually don’t realize that transpiling all of our modern code in modern browsers isn’t the most efficient way. I’m glad that Andrea offers some ideas on how we can improve that situation and improve our web apps’ performance. Wouldn’t it be amazing to just serve a third of the bundle size by not transpiling the code anymore for each and every browser?</p>
  2705.  
  2706. <h3>News</h3>
  2707.  
  2708. <ul>
  2709. <li>Site Isolation effectively makes it harder for untrusted websites to access or steal information from your accounts on other websites. <a href="https://developers.google.com/web/updates/2018/07/site-isolation">Chrome 67 is now shipping with it</a> and Cross-Origin Read Blocking (CORB) will no longer load, e.g. a JSON file as image. But even further, these changes mean that full-page layout is no longer guaranteed to be synchronous. This new feature affects you if you read out calculated sizes from an element in JavaScript or use <code>unload</code> event listeners.  Ensure that you know about this and check if your sites still work as expected.</li>
  2710. <li>By now, we know a bit about Content Security Policies — a feature that lets developers limit the load of certain resources by hostnames. But browser vendors have come up with something new now: Feature Policy. This allows web developers to selectively enable, disable, or modify the behavior of certain APIs and web features in the browser. It’s like CSP but instead of controlling security, it controls features and <a href="https://developers.google.com/web/updates/2018/06/feature-policy">Eric Bidelman wrote an introduction to Feature Policy</a> explaining everything.</li>
  2711. <li>The Brave browser team shows their latest feature to protect their users’ privacy: <a href="https://brave.com/tor-tabs-beta/">Tabs that connect via the Tor network</a>.</li>
  2712. </ul>
  2713.  
  2714.  
  2715.  
  2716. <aside class="product-panel product-panel__tilted product-panel--book" data-audience="non-subscriber">
  2717.    <div class="container product-panel--book__container">
  2718.      <div class="panel__description panel__description--book">
  2719.    <p>With so much happening on the web, what should we really pay attention to? At <a href="https://smashingconf.com/ny-2018/">SmashingConf New York 2018</a> 🇺🇸 we’ll explore everything from PWAs, font loading best practices, web performance and eCommerce UX optimization, to refactoring CSS, design workflows and convincing your clients. With Sarah Drasner, Dan Mall, Sara Soueidan, Jason Grigsby, and <a href="http://smashed.by/confpanelspeakers">many other speakers</a>. Oct <span class="small-caps">23–24</span>.</p>
  2720.      <a href="http://smashed.by/confpanelspeakers" class="btn btn--green btn--large">
  2721.        Check the speakers&nbsp;→
  2722.      </a>
  2723.      </div>
  2724.      <div class="panel__image panel__image--book">
  2725.        <a href="http://smashed.by/confpanelspeakers" class="books__book__image">
  2726.        <div class="books__book__img">
  2727.          <img src="https://res.cloudinary.com/indysigner/image/upload/v1529498640/sarah-drasner-opt_kaxhos.png" alt="SmashingConf New York 2018, with Dan Mall, Sara Soueidan, Sarah Drasner and many others." width="310" height="400">
  2728.        </div>
  2729.      </a>
  2730.      </div>
  2731.    </div>
  2732.  </aside>
  2733.  
  2734.  
  2735.  
  2736.  
  2737. <h3>Generic</h3>
  2738.  
  2739. <ul>
  2740. <li>Anton Sten asks if <a href="https://www.antonsten.com/values/">Tech Sector Values are Broken?</a> Analyzing the marketing strategies by Apple, Microsoft, Google, Amazon but also small other companies and how we can do really purposeful work and stick to our values instead of treating them as marketing-material that we don’t need to respect or stick to.</li>
  2741. <li>Now that the technology sector of the world is rapidly transforming all of the world’s things into digital things, many have called for more ethics in our field. That is in many instances quite a vague goal, so let’s apply it to one part of digital: front-end development. <a href="https://hiddedevries.nl/en/blog/2018-07-05-what-kind-of-ethics-do-front-end-developers-need">How can we be more ethical as front-end developers, what kinds of things can we do</a>? Hidde de Vries wrote an article about that.</li>
  2742. </ul>
  2743.  
  2744. <h3>Security</h3>
  2745.  
  2746. <ul>
  2747. <li>Ticketmaster’s customer data has been compromised and as it seems, <a href="https://www.itwire.com/security/83416-uk-researcher-says-one-line-of-code-caused-ticketmaster-breach.html">it’s due to a customized single line of code that includes a third-party script</a>.</li>
  2748. </ul>
  2749.  
  2750. <h3>UI/UX</h3>
  2751.  
  2752. <ul>
  2753. <li>Eugen Eşanu shows <a href="https://uxplanet.org/10-small-design-mistakes-we-still-make-1cd5f60bc708">ten small design mistakes we still make</a> and what we can do instead to make our design more user-friendly.</li>
  2754. </ul>
  2755.  
  2756.  
  2757.  
  2758.  
  2759.  
  2760.  
  2761.  
  2762.  
  2763.  
  2764.  
  2765.  
  2766. <figure >
  2767. <a href="https://uxplanet.org/10-small-design-mistakes-we-still-make-1cd5f60bc708">
  2768. <img
  2769. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b9c093b8-ed81-46f8-8dfc-758c3a591bb1/what-we-design.png 400w,
  2770.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b9c093b8-ed81-46f8-8dfc-758c3a591bb1/what-we-design.png 800w,
  2771.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b9c093b8-ed81-46f8-8dfc-758c3a591bb1/what-we-design.png 1200w,
  2772.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b9c093b8-ed81-46f8-8dfc-758c3a591bb1/what-we-design.png 1600w,
  2773.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b9c093b8-ed81-46f8-8dfc-758c3a591bb1/what-we-design.png 2000w"
  2774. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b9c093b8-ed81-46f8-8dfc-758c3a591bb1/what-we-design.png"
  2775. sizes="100vw"
  2776. alt="what we design vs. what a user needs"
  2777. />
  2778. </a>
  2779.  
  2780. <figcaption class="op-vertical-bottom">
  2781. Users do not have time to read more than necessary, and yet designers still tend to put a lot of text because they think people need to know that. (<a href='https://uxplanet.org/10-small-design-mistakes-we-still-make-1cd5f60bc708'>Image source</a>)
  2782. </figcaption>
  2783. </figure>
  2784.  
  2785.  
  2786. <h3>Privacy</h3>
  2787.  
  2788. <ul>
  2789. <li>This is an interesting report about <a href="https://www.businessinsider.de/google-allows-app-developers-to-read-peoples-gmails-report-2018-7">how Google allows outside app developers to read people’s Google emails</a> when they grant permission during app authorization. The issue with that is that there is no way to easily prevent that and it might have quite some impact if you use Gmail for your company as it might affect privacy policies and is under subject of GDPR.</li>
  2790. </ul>
  2791.  
  2792. <h3>Web Performance</h3>
  2793.  
  2794. <ul>
  2795. <li>Max Böck on how we can build <a href="https://mxb.at/blog/connection-aware-components/">components that react to the actual device connection speed</a> using the Network Information API. And despite it’s currently only available in Chrome and Samsung Internet browsers, it’s worth trying it out and maybe already serve it to these users.</li>
  2796. <li>From time to time, we can still read articles mentioning the importance of optimizing CSS selectors in order to improve performance. This originates in research done several years ago but Ivan Čurić researched this again <a href="https://www.sitepoint.com/optimizing-css-id-selectors-and-other-myths/">and found out it doesn’t matter</a>.</li>
  2797. </ul>
  2798.  
  2799. <h3>Accessibility</h3>
  2800.  
  2801. <ul>
  2802. <li>Microsoft’s developer team shares a <a href="https://www.youtube.com/playlist?list=PLtSVUgxIo6KqBBGqNdPQG64f-hTs1YxFM">video playlist about practical accessibility</a>, including how to optimize presentations or language for inclusion or how to build a proper “skip navigation” functionality on your website.</li>
  2803. <li>Sara Novak shares how she managed to show empathy by <a href="https://blog.prototypr.io/going-colorblind-an-experiment-in-empathy-and-accessibility-98b7003737ca">experimenting with going colorblind</a> to understand how other people experience the world differently.</li>
  2804. <li>The Developer Tools of Firefox now have an <em>Accessibility Inspector</em> mode. <a href="https://developer.mozilla.org/en-US/docs/Tools/Accessibility_inspector#Accessing_the_accessibility_inspector">Here’s how to activate it and how to use it</a>.</li>
  2805. </ul>
  2806.  
  2807.  
  2808.  
  2809.  
  2810.  
  2811.  
  2812.  
  2813.  
  2814.  
  2815.  
  2816.  
  2817. <figure >
  2818. <a href="https://blog.prototypr.io/going-colorblind-an-experiment-in-empathy-and-accessibility-98b7003737ca">
  2819. <img
  2820. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c524a3a0-3a7a-49ef-81b5-5219a7b37b9e/form-with-color-based-indicators.jpg 400w,
  2821.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c524a3a0-3a7a-49ef-81b5-5219a7b37b9e/form-with-color-based-indicators.jpg 800w,
  2822.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c524a3a0-3a7a-49ef-81b5-5219a7b37b9e/form-with-color-based-indicators.jpg 1200w,
  2823.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c524a3a0-3a7a-49ef-81b5-5219a7b37b9e/form-with-color-based-indicators.jpg 1600w,
  2824.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c524a3a0-3a7a-49ef-81b5-5219a7b37b9e/form-with-color-based-indicators.jpg 2000w"
  2825. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c524a3a0-3a7a-49ef-81b5-5219a7b37b9e/form-with-color-based-indicators.jpg"
  2826. sizes="100vw"
  2827. alt="A form with color-based indicators"
  2828. />
  2829. </a>
  2830.  
  2831. <figcaption class="op-vertical-bottom">
  2832. In her article, Sara Novak explains why it's important not to rely on color alone as an indicator. Symbols and error message can be much more helpful to users. (The image above shows a form with color-based indicators. Left: How a person with normal vision sees a form with color-based indicators. Right: How a deuteranomalous person sees the same form.) (<a href='https://blog.prototypr.io/going-colorblind-an-experiment-in-empathy-and-accessibility-98b7003737ca'>Image source</a>)
  2833. </figcaption>
  2834. </figure>
  2835.  
  2836.  
  2837. <h3>JavaScript</h3>
  2838.  
  2839. <ul>
  2840. <li>Leon Revill show us how we can <a href="https://blog.revillweb.com/extending-native-dom-elements-with-web-components-233350c8e86a">extend existing native DOM elements with Web Components</a>. This is extremely helpful and useful as we can not only save a lot of time by using prebuilt templates for custom elements but also get all the optimizations and defaults (semantics, accessibility, browser functionality) for free and still can build our own behavior on top of it. At the very least, <a href="https://caniuse.com/#feat=custom-elementsv1">if we could use Custom Elements at all</a>, but that’s a different story.</li>
  2841. <li>Gerardo Rodriguez shows how we can easily fail to optimize websites for performance with Service Workers and the Fetch API and how this can result in a quota exception in browsers. Luckily, he found out the reason of this and by setting the proper CORS headers, Gerardo finally <a href="https://cloudfour.com/thinks/when-7-kb-equals-7-mb/">solved the mystery of single-cached opaque responses</a> and tells us how to avoid the issues.</li>
  2842. <li>Filepond is a nice open-source JavaScript file uploader. Rik Schennink <a href="https://itnext.io/filepond-frontend-trickery-a3073c934c77">shares the challenges faced building it</a>.</li>
  2843. <li>Andrea Giammarchi about <a href="https://medium.com/@WebReflection/a-bloatless-web-d4f811c7991b">the problem of bundling JavaScript with Babel and why transpiling code isn’t the best solution anymore</a>. Instead, we should think about how to serve different bundles depending on the browser support to decrease the bundle size and improve performance.</li>
  2844. <li>Justin Fuller shares <a href="https://medium.freecodecamp.org/here-are-three-upcoming-changes-to-javascript-that-youll-love-387bce1bfb0b">three great new features coming to JavaScript soon</a> that will help us write code that is easier to understand, such as operational chaining, nullish coalescing, or the pipeline operator.</li>
  2845. <li>Addy Osmani and Mathias Bynens wrote a primer introduction on <a href="https://developers.google.com/web/fundamentals/primers/modules">how we can use JavaScript modules on the web today</a>.</li>
  2846. </ul>
  2847.  
  2848. <div class="sponsors__wide-place"></div>
  2849.  
  2850.  
  2851.  
  2852.  
  2853. <h3>CSS</h3>
  2854.  
  2855. <ul>
  2856. <li>An article series that covers how we can <a href="https://css-tricks.com/css-grid-in-ie-faking-an-auto-placement-grid-with-gaps/">fake an auto-placement grid with gaps in Internet Explorer</a>.</li>
  2857. <li>CSS Grid is nice, but I often hear that people can’t use it because IE11 doesn’t support it well. But that’s not exactly true as IE11 has a prior version of CSS Grid available that we can easily transpile with autoprefixer. Daniel Tonon explains the <a href="https://css-tricks.com/css-grid-in-ie-debunking-common-ie-grid-misconceptions/">CSS Grid differences and which features we can and cannot use</a> and <a href="https://css-tricks.com/css-grid-in-ie-css-grid-and-the-new-autoprefixer/">will continue with even more tips</a>.</li>
  2858. <li>For many people, CSS Grid is still very new, and it’s very capable and helps us solve a lot of problems when creating grid-based layouts in CSS. But in the current version, there are a couple of things that are still not possible. <a href="https://www.smashingmagazine.com/2018/07/css-grid-2/">CSS Grid level 2 will bring us sub-grids</a> and Rachel Andrew explains what you need that for.</li>
  2859. <li>Is CSS-in-JS good? Is it just bad? Why we constantly fall into the trap of arguing when there are no clear winners and <a href="https://foobartel.com/articles/css-in-js-kindness-and-evolution">how we can do better</a> by acknowledging evolution and seeing things in context.</li>
  2860. </ul>
  2861.  
  2862. <h3>Work & Life</h3>
  2863.  
  2864. <ul>
  2865. <li>Why <a href="https://helloanselm.com/writings/build-to-last">the concept of patience and the strive to build something to last should gain more attention in business</a>. Some thoughts that came into my mind when reading another article and it seems many people like the idea behind this.</li>
  2866. <li><a href="https://ethanmarcotte.com/wrote/just-work/">Ethan Marcotte on how he approaches to choose clients</a> and why he thinks it’s important to only choose clients that you can ethically support. But this also shows how difficult this can be sometimes, as recent discussions about Microsoft’s business cooperations with legal entities show.</li>
  2867. </ul>
  2868.  
  2869. <div class="signature">
  2870.  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial">
  2871.  <span>(il)</span>
  2872. </div>
  2873.  
  2874.  
  2875.              </article>
  2876.            </body>
  2877.          </html>
  2878.        ]]></content:encoded>
  2879.      </item>
  2880.    
  2881.      <item>
  2882.        
  2883.          
  2884.          <author>Isabel Aracama</author>
  2885.        
  2886.        <title>How To Create A Flat Vector Illustration In Affinity Designer</title>
  2887.        <link>https://www.smashingmagazine.com/2018/07/flat-vector-illustration-affinity-designer/</link>
  2888.        <pubDate>Wed, 11 Jul 2018 20:00:02 +0200</pubDate>
  2889.        <guid>https://www.smashingmagazine.com/2018/07/flat-vector-illustration-affinity-designer/</guid>
  2890.        <description>(This is a sponsored post.) If you are in the design world, chances are that you’ve already heard about Affinity Designer, a vector graphics editor for Apple’s macOS and Microsoft Windows.
  2891. It was July 2015 when Serif Europe launched the amazing software that many designers and illustrators like me are using now as their main tool for professional work. Unlike some other packages, its price is really affordable, there’s no subscription model and, as mentioned already, it’s available for both Macs and PCs.</description>
  2892.        <content:encoded><![CDATA[
  2893.          <html>
  2894.            <head>
  2895.              <meta charset="utf-8">
  2896.              <link rel="canonical" href="https://www.smashingmagazine.com/2018/07/flat-vector-illustration-affinity-designer/" />
  2897.              <title>How To Create A Flat Vector Illustration In Affinity Designer</title>
  2898.            </head>
  2899.            <body>
  2900.              <article>
  2901.                <header>
  2902.                  <h1>How To Create A Flat Vector Illustration In Affinity Designer</h1>
  2903.                  
  2904.                    
  2905.                    <address>Isabel Aracama</address>
  2906.                  
  2907.                  <time datetime="2018-07-11T20:00:02&#43;02:00" class="op-published">2018-07-11T20:00:02+02:00</time>
  2908.                  <time datetime="2018-07-23T11:42:51&#43;00:00" class="op-modified">2018-07-23T11:42:51+00:00</time>
  2909.                </header>
  2910.                <p>(<em>This is a sponsored post</em>.) If you are in the design world, chances are that you’ve already heard about <a href="https://affinity.serif.com/en-gb/designer/">Affinity Designer</a>, a vector graphics editor for Apple’s macOS and Microsoft Windows.</p>
  2911.  
  2912. <p>It was July 2015 when Serif Europe launched the amazing software that many designers and illustrators like me are using now as their main tool for professional work. Unlike some other packages, its price is really affordable, there’s no subscription model and, as mentioned already, it’s available for both Macs and PCs.</p>
  2913.  
  2914. <p>In this article, I would like to walk you through just some of its <strong>very user-friendly main tools and features</strong> as an introduction to the software and to show you how we can create a nice flat vector illustration of a Volkswagen Beetle. The illustration will scale up to whatever resolution and size needed because no bitmaps will be used.</p>
  2915.  
  2916. <p><strong>Note</strong>: <em>As of today, July 11, <a href="https://affinity.serif.com/designer/ipad">Affinity Designer is also available for the iPad</a>. Although the iPad app’s features and functionality almost completely match the desktop version of Affinity Designer, it relies much more on using the touch screen (and the Apple Pencil) and because of that, you may expect to find some differences in the workflows.</em></p>
  2917.  
  2918.  
  2919.  
  2920.  
  2921.  
  2922.  
  2923.  
  2924.  
  2925.  
  2926.  
  2927.  
  2928. <figure >
  2929. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5ee149b8-782c-49f4-9f36-3a8d1a5ba33f/finished-beetle.png">
  2930. <img
  2931. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5ee149b8-782c-49f4-9f36-3a8d1a5ba33f/finished-beetle.png 400w,
  2932.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5ee149b8-782c-49f4-9f36-3a8d1a5ba33f/finished-beetle.png 800w,
  2933.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5ee149b8-782c-49f4-9f36-3a8d1a5ba33f/finished-beetle.png 1200w,
  2934.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5ee149b8-782c-49f4-9f36-3a8d1a5ba33f/finished-beetle.png 1600w,
  2935.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5ee149b8-782c-49f4-9f36-3a8d1a5ba33f/finished-beetle.png 2000w"
  2936. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5ee149b8-782c-49f4-9f36-3a8d1a5ba33f/finished-beetle.png"
  2937. sizes="100vw"
  2938. alt="Final image that we’ll be creating in this tutorial."
  2939. />
  2940. </a>
  2941.  
  2942. <figcaption class="op-vertical-bottom">
  2943. Final image that we’ll be creating in this tutorial. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5ee149b8-782c-49f4-9f36-3a8d1a5ba33f/finished-beetle.png'>View large version</a>)
  2944. </figcaption>
  2945. </figure>
  2946.  
  2947.  
  2948. <p>I will also explain some of the <strong>decisions</strong> I take and <strong>methods</strong> I follow as I work. You know the old saying, “All roads lead to Rome”? In this case, many roads will take us where we’d like to get to, but some are better than others.</p>
  2949.  
  2950. <p>We will see how to work with the Pen tool to trace the main car outline, how to break curves and segments, how to convert objects into curves, and how to use the wonderful Corner tool. We will also, among other things, learn how to use the Gradient tool, what is a “Smart copy”, how to import a color palette from an image that we can use as a reference for our artwork, how to use masks, and how to create a halftone pattern. Of course, along the way, you will also learn some helpful keyboard shortcuts and commands.</p>
  2951.  
  2952. <p><strong>Note:</strong> <em>Affinity Designer has three work environments, referred to as “personas”. By default, Affinity Designer is set to the draw persona. To switch from the draw persona to the pixel persona or to the export persona, you have to click on one of the three icons located in the top-left corner of the main window. You can start working in the draw persona and switch to the pixel persona at any time, when you need to combine vectors and bitmaps.</em></p>
  2953.  
  2954. <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ee665268-a281-4165-8aff-421cb80ed105/3-personas.png"><img src="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ee665268-a281-4165-8aff-421cb80ed105/3-personas.png" width="466" height="222" alt="The three work environments: draw persona (leftmost icon), bitmap persona (middle icon) and export persona (rightmost icon)." /></a><figcaption>The three work environments: draw persona (leftmost icon), bitmap persona (middle icon) and export persona (rightmost icon). (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ee665268-a281-4165-8aff-421cb80ed105/3-personas.png">View large version</a>)</figcaption></figure>
  2955.  
  2956. <h3>Introduction: The Flat Design Era</h3>
  2957.  
  2958. <p>In recent years, we’ve seen the rise of <a href="https://en.wikipedia.org/wiki/Flat_design">"flat design"</a>, in contrast to what is known as skeuomorphic representation in design.</p>
  2959.  
  2960. <p>To put it simply, flat design gets rid of the metaphors that skeuomorphic design uses to communicate with users, and we’ve seen these metaphors in design, especially in user interface design, for years. Apple had some of the best examples of skeuomorphism in its early iOS and app designs, and today it is widely used in many industries, such as music software and video games. With Microsoft’s (with <a href="https://en.wikipedia.org/wiki/Metro_(design_language)">Metro</a>) and later Google’s <a href="https://material.io/guidelines/">material design</a> and Apple’s iOS 7, mobile apps, user interfaces and most systems and OS’ have moved away from skeuomorphism, using it or elements of it as mere enhancements to a new design language (including gradients and shadows). As you can imagine, illustrations on these systems were also affected by the new design currents, and illustrators and designers started creating artwork that would be consistent with the new times and needs. A whole new world of flat icons, flat infographics and flat illustrations opened in front of our eyes.</p>
  2961.  
  2962.  
  2963.  
  2964.  
  2965.  
  2966.  
  2967.  
  2968.  
  2969.  
  2970.  
  2971.  
  2972. <figure >
  2973. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5db1b06b-fef6-4587-9fc7-4969801f3c58/iphone-home-screen.png">
  2974. <img
  2975. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5db1b06b-fef6-4587-9fc7-4969801f3c58/iphone-home-screen.png 400w,
  2976.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5db1b06b-fef6-4587-9fc7-4969801f3c58/iphone-home-screen.png 800w,
  2977.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5db1b06b-fef6-4587-9fc7-4969801f3c58/iphone-home-screen.png 1200w,
  2978.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5db1b06b-fef6-4587-9fc7-4969801f3c58/iphone-home-screen.png 1600w,
  2979.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5db1b06b-fef6-4587-9fc7-4969801f3c58/iphone-home-screen.png 2000w"
  2980. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5db1b06b-fef6-4587-9fc7-4969801f3c58/iphone-home-screen.png"
  2981. sizes="100vw"
  2982. alt="iPhone’s home screen (iOS 6 versus iOS 7)."
  2983. />
  2984. </a>
  2985.  
  2986. <figcaption class="op-vertical-bottom">
  2987. iPhone’s home screen (iOS 6 versus iOS 7). (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5db1b06b-fef6-4587-9fc7-4969801f3c58/iphone-home-screen.png'>View large version</a>)
  2988. </figcaption>
  2989. </figure>
  2990.  
  2991.  
  2992.  
  2993.  
  2994.  
  2995.  
  2996.  
  2997.  
  2998.  
  2999.  
  3000.  
  3001.  
  3002. <figure >
  3003. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/de0b8fed-374c-4cd9-a437-4b2afb182557/01-how-to-create-a-flat-vector-illustration-in-affinity-designe.png">
  3004. <img
  3005. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/de0b8fed-374c-4cd9-a437-4b2afb182557/01-how-to-create-a-flat-vector-illustration-in-affinity-designe.png 400w,
  3006.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/de0b8fed-374c-4cd9-a437-4b2afb182557/01-how-to-create-a-flat-vector-illustration-in-affinity-designe.png 800w,
  3007.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/de0b8fed-374c-4cd9-a437-4b2afb182557/01-how-to-create-a-flat-vector-illustration-in-affinity-designe.png 1200w,
  3008.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/de0b8fed-374c-4cd9-a437-4b2afb182557/01-how-to-create-a-flat-vector-illustration-in-affinity-designe.png 1600w,
  3009.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/de0b8fed-374c-4cd9-a437-4b2afb182557/01-how-to-create-a-flat-vector-illustration-in-affinity-designe.png 2000w"
  3010. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/de0b8fed-374c-4cd9-a437-4b2afb182557/01-how-to-create-a-flat-vector-illustration-in-affinity-designe.png"
  3011. sizes="100vw"
  3012. alt=""
  3013. />
  3014. </a>
  3015.  
  3016. <figcaption class="op-vertical-bottom">
  3017. (<a href='https://dribbble.com/shots/3296825-Holocards/attachments/711099'>Image source</a>) (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/de0b8fed-374c-4cd9-a437-4b2afb182557/01-how-to-create-a-flat-vector-illustration-in-affinity-designe.png'>View large version</a>)
  3018. </figcaption>
  3019. </figure>
  3020.  
  3021.  
  3022.  
  3023.  
  3024.  
  3025.  
  3026.  
  3027.  
  3028.  
  3029.  
  3030.  
  3031.  
  3032. <figure >
  3033. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c51eee35-db64-4981-9dc4-f87ecdb3ccff/02-how-to-create-a-flat-vector-illustration-in-affinity-designe.png">
  3034. <img
  3035. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c51eee35-db64-4981-9dc4-f87ecdb3ccff/02-how-to-create-a-flat-vector-illustration-in-affinity-designe.png 400w,
  3036.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c51eee35-db64-4981-9dc4-f87ecdb3ccff/02-how-to-create-a-flat-vector-illustration-in-affinity-designe.png 800w,
  3037.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c51eee35-db64-4981-9dc4-f87ecdb3ccff/02-how-to-create-a-flat-vector-illustration-in-affinity-designe.png 1200w,
  3038.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c51eee35-db64-4981-9dc4-f87ecdb3ccff/02-how-to-create-a-flat-vector-illustration-in-affinity-designe.png 1600w,
  3039.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c51eee35-db64-4981-9dc4-f87ecdb3ccff/02-how-to-create-a-flat-vector-illustration-in-affinity-designe.png 2000w"
  3040. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c51eee35-db64-4981-9dc4-f87ecdb3ccff/02-how-to-create-a-flat-vector-illustration-in-affinity-designe.png"
  3041. sizes="100vw"
  3042. alt=""
  3043. />
  3044. </a>
  3045.  
  3046. <figcaption class="op-vertical-bottom">
  3047. (<a href='https://dribbble.com/shots/2350717-The-second-part'>Image source</a>) (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c51eee35-db64-4981-9dc4-f87ecdb3ccff/02-how-to-create-a-flat-vector-illustration-in-affinity-designe.png'>View large version</a>)
  3048. </figcaption>
  3049. </figure>
  3050.  
  3051.  
  3052.  
  3053.  
  3054.  
  3055.  
  3056.  
  3057.  
  3058.  
  3059.  
  3060.  
  3061.  
  3062. <figure >
  3063. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6f8d4735-0573-48bf-8785-fd5c18d2446d/03-how-to-create-a-flat-vector-illustration-in-affinity-designe.png">
  3064. <img
  3065. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6f8d4735-0573-48bf-8785-fd5c18d2446d/03-how-to-create-a-flat-vector-illustration-in-affinity-designe.png 400w,
  3066.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6f8d4735-0573-48bf-8785-fd5c18d2446d/03-how-to-create-a-flat-vector-illustration-in-affinity-designe.png 800w,
  3067.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6f8d4735-0573-48bf-8785-fd5c18d2446d/03-how-to-create-a-flat-vector-illustration-in-affinity-designe.png 1200w,
  3068.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6f8d4735-0573-48bf-8785-fd5c18d2446d/03-how-to-create-a-flat-vector-illustration-in-affinity-designe.png 1600w,
  3069.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6f8d4735-0573-48bf-8785-fd5c18d2446d/03-how-to-create-a-flat-vector-illustration-in-affinity-designe.png 2000w"
  3070. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6f8d4735-0573-48bf-8785-fd5c18d2446d/03-how-to-create-a-flat-vector-illustration-in-affinity-designe.png"
  3071. sizes="100vw"
  3072. alt=""
  3073. />
  3074. </a>
  3075.  
  3076. <figcaption class="op-vertical-bottom">
  3077. (<a href='https://dribbble.com/shots/1036448-Flat-Design-Icons-Set-Vol1'>Image source</a>) (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6f8d4735-0573-48bf-8785-fd5c18d2446d/03-how-to-create-a-flat-vector-illustration-in-affinity-designe.png'>View large version</a>)
  3078. </figcaption>
  3079. </figure>
  3080.  
  3081.  
  3082.  
  3083.  
  3084.  
  3085.  
  3086.  
  3087.  
  3088.  
  3089.  
  3090.  
  3091.  
  3092. <figure >
  3093. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7a2f6aff-9a59-4b78-875a-967c1aa34d08/04-how-to-create-a-flat-vector-illustration-in-affinity-designe.png">
  3094. <img
  3095. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7a2f6aff-9a59-4b78-875a-967c1aa34d08/04-how-to-create-a-flat-vector-illustration-in-affinity-designe.png 400w,
  3096.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7a2f6aff-9a59-4b78-875a-967c1aa34d08/04-how-to-create-a-flat-vector-illustration-in-affinity-designe.png 800w,
  3097.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7a2f6aff-9a59-4b78-875a-967c1aa34d08/04-how-to-create-a-flat-vector-illustration-in-affinity-designe.png 1200w,
  3098.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7a2f6aff-9a59-4b78-875a-967c1aa34d08/04-how-to-create-a-flat-vector-illustration-in-affinity-designe.png 1600w,
  3099.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7a2f6aff-9a59-4b78-875a-967c1aa34d08/04-how-to-create-a-flat-vector-illustration-in-affinity-designe.png 2000w"
  3100. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7a2f6aff-9a59-4b78-875a-967c1aa34d08/04-how-to-create-a-flat-vector-illustration-in-affinity-designe.png"
  3101. sizes="100vw"
  3102. alt=""
  3103. />
  3104. </a>
  3105.  
  3106. <figcaption class="op-vertical-bottom">
  3107. (<a href='https://dribbble.com/shots/2495305-Infographic/attachments/490101'>Image source</a>) (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7a2f6aff-9a59-4b78-875a-967c1aa34d08/04-how-to-create-a-flat-vector-illustration-in-affinity-designe.png'>View large version</a>)
  3108. </figcaption>
  3109. </figure>
  3110.  
  3111.  
  3112. <h3>Let’s Draw A Flat Illustration!</h3>
  3113.  
  3114. <p>I am providing the source file for this work over <a href="http://provide.smashingmagazine.com/IsabelAracama_Beetle_source-file.zip">here</a>, so you can use it to explore it and to better follow along as we design it. If you do not yet have a copy of Affinity Designer, you can <a href="https://affinity.serif.com/en-gb/signup/trial/designer/">download a trial</a>.</p>
  3115.  
  3116. <h4>1. Canvas Settings</h4>
  3117.  
  3118. <p>Open Affinity Designer, and create a new document by clicking <kbd>Cmd</kbd> + <kbd>N</kbd> (Mac) or <kbd>Ctrl</kbd> + <kbd>N</kbd> (Windows). Alternatively, you can go to “Menu” &rarr; “File” &rarr; “New”. Be sure not to check the “Create Artboard” box.</p>
  3119.  
  3120. <p>Set the type to “Web”, which will automatically set the field DPI to 72. It should be understood now as PPI, but we won’t dive into the details here. If you want to learn more on the topic, check the following two resources:</p>
  3121.  
  3122. <ul>
  3123. <li>“<a href="https://forum.affinity.serif.com/index.php?/topic/25774-its-ppi-not-dpi/">
  3124. It’s PPI not DPI</a>,” Forums, Affinity</li>
  3125.  
  3126. <li>“<a href="https://en.99designs.es/blog/tips/ppi-vs-dpi-whats-the-difference/">PPI vs. DPI: What’s the Difference?</a>,” Alex Bigman, 99designs</li>
  3127. </ul>
  3128.  
  3129. <p>Also, remember that you can change this setting at any time. The vectors’ quality won’t be affected by scaling them.</p>
  3130.  
  3131. <p>Set the size to 2000 &#215; 1300 pixels, and click “OK”.</p>
  3132.  
  3133. <p>Our white canvas is now set, but before we start, I’d suggest you first save this file and give it a name. So, go to “File” &rarr; “Save”, and name it “Beetle”.</p>
  3134.  
  3135. <h4>2. Importing A Color Palette From An Image</h4>
  3136.  
  3137. <p>One of the things I use a lot in Affinity Designer is its ability to <strong>import the colors</strong> contained in an image and creating a palette from them.</p>
  3138.  
  3139. <p>Let’s see how this is done.</p>
  3140.  
  3141. <p>For the illustration I want to draw, I thought of warm colors, like in a sunset, so I searched Google with this query: “warm colors yellows oranges reds palette”. From all the images it found, I chose one that I liked and copied it into Affinity Designer in my recently created canvas. (You can copy and paste the image to the canvas directly from the browser.)</p>
  3142.  
  3143. <p>If the Swatches panel isn’t open yet, use menu “View” &rarr; “Studio” &rarr; “Swatches”. Click the menu in the top-right corner of the panel, and select the option “Create Palette From Document”, and then click on “As Document Palette”. Click “OK” and you’ll see the colors contained in the image form a new palette in the Swatches panel. The default name for it will be “Palette” if you still haven’t saved your file with a name. In case you have, the name of this palette will be the same as your document, but if you want to rename it, simply go to the menu on the right in the Swatches panel again and select the option “Rename Palette”.</p>
  3144.  
  3145. <p>I will call it “Beetle Palette”.</p>
  3146.  
  3147.  
  3148.  
  3149.  
  3150.  
  3151.  
  3152.  
  3153.  
  3154.  
  3155.  
  3156.  
  3157. <figure class="article__image break-out">
  3158. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/586785ca-7203-45ff-907c-b0a3302cc670/01-doc-palette.png">
  3159. <img
  3160. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/586785ca-7203-45ff-907c-b0a3302cc670/01-doc-palette.png 400w,
  3161.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/586785ca-7203-45ff-907c-b0a3302cc670/01-doc-palette.png 800w,
  3162.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/586785ca-7203-45ff-907c-b0a3302cc670/01-doc-palette.png 1200w,
  3163.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/586785ca-7203-45ff-907c-b0a3302cc670/01-doc-palette.png 1600w,
  3164.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/586785ca-7203-45ff-907c-b0a3302cc670/01-doc-palette.png 2000w"
  3165. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/586785ca-7203-45ff-907c-b0a3302cc670/01-doc-palette.png"
  3166. sizes="100vw"
  3167. alt="Creating a palette from an image."
  3168. />
  3169. </a>
  3170.  
  3171. <figcaption class="op-vertical-bottom">
  3172. Creating a palette from an image. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/586785ca-7203-45ff-907c-b0a3302cc670/01-doc-palette.png'>View large version</a>)
  3173. </figcaption>
  3174. </figure>
  3175.  
  3176.  
  3177. <p>We can now get rid of that reference image, or simply hide it in the Layers panel. We will be using this palette as a guide to create our artwork with harmonious colors.</p>
  3178.  
  3179. <p><strong>Interface:</strong> Before we continue, I will present a quick overview of the main sections of the user interface in Affinity Designer, and the names of some of the most used tools.</p>
  3180.  
  3181.  
  3182.  
  3183.  
  3184.  
  3185.  
  3186.  
  3187.  
  3188.  
  3189.  
  3190.  
  3191. <figure class="article__image break-out">
  3192. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dfe876e7-8485-4ff6-b88e-5c5087d1dc6b/main-parts-ui.png">
  3193. <img
  3194. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dfe876e7-8485-4ff6-b88e-5c5087d1dc6b/main-parts-ui.png 400w,
  3195.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dfe876e7-8485-4ff6-b88e-5c5087d1dc6b/main-parts-ui.png 800w,
  3196.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dfe876e7-8485-4ff6-b88e-5c5087d1dc6b/main-parts-ui.png 1200w,
  3197.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dfe876e7-8485-4ff6-b88e-5c5087d1dc6b/main-parts-ui.png 1600w,
  3198.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dfe876e7-8485-4ff6-b88e-5c5087d1dc6b/main-parts-ui.png 2000w"
  3199. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dfe876e7-8485-4ff6-b88e-5c5087d1dc6b/main-parts-ui.png"
  3200. sizes="100vw"
  3201. alt="Main areas of the UI in Affinity Designer when using the draw persona."
  3202. />
  3203. </a>
  3204.  
  3205. <figcaption class="op-vertical-bottom">
  3206. Main areas of the UI in Affinity Designer when using the draw persona. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6797bca1-d782-447c-b84a-2b81483a5e12/05-how-to-create-a-flat-vector-illustration-in-affinity-designe.png'>View large version</a>)
  3207. </figcaption>
  3208. </figure>
  3209.  
  3210.  
  3211.  
  3212.  
  3213.  
  3214.  
  3215.  
  3216.  
  3217.  
  3218.  
  3219.  
  3220.  
  3221. <figure class="article__image break-out">
  3222. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8f6a1f3a-4bec-4e39-9599-a2e151eb32cd/tools-tooltips-draw-persona.png">
  3223. <img
  3224. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8f6a1f3a-4bec-4e39-9599-a2e151eb32cd/tools-tooltips-draw-persona.png 400w,
  3225.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8f6a1f3a-4bec-4e39-9599-a2e151eb32cd/tools-tooltips-draw-persona.png 800w,
  3226.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8f6a1f3a-4bec-4e39-9599-a2e151eb32cd/tools-tooltips-draw-persona.png 1200w,
  3227.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8f6a1f3a-4bec-4e39-9599-a2e151eb32cd/tools-tooltips-draw-persona.png 1600w,
  3228.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8f6a1f3a-4bec-4e39-9599-a2e151eb32cd/tools-tooltips-draw-persona.png 2000w"
  3229. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8f6a1f3a-4bec-4e39-9599-a2e151eb32cd/tools-tooltips-draw-persona.png"
  3230. sizes="100vw"
  3231. alt="Tools for the (default) draw persona in Affinity Designer."
  3232. />
  3233. </a>
  3234.  
  3235. <figcaption class="op-vertical-bottom">
  3236. Tools for the (default) draw persona in Affinity Designer. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8f6a1f3a-4bec-4e39-9599-a2e151eb32cd/tools-tooltips-draw-persona.png'>View large version</a>)
  3237. </figcaption>
  3238. </figure>
  3239.  
  3240.  
  3241. <h4>3. Creating The Background With The Gradient Tool</h4>
  3242.  
  3243. <p>The next thing is to create a background. For this, go to the tools displayed on the left side, and select the Rectangle tool. Drag it along the canvas, making sure to give it an initial random fill color so that you can see it. The fill color chip is located in the top toolbar.</p>
  3244.  
  3245.  
  3246.  
  3247.  
  3248.  
  3249.  
  3250.  
  3251.  
  3252.  
  3253.  
  3254.  
  3255. <figure class="article__image break-out">
  3256. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/116a8b28-97b7-4020-8cbb-62a6da16474b/02-background-color.png">
  3257. <img
  3258. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/116a8b28-97b7-4020-8cbb-62a6da16474b/02-background-color.png 400w,
  3259.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/116a8b28-97b7-4020-8cbb-62a6da16474b/02-background-color.png 800w,
  3260.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/116a8b28-97b7-4020-8cbb-62a6da16474b/02-background-color.png 1200w,
  3261.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/116a8b28-97b7-4020-8cbb-62a6da16474b/02-background-color.png 1600w,
  3262.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/116a8b28-97b7-4020-8cbb-62a6da16474b/02-background-color.png 2000w"
  3263. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/116a8b28-97b7-4020-8cbb-62a6da16474b/02-background-color.png"
  3264. sizes="100vw"
  3265. alt="Click the Rectangle tool and drag it along the canvas. Fill it with a random color."
  3266. />
  3267. </a>
  3268.  
  3269. <figcaption class="op-vertical-bottom">
  3270. Click the Rectangle tool and drag it along the canvas. Fill it with a random color. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/116a8b28-97b7-4020-8cbb-62a6da16474b/02-background-color.png'>View large version</a>)
  3271. </figcaption>
  3272. </figure>
  3273.  
  3274.  
  3275. <p>Next, select the Fill tool (the color wheel icon, or press <kbd>G</kbd> on the keyboard), and in the top Context toolbar, select the type: “Linear”.</p>
  3276.  
  3277.  
  3278.  
  3279.  
  3280.  
  3281.  
  3282.  
  3283.  
  3284.  
  3285.  
  3286.  
  3287. <figure class="article__image break-out">
  3288. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/955fcebc-41c6-4bdd-9d6e-ad48ccf3521e/03-linear-gradient.png">
  3289. <img
  3290. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/955fcebc-41c6-4bdd-9d6e-ad48ccf3521e/03-linear-gradient.png 400w,
  3291.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/955fcebc-41c6-4bdd-9d6e-ad48ccf3521e/03-linear-gradient.png 800w,
  3292.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/955fcebc-41c6-4bdd-9d6e-ad48ccf3521e/03-linear-gradient.png 1200w,
  3293.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/955fcebc-41c6-4bdd-9d6e-ad48ccf3521e/03-linear-gradient.png 1600w,
  3294.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/955fcebc-41c6-4bdd-9d6e-ad48ccf3521e/03-linear-gradient.png 2000w"
  3295. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/955fcebc-41c6-4bdd-9d6e-ad48ccf3521e/03-linear-gradient.png"
  3296. sizes="100vw"
  3297. alt="Select “Linear” from the Fill tool’s contextual menu."
  3298. />
  3299. </a>
  3300.  
  3301. <figcaption class="op-vertical-bottom">
  3302. Select “Linear” from the Fill tool’s contextual menu. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/955fcebc-41c6-4bdd-9d6e-ad48ccf3521e/03-linear-gradient.png'>View large version</a>)
  3303. </figcaption>
  3304. </figure>
  3305.  
  3306.  
  3307. <p>We have several options here: “None” removes the fill color, “Solid” applies one solid color, and all of the rest are different types of gradients.</p>
  3308.  
  3309. <p>To straighten the gradient and make it vertical, place your cursor over one of the ends and pull. When you are near the vertical line, press <kbd>Shift</kbd>: This will make it perfectly vertical and perpendicular to the base of the canvas.</p>
  3310.  
  3311. <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bcbf8dd4-c4a6-48a9-b544-df83b27721cc/gradient-shift.gif"><img src="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bcbf8dd4-c4a6-48a9-b544-df83b27721cc/gradient-shift.gif" width="800" height="500" alt="To straighten a linear gradient, pull from one end, and then press the Shift key to make it perfectly vertical." /></a><figcaption>To straighten a linear gradient, pull from one end, and then press the Shift key to make it perfectly vertical. (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bcbf8dd4-c4a6-48a9-b544-df83b27721cc/gradient-shift.gif">View large version</a>)</figcaption></figure>
  3312.  
  3313. <p>Next, in the Context toolbar, click on the color chip, and you’ll see a dialog that corresponds exactly with the gradient we just applied. Click now on the color chip, and an additional dialog will open.</p>
  3314.  
  3315. <p>In the combo, click on the “Color” tab, and then select “RGB Hex Sliders”; in the field marked with a <strong>#</strong>, input the value: <code>FE8876</code>. Press “OK”. You’ll see now how the gradient has been updated to the new color. Repeat this action with the other color stop in the gradient dialog, and input this value: <code>E1C372</code>.</p>
  3316.  
  3317. <p>You should now have something like this:</p>
  3318.  
  3319.  
  3320.  
  3321.  
  3322.  
  3323.  
  3324.  
  3325.  
  3326.  
  3327.  
  3328.  
  3329. <figure class="article__image break-out">
  3330. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cac8348c-a33d-454e-896d-3b8454ce646e/05-gradient-finished.png">
  3331. <img
  3332. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cac8348c-a33d-454e-896d-3b8454ce646e/05-gradient-finished.png 400w,
  3333.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cac8348c-a33d-454e-896d-3b8454ce646e/05-gradient-finished.png 800w,
  3334.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cac8348c-a33d-454e-896d-3b8454ce646e/05-gradient-finished.png 1200w,
  3335.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cac8348c-a33d-454e-896d-3b8454ce646e/05-gradient-finished.png 1600w,
  3336.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cac8348c-a33d-454e-896d-3b8454ce646e/05-gradient-finished.png 2000w"
  3337. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cac8348c-a33d-454e-896d-3b8454ce646e/05-gradient-finished.png"
  3338. sizes="100vw"
  3339. alt="Setting gradient colors."
  3340. />
  3341. </a>
  3342.  
  3343. <figcaption class="op-vertical-bottom">
  3344. Setting gradient colors (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cac8348c-a33d-454e-896d-3b8454ce646e/05-gradient-finished.png'>View large version</a>)
  3345. </figcaption>
  3346. </figure>
  3347.  
  3348.  
  3349. <p>Let’s go to the Layers panel and rename the layer to “Background”. Double-click on it to rename it, and then lock it (by clicking on the little lock icon in the top-right corner).</p>
  3350.  
  3351. <h4>4. Drawing The Car Outline With The Pen Tool</h4>
  3352.  
  3353. <p>The next thing we need to do is look for an image that will serve as our reference to draw the outline of the car. I searched Google for “Volkswagen Beetle side view”. From the images I found, I selected one of a green Beetle and copied and pasted it into my document. (Remember to lock the layer with the reference image, so that it doesn’t move accidentally.)</p>
  3354.  
  3355. <p>Next, in the side toolbar, select the Pen tool (or press <kbd>P</kbd>), zoom in a bit so that you can work more comfortably, and start tracing a segment, following the outline of the car in the picture. Give the stroke an 8-pixel width in the Stroke panel.</p>
  3356.  
  3357. <p><strong>Note:</strong> <em>You won’t need to create a layer, because the segments you trace will be automatically placed on top of the image.</em></p>
  3358.  
  3359. <p>The Pen tool is one of the most daunting tools for beginners, and it is obviously one of the most important tools to learn in vector graphics. While practice is needed to reach perfection, it is also a matter of understanding some simple actions that will help you use the tool better. Let’s dive into the details!</p>
  3360.  
  3361. <p>As you trace with the Pen tool in Affinity Designer, you will see <strong>two types</strong> of nodes: <strong>squared</strong> nodes appear first, and as you pull the handles, they will turn into <strong>rounded</strong> nodes.</p>
  3362.  
  3363.  
  3364.  
  3365.  
  3366.  
  3367.  
  3368.  
  3369.  
  3370.  
  3371.  
  3372.  
  3373. <figure class="article__image break-out">
  3374. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/569aec2b-7231-407c-9415-84b5e00748fb/06-nodes-handlers.png">
  3375. <img
  3376. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/569aec2b-7231-407c-9415-84b5e00748fb/06-nodes-handlers.png 400w,
  3377.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/569aec2b-7231-407c-9415-84b5e00748fb/06-nodes-handlers.png 800w,
  3378.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/569aec2b-7231-407c-9415-84b5e00748fb/06-nodes-handlers.png 1200w,
  3379.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/569aec2b-7231-407c-9415-84b5e00748fb/06-nodes-handlers.png 1600w,
  3380.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/569aec2b-7231-407c-9415-84b5e00748fb/06-nodes-handlers.png 2000w"
  3381. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/569aec2b-7231-407c-9415-84b5e00748fb/06-nodes-handlers.png"
  3382. sizes="100vw"
  3383. alt="Sharp, smooth nodes and handles on a path segment"
  3384. />
  3385. </a>
  3386.  
  3387. <figcaption class="op-vertical-bottom">
  3388. Sharp, smooth nodes and handles on a path segment (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/569aec2b-7231-407c-9415-84b5e00748fb/06-nodes-handlers.png'>View large version</a>)
  3389. </figcaption>
  3390. </figure>
  3391.  
  3392.  
  3393. <p>Affinity Designer comes with several pen modes, but we will only be using the default one, called “Pen Mode”, and as we trace the car, we will get rid of one of the handles by clicking <kbd>Alt</kbd> in such a way that the next section of the segment to be traced will be independent of the previous one, even if connected to it.</p>
  3394.  
  3395. <p>Here’s how to proceed. Select the Pen tool, click once, move some distance away, click a second time (a straight line will be created between nodes 1 and 2), drag the second node (this will create a curve), <kbd>Alt</kbd>-click the node to <strong>remove</strong> the second control handle, then proceed with node 3, and so on.</p>
  3396.  
  3397. <p>An alternative way would be to select the Pen tool, click once, move some distance away, click a second time (a straight line will be created between nodes 1 and 2), drag the second node (this will create a curve), then, without moving the mouse, <kbd>Alt</kbd>-click the second handle’s point to remove this handle, then proceed with node 3, and so on.</p>
  3398.  
  3399. <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6800cf00-0f55-4ad4-86f5-67a73bf9649e/pen-tool.gif"><img src="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6800cf00-0f55-4ad4-86f5-67a73bf9649e/pen-tool.gif" width="600" height="375" alt="Trace the outline of the car and get rid of the handles we don’t need by Alt-clicking." /></a><figcaption>Trace the outline of the car and get rid of the handles we don’t need by Alt-clicking. (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6800cf00-0f55-4ad4-86f5-67a73bf9649e/pen-tool.gif">View large version</a>)</figcaption></figure>
  3400.  
  3401. <p><strong>Note:</strong> <em>Don’ be afraid to trace segments that are not perfect. With time, you’ll get a better grip of the Pen tool. For now, it’s not very important that each node and line looks as we want it to look in the end. In fact, Affinity Designer makes it really easy to amend segments and nodes, so tracing a rough line to start is just fine. For more insight on how to easily use the Pen tool (for beginners), check out Isabel Aracama’s <a href="https://www.youtube.com/watch?v=BSomsJpKDaw">video tutorial</a>.</em></p>
  3402.  
  3403. <h4>5. Resculpting Segments And Using The Corner Tool</h4>
  3404.  
  3405. <p>What we need now is to make all of those rough lines look smooth and curvy. First, we will pull the straight segments to smoothen them, and then we will improve them using the Corner tool.</p>
  3406.  
  3407. <p>Click the Node tool in the side toolbar, or select it by pressing <kbd>A</kbd> on your keyboard. Now, start pulling segments to follow the lines of your reference picture. You can also use the handles to help make the line take the shape you need by moving and pulling them accordingly. Just do it in such a way that it all fits the reference image, but don’t bother much if it’s not yet perfect. With the Node tool (A), you can both <strong>select and move nodes</strong>, but you can also click and drag the curves themselves to change them.</p>
  3408.  
  3409. <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/72b9eccb-ae02-4972-9269-95bdbc9ca91c/amend-segments.gif"><img src="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/72b9eccb-ae02-4972-9269-95bdbc9ca91c/amend-segments.gif" width="600" height="375" alt="Resculpt and correct segments with the Node tool A." /></a><figcaption>Resculpt and correct segments with the Node tool (<kbd>A</kbd>). (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/72b9eccb-ae02-4972-9269-95bdbc9ca91c/amend-segments.gif">View large version</a>)</figcaption></figure>
  3410.  
  3411. <p>Once all of the segments are where we need them, we are going to smoothen their corners using the Corner tool (shortcut: <kbd>C</kbd>). This is one of my favorite tools in Affinity Designer. The live Corner tool allows you to adjust your nodes and segments to perfection. Select it by pressing <kbd>C</kbd>, or select it from the Tools sidebar. The method is pretty simple: Pass the corner tool over the sharp nodes (squared nodes) that you want to smoothen. If you need to, switch back to the Node tool (<kbd>A</kbd>) to adjust a section of a segment by pulling it or its handles. (Smooth nodes (rounded nodes) don’t allow for more softening, and they will display a smaller circle the moment you select the Corner tool.)</p>
  3412.  
  3413.  
  3414.  
  3415.  
  3416.  
  3417.  
  3418.  
  3419.  
  3420.  
  3421.  
  3422.  
  3423. <figure >
  3424. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/45e25645-d195-487d-8bd9-620d4f7c9464/07-corner-tool-icon.png">
  3425. <img
  3426. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/45e25645-d195-487d-8bd9-620d4f7c9464/07-corner-tool-icon.png 400w,
  3427.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/45e25645-d195-487d-8bd9-620d4f7c9464/07-corner-tool-icon.png 800w,
  3428.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/45e25645-d195-487d-8bd9-620d4f7c9464/07-corner-tool-icon.png 1200w,
  3429.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/45e25645-d195-487d-8bd9-620d4f7c9464/07-corner-tool-icon.png 1600w,
  3430.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/45e25645-d195-487d-8bd9-620d4f7c9464/07-corner-tool-icon.png 2000w"
  3431. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/45e25645-d195-487d-8bd9-620d4f7c9464/07-corner-tool-icon.png"
  3432. sizes="100vw"
  3433. alt=""
  3434. />
  3435. </a>
  3436.  
  3437. <figcaption class="op-vertical-bottom">
  3438. <a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/45e25645-d195-487d-8bd9-620d4f7c9464/07-corner-tool-icon.png'>View large version</a>
  3439. </figcaption>
  3440. </figure>
  3441.  
  3442.  
  3443.  
  3444.  
  3445.  
  3446.  
  3447.  
  3448.  
  3449.  
  3450.  
  3451.  
  3452.  
  3453. <figure >
  3454. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4c31db59-cf3a-4621-b352-82e2f37b660d/08-nodes-corner.png">
  3455. <img
  3456. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4c31db59-cf3a-4621-b352-82e2f37b660d/08-nodes-corner.png 400w,
  3457.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4c31db59-cf3a-4621-b352-82e2f37b660d/08-nodes-corner.png 800w,
  3458.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4c31db59-cf3a-4621-b352-82e2f37b660d/08-nodes-corner.png 1200w,
  3459.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4c31db59-cf3a-4621-b352-82e2f37b660d/08-nodes-corner.png 1600w,
  3460.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4c31db59-cf3a-4621-b352-82e2f37b660d/08-nodes-corner.png 2000w"
  3461. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4c31db59-cf3a-4621-b352-82e2f37b660d/08-nodes-corner.png"
  3462. sizes="100vw"
  3463. alt=""
  3464. />
  3465. </a>
  3466.  
  3467. <figcaption class="op-vertical-bottom">
  3468. <a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4c31db59-cf3a-4621-b352-82e2f37b660d/08-nodes-corner.png'>View large version</a>
  3469. </figcaption>
  3470. </figure>
  3471.  
  3472.  
  3473. <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9046c1a0-9b9e-4efd-8af6-7d41cffb3d62/corner-tool.gif"><img src="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9046c1a0-9b9e-4efd-8af6-7d41cffb3d62/corner-tool.gif" width="800" height="500" alt="Use the Corner tool on sharp nodes to smoothen the lines." /></a><figcaption>Use the Corner tool on sharp nodes to smoothen the lines. (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9046c1a0-9b9e-4efd-8af6-7d41cffb3d62/corner-tool.gif">View large version</a>)</figcaption></figure>
  3474.  
  3475. <p>Once our corners and segments look good, we’ll want to fill the shape and change the color of the stroke. Select the closed curve line that we just created for the car, click on the fill color chip, and in the HEX color field input <code>FFCF23</code>. Click on the stroke color chip beside it and input <code>131000</code>.</p>
  3476.  
  3477.  
  3478.  
  3479.  
  3480.  
  3481.  
  3482.  
  3483.  
  3484.  
  3485.  
  3486.  
  3487. <figure class="article__image break-out">
  3488. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6fdb970e-8cdb-4e34-a58f-92471f4d5064/09-fill-and-stroke.png">
  3489. <img
  3490. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6fdb970e-8cdb-4e34-a58f-92471f4d5064/09-fill-and-stroke.png 400w,
  3491.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6fdb970e-8cdb-4e34-a58f-92471f4d5064/09-fill-and-stroke.png 800w,
  3492.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6fdb970e-8cdb-4e34-a58f-92471f4d5064/09-fill-and-stroke.png 1200w,
  3493.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6fdb970e-8cdb-4e34-a58f-92471f4d5064/09-fill-and-stroke.png 1600w,
  3494.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6fdb970e-8cdb-4e34-a58f-92471f4d5064/09-fill-and-stroke.png 2000w"
  3495. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6fdb970e-8cdb-4e34-a58f-92471f4d5064/09-fill-and-stroke.png"
  3496. sizes="100vw"
  3497. alt="This is what you should have after applying the fill color and stroke color."
  3498. />
  3499. </a>
  3500.  
  3501. <figcaption class="op-vertical-bottom">
  3502. This is what you should have after applying the fill color and stroke color. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6fdb970e-8cdb-4e34-a58f-92471f4d5064/09-fill-and-stroke.png'>View large version</a>)
  3503. </figcaption>
  3504. </figure>
  3505.  
  3506.  
  3507. <p>Create now a shape with the Pen tool, and fill it with black (<code>000000</code>). Place it behind the car’s bodywork (the yellow shape). The exact shape of the new object that you will create does not really matter, except that its bottom side needs to be straight, as in the image below. Place it behind the main bodywork (the yellow shape) via either the Layers panel or through the menu “Arrange” &rarr; “Back One”.</p>
  3508.  
  3509.  
  3510.  
  3511.  
  3512.  
  3513.  
  3514.  
  3515.  
  3516.  
  3517.  
  3518.  
  3519. <figure class="article__image break-out">
  3520. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2ac8fd84-9de9-4910-886d-83f05d102eb5/10-black-behind.png">
  3521. <img
  3522. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2ac8fd84-9de9-4910-886d-83f05d102eb5/10-black-behind.png 400w,
  3523.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2ac8fd84-9de9-4910-886d-83f05d102eb5/10-black-behind.png 800w,
  3524.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2ac8fd84-9de9-4910-886d-83f05d102eb5/10-black-behind.png 1200w,
  3525.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2ac8fd84-9de9-4910-886d-83f05d102eb5/10-black-behind.png 1600w,
  3526.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2ac8fd84-9de9-4910-886d-83f05d102eb5/10-black-behind.png 2000w"
  3527. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2ac8fd84-9de9-4910-886d-83f05d102eb5/10-black-behind.png"
  3528. sizes="100vw"
  3529. alt="Black shape behind the car bodywork."
  3530. />
  3531. </a>
  3532.  
  3533. <figcaption class="op-vertical-bottom">
  3534. Black shape behind the car bodywork (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2ac8fd84-9de9-4910-886d-83f05d102eb5/10-black-behind.png'>View large version</a>)
  3535. </figcaption>
  3536. </figure>
  3537.  
  3538.  
  3539. <h4>6. Creating The Wheels Using Smart Copy</h4>
  3540.  
  3541. <p>We need to put the wheels in place next. In the Tools, pick the Ellipse tool, and drag over the canvas, creating a circle the same size as the wheel in the reference picture. Click <kbd>Shift</kbd> as you drag to make the circle proportionate. Additionally, holding <kbd>Ctrl</kbd> (Windows) or <kbd>Cmd</kbd> (Mac), you can create a perfect circle <strong>from the center out</strong>.</p>
  3542.  
  3543. <p><strong>Note:</strong> <em>If you need to, hide the layers created thus far to see better, or simply reduce their opacity temporarily. You can change the opacity by selecting any shape and pressing a number on the keyboard, from 1 to 9, where 1 will apply a 10% opacity and 9 a 90% opacity value. To reset the opacity to 100%, press 0 (zero).</em></p>
  3544.  
  3545. <p>Choose a random color that contrasts with the rest. I like to do so initially just so that I can see the shapes well contrasted and differentiated. When I am happy with them, I apply the final color. Set the opacity to 50% (click <kbd>5</kbd> on the keyboard) to be able to see through as you draw it.</p>
  3546.  
  3547. <p>Zoom into your wheel shape. Press <kbd>Z</kbd> to select the Zoom tool, and drag over the shape while holding <kbd>Alt</kbd> key, or double-click on the thumbnail corresponding to it in the Layers panel. (It doesn’t need to be previously selected, although this will help you to visually locate it in the Layers panel.)</p>
  3548.  
  3549. <p>We will now learn how to use Smart copy, and we will paste some concentric circles.</p>
  3550.  
  3551. <p>Select the circle and press <kbd>Cmd</kbd> + <kbd>J</kbd> (Mac) or <kbd>Ctrl</kbd> + <kbd>J</kbd> (Windows). A new circle will be placed on top of the original one. Select it. This command is found under “Edit” &rarr; “Duplicate”, and it’s also known as Smart copy or Smart duplicate.</p>
  3552.  
  3553. <p>Click <kbd>Shift</kbd> + <kbd>Cmd</kbd> (Mac) or <kbd>Shift</kbd> + <kbd>Ctrl</kbd> (Windows), and drag in to transform it into a smaller concentrical circle. Repeat three times, reducing a bit more in size each time, to fit your reference. Smart duplicating a shape by pressing <kbd>Shift</kbd> + <kbd>Cmd</kbd> (Mac) or <kbd>Shift</kbd> + <kbd>Ctrl</kbd> (Windows) will make the shape transform in a relative way. This will happen from your third smart-duplicated shape onwards.</p>
  3554.  
  3555. <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1bbecb15-e054-4076-9a17-565f87261204/smart-copy.gif"><img src="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1bbecb15-e054-4076-9a17-565f87261204/smart-copy.gif" width="" height="" alt="smart copy via keyboard shortcuts" /></a><figcaption>Smart copy via <kbd>Cmd</kbd> + <kbd>J</kbd> or <kbd>Ctrl</kbd> + <kbd>J</kbd>. (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1bbecb15-e054-4076-9a17-565f87261204/smart-copy.gif">View large version</a>)</figcaption></figure>
  3556.  
  3557. <p>So, we have our concentric circles for the wheel, and now we have to change the colors. Go to the Swatches panel, and in the previously created palette, choose colors that work well with the yellow that we have applied to the car’s bodywork. You can select a color and modify it slightly to adapt to what you think works best. We need to apply fill and stroke colors. Remember to give the stroke the same width as the rest of the car (8 pixels) except for the innermost circle, where we will apply a stroke of 11.5 pixels. Also, remember to put back to 100% the opacity of each concentric circle.</p>
  3558.  
  3559. <p>I chose these colors, from the outer to inner circles: <code>5D5100</code>, <code>918A00</code>, <code>CFA204</code>, <code>E5DEAB</code>.</p>
  3560.  
  3561. <p>Now we want to select and group all of them together. Select them all and press <kbd>Cmd</kbd> + <kbd>G</kbd> (Mac) or <kbd>Ctrl</kbd> + <kbd>G</kbd> (Windows). Name the new group “Front Wheel” in the Layers panel. Duplicate this group and, while pressing <kbd>Shift</kbd>, select it and drag along the canvas until it overlaps with the back wheel. Name the layer accordingly.</p>
  3562.  
  3563.  
  3564.  
  3565.  
  3566.  
  3567.  
  3568.  
  3569.  
  3570.  
  3571.  
  3572.  
  3573. <figure class="article__image break-out">
  3574. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9299d0ce-08c4-403d-82b3-4632a77dc7be/11-wheels.png">
  3575. <img
  3576. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9299d0ce-08c4-403d-82b3-4632a77dc7be/11-wheels.png 400w,
  3577.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9299d0ce-08c4-403d-82b3-4632a77dc7be/11-wheels.png 800w,
  3578.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9299d0ce-08c4-403d-82b3-4632a77dc7be/11-wheels.png 1200w,
  3579.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9299d0ce-08c4-403d-82b3-4632a77dc7be/11-wheels.png 1600w,
  3580.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9299d0ce-08c4-403d-82b3-4632a77dc7be/11-wheels.png 2000w"
  3581. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9299d0ce-08c4-403d-82b3-4632a77dc7be/11-wheels.png"
  3582. sizes="100vw"
  3583. alt="The car should look similar to this now."
  3584. />
  3585. </a>
  3586.  
  3587. <figcaption class="op-vertical-bottom">
  3588. The car should look similar to this now. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9299d0ce-08c4-403d-82b3-4632a77dc7be/11-wheels.png'>View large version</a>)
  3589. </figcaption>
  3590. </figure>
  3591.  
  3592.  
  3593. <h4>7. Breaking Curves And Clipping Masks To Draw The Inner Lines Of The Car’s Bodywork</h4>
  3594.  
  3595. <p>To keep working, either hide all layers or bring down the opacity so that they don’t get in your way. We need to trace the front and back fenders. We have to do the same as what we did for the main bodywork. Pick the Pen tool and trace an outline over it.</p>
  3596.  
  3597. <p>Once it is traced, modify it by using the handles, nodes and Corner tool. I also modified the black shape behind the car a bit, so that it shows a bit more in the lower part of the body work.</p>
  3598.  
  3599.  
  3600.  
  3601.  
  3602.  
  3603.  
  3604.  
  3605.  
  3606.  
  3607.  
  3608.  
  3609. <figure class="article__image break-out">
  3610. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/448978d1-df3a-4426-bae4-d43a0d33eb35/car-fenders.png">
  3611. <img
  3612. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/448978d1-df3a-4426-bae4-d43a0d33eb35/car-fenders.png 400w,
  3613.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/448978d1-df3a-4426-bae4-d43a0d33eb35/car-fenders.png 800w,
  3614.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/448978d1-df3a-4426-bae4-d43a0d33eb35/car-fenders.png 1200w,
  3615.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/448978d1-df3a-4426-bae4-d43a0d33eb35/car-fenders.png 1600w,
  3616.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/448978d1-df3a-4426-bae4-d43a0d33eb35/car-fenders.png 2000w"
  3617. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/448978d1-df3a-4426-bae4-d43a0d33eb35/car-fenders.png"
  3618. sizes="100vw"
  3619. alt="Fenders added to the car."
  3620. />
  3621. </a>
  3622.  
  3623. <figcaption class="op-vertical-bottom">
  3624. Fenders added to the car. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/448978d1-df3a-4426-bae4-d43a0d33eb35/car-fenders.png'>View large version</a>)
  3625. </figcaption>
  3626. </figure>
  3627.  
  3628.  
  3629. <p>Now we want to trace some of the inner lines that define the car. For this, we will duplicate the main yellow shape, remove its fill color and place it onto our illustration in the canvas.</p>
  3630.  
  3631. <p>Press <kbd>A</kbd> on the keyboard, and click on any of the bottom nodes of the segment. In the top Context toolbar, click on “Action” &rarr; “Break Curve”. You will see now that the selected node has turned into a red-outlined squared node. Click on it and pull anywhere. As you can see, the segment is now <strong>open</strong>. Click the <kbd>Delete</kbd> or <kbd>Backspace</kbd> key (Windows) or the <kbd>Delete</kbd> key (Mac), and do the same with all of the bottom nodes, leaving just the leftmost and rightmost ones, and also being very careful that what is left of the top section of the segment is not deformed at all.</p>
  3632.  
  3633. <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d80949f2-23c6-42df-9674-b3c5610b1a61/inner-lines-bodywork.gif"><img src="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d80949f2-23c6-42df-9674-b3c5610b1a61/inner-lines-bodywork.gif" width="600" height="375" alt="" /></a><figcaption>(<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d80949f2-23c6-42df-9674-b3c5610b1a61/inner-lines-bodywork.gif">View large version</a>)</figcaption></figure>
  3634.  
  3635. <p>I use this method for one main reason: Duplicating an existing line allows for a more consistent look and for more harmonious lines.</p>
  3636.  
  3637. <p>Select now the newly opened curve, and make it smaller in such a way that it fits into the main yellow shape when you place them on top of one another. In the Layers panel, drag this curve into the yellow shape layer to create a <strong>clipping mask</strong>. The reason for creating a clipping mask is simple: We want an object inside another object so that they do not overlap (i.e. both objects are visible), but one nested inside the other. Not doing so would result in some bits of the nested object being visible, which is not what we want; we need perfect, clean-cut lines.</p>
  3638.  
  3639. <p><strong>Note:</strong> <em>Clipping masks are not to be mistaken for <strong>masks</strong>. You will know you’re clipping and not masking because of the thumbnail (masks show a crop-like icon when applied) and because when you are about to clip, a <strong>blue stripe is displayed horizontally</strong>, a bit more than halfway across the layer. Masks, on the other hand, display a <strong>small vertical</strong> blue stripe beside the thumbnail.</em></p>
  3640.  
  3641.  
  3642.  
  3643.  
  3644.  
  3645.  
  3646.  
  3647.  
  3648.  
  3649.  
  3650.  
  3651. <figure >
  3652. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/653633d3-eade-476d-b95c-f819348cef62/clippin-vs-masking.png">
  3653. <img
  3654. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/653633d3-eade-476d-b95c-f819348cef62/clippin-vs-masking.png 400w,
  3655.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/653633d3-eade-476d-b95c-f819348cef62/clippin-vs-masking.png 800w,
  3656.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/653633d3-eade-476d-b95c-f819348cef62/clippin-vs-masking.png 1200w,
  3657.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/653633d3-eade-476d-b95c-f819348cef62/clippin-vs-masking.png 1600w,
  3658.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/653633d3-eade-476d-b95c-f819348cef62/clippin-vs-masking.png 2000w"
  3659. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/653633d3-eade-476d-b95c-f819348cef62/clippin-vs-masking.png"
  3660. sizes="100vw"
  3661. alt="Clipping versus masking in Affinity Designer"
  3662. />
  3663. </a>
  3664.  
  3665. <figcaption class="op-vertical-bottom">
  3666. Clipping versus masking in Affinity Designer (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/653633d3-eade-476d-b95c-f819348cef62/clippin-vs-masking.png'>View large version</a>)
  3667. </figcaption>
  3668. </figure>
  3669.  
  3670.  
  3671. <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/44920dea-1158-4347-828c-f03cd1915b8b/clipping.gif"><img src="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/44920dea-1158-4347-828c-f03cd1915b8b/clipping.gif" width="600" height="375" alt="Clipping mask once it is applied" /></a><figcaption>Clipping mask once it is applied (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/44920dea-1158-4347-828c-f03cd1915b8b/clipping.gif">View large version</a>)</figcaption></figure>
  3672.  
  3673. <p>Now that we have applied our clipping mask to insert the newly created segment inside the main shape of the car, I’ve broken some nodes and moved some others around a bit in order to place them exactly how I want. I’ve stretched the width a bit, and separated the front from the rest of the segment using exactly the same methods we’ve already seen. Then, I applied a bit more Corner tool to soften whatever I felt needed to be softened. Finally, with the Pen tool, I added some extra nodes and segments to create the rest of the inner lines that define the car.</p>
  3674.  
  3675. <p><strong>Note:</strong> <em>In order to select an object in a mask, a clipping mask or a group when not selecting the object directly in the Layers panel, you have to double-click until you select the object, or hold <kbd>Ctrl</kbd> (Windows) or <kbd>Cmd</kbd> (Mac) and click.</em></p>
  3676.  
  3677. <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/99fb6b96-3c61-48da-8dfa-26c45f5d88bb/adding-lines.gif"><img src="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/99fb6b96-3c61-48da-8dfa-26c45f5d88bb/adding-lines.gif" width="600" height="375" alt="Adding extra lines to a segment." /></a><figcaption>Adding extra lines to a segment (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/99fb6b96-3c61-48da-8dfa-26c45f5d88bb/adding-lines.gif">View large version</a>)</figcaption></figure>
  3678.  
  3679. <p>After some amendments and tweaking using the mentioned methods, our car looks like this:</p>
  3680.  
  3681.  
  3682.  
  3683.  
  3684.  
  3685.  
  3686.  
  3687.  
  3688.  
  3689.  
  3690.  
  3691. <figure class="article__image break-out">
  3692. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ca4743e0-d5b3-4a49-b046-7ccdcb5a3921/12-car-with-lines.png">
  3693. <img
  3694. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ca4743e0-d5b3-4a49-b046-7ccdcb5a3921/12-car-with-lines.png 400w,
  3695.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ca4743e0-d5b3-4a49-b046-7ccdcb5a3921/12-car-with-lines.png 800w,
  3696.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ca4743e0-d5b3-4a49-b046-7ccdcb5a3921/12-car-with-lines.png 1200w,
  3697.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ca4743e0-d5b3-4a49-b046-7ccdcb5a3921/12-car-with-lines.png 1600w,
  3698.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ca4743e0-d5b3-4a49-b046-7ccdcb5a3921/12-car-with-lines.png 2000w"
  3699. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ca4743e0-d5b3-4a49-b046-7ccdcb5a3921/12-car-with-lines.png"
  3700. sizes="100vw"
  3701. alt="How the car looks after a little tweaking of the segments and nodes"
  3702. />
  3703. </a>
  3704.  
  3705. <figcaption class="op-vertical-bottom">
  3706. How the car looks after a little tweaking of the segments and nodes (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ca4743e0-d5b3-4a49-b046-7ccdcb5a3921/12-car-with-lines.png'>View large version</a>)
  3707. </figcaption>
  3708. </figure>
  3709.  
  3710.  
  3711. <h4>8. Drawing The Windows Using Some Primitive Shapes</h4>
  3712.  
  3713. <p>In the side Toolbar, select the Rounded Rectangle tool. Drag on the canvas to create a shape. The size of the shape should fit in the car’s bodywork and look proportionate. No matter how you create it, you will be able to resize it later, so don’t worry much.</p>
  3714.  
  3715. <p><strong>Note:</strong> <em>When you create a shape with strokes and resize it, be sure to check “Scale with object” in the Stroke panel if you want the <strong>stroke to scale in proportion with the object</strong>. I recommend that you visually compare the difference between having this option checked and unchecked when you need to resize an object with a stroke.</em></p>
  3716.  
  3717.  
  3718.  
  3719.  
  3720.  
  3721.  
  3722.  
  3723.  
  3724.  
  3725.  
  3726.  
  3727. <figure class="article__image break-out">
  3728. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/df546f95-2056-41db-a67f-cfebc797abc0/scale-with-object.png">
  3729. <img
  3730. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/df546f95-2056-41db-a67f-cfebc797abc0/scale-with-object.png 400w,
  3731.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/df546f95-2056-41db-a67f-cfebc797abc0/scale-with-object.png 800w,
  3732.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/df546f95-2056-41db-a67f-cfebc797abc0/scale-with-object.png 1200w,
  3733.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/df546f95-2056-41db-a67f-cfebc797abc0/scale-with-object.png 1600w,
  3734.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/df546f95-2056-41db-a67f-cfebc797abc0/scale-with-object.png 2000w"
  3735. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/df546f95-2056-41db-a67f-cfebc797abc0/scale-with-object.png"
  3736. sizes="100vw"
  3737. alt="Make sure this is checked if you plan to resize your artwork, so that it scales the strokes accordingly."
  3738. />
  3739. </a>
  3740.  
  3741. <figcaption class="op-vertical-bottom">
  3742. Make sure this is checked if you plan to resize your artwork, so that it scales the strokes accordingly. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/df546f95-2056-41db-a67f-cfebc797abc0/scale-with-object.png'>View large version</a>)
  3743. </figcaption>
  3744. </figure>
  3745.  
  3746.  
  3747. <p>Once you have placed your rounded rectangle on the canvas, fill it with a blue-ish colour. I’ve used <code>#93BBC1</code>. Next, select it with the Node tool (press <kbd>A</kbd>). You will now see a little orange circle in the top-left corner. If you pull outwards or inwards, you’ll see how the angle in that corner changes. In the top Context toolbar, you can uncheck “Single radius”, and apply the angle you want to each corner of the rectangle individually. <strong>Uncheck it</strong>, and pull inwards on the tiny orange circle in the top-left corner. If you pull, you will be able to round it to a certain percentage, but you can also input the desired value in the input field for it, or even use the slider it comes with (it will show whether you’ve clicked on the little chevron). Let’s apply a value of 100%.</p>
  3748.  
  3749.  
  3750.  
  3751.  
  3752.  
  3753.  
  3754.  
  3755.  
  3756.  
  3757.  
  3758.  
  3759. <figure class="article__image break-out">
  3760. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d6a364f5-a232-4292-b281-eeb4969bd7d0/rounded-rectangle1.png">
  3761. <img
  3762. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d6a364f5-a232-4292-b281-eeb4969bd7d0/rounded-rectangle1.png 400w,
  3763.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d6a364f5-a232-4292-b281-eeb4969bd7d0/rounded-rectangle1.png 800w,
  3764.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d6a364f5-a232-4292-b281-eeb4969bd7d0/rounded-rectangle1.png 1200w,
  3765.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d6a364f5-a232-4292-b281-eeb4969bd7d0/rounded-rectangle1.png 1600w,
  3766.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d6a364f5-a232-4292-b281-eeb4969bd7d0/rounded-rectangle1.png 2000w"
  3767. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d6a364f5-a232-4292-b281-eeb4969bd7d0/rounded-rectangle1.png"
  3768. sizes="100vw"
  3769. alt=""
  3770. />
  3771. </a>
  3772.  
  3773. <figcaption class="op-vertical-bottom">
  3774. <a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d6a364f5-a232-4292-b281-eeb4969bd7d0/rounded-rectangle1.png'>View large version</a>
  3775. </figcaption>
  3776. </figure>
  3777.  
  3778.  
  3779.  
  3780.  
  3781.  
  3782.  
  3783.  
  3784.  
  3785.  
  3786.  
  3787.  
  3788.  
  3789. <figure class="article__image break-out">
  3790. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cb5eefc4-2cc8-43bb-9cca-b6c9122b4806/rounded-rectangle2.png">
  3791. <img
  3792. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cb5eefc4-2cc8-43bb-9cca-b6c9122b4806/rounded-rectangle2.png 400w,
  3793.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cb5eefc4-2cc8-43bb-9cca-b6c9122b4806/rounded-rectangle2.png 800w,
  3794.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cb5eefc4-2cc8-43bb-9cca-b6c9122b4806/rounded-rectangle2.png 1200w,
  3795.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cb5eefc4-2cc8-43bb-9cca-b6c9122b4806/rounded-rectangle2.png 1600w,
  3796.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cb5eefc4-2cc8-43bb-9cca-b6c9122b4806/rounded-rectangle2.png 2000w"
  3797. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cb5eefc4-2cc8-43bb-9cca-b6c9122b4806/rounded-rectangle2.png"
  3798. sizes="100vw"
  3799. alt="How the rounded rectangle primitive shape looks in default mode and how it changes when we uncheck the single radius box. Now we can manipulate the corners individually."
  3800. />
  3801. </a>
  3802.  
  3803. <figcaption class="op-vertical-bottom">
  3804. How the rounded rectangle primitive shape looks in default mode and how it changes when we uncheck the single radius box. Now we can manipulate the corners individually. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cb5eefc4-2cc8-43bb-9cca-b6c9122b4806/rounded-rectangle2.png'>View large version</a>)
  3805. </figcaption>
  3806. </figure>
  3807.  
  3808.  
  3809. <p>Primitive shapes are not so flexible in terms of vector manipulation (compared to curves and lines), so, in order to apply further changes to such a shape (beyond fill, stroke, corners, width and height), we will need to convert it to curves.</p>
  3810.  
  3811. <p><strong>Note:</strong> <em>Once you convert a primitive shape into curves, there is no way to go back, and there will be no option to manipulate the shape through the little orange stops. If you need further tweaking, you will need to do it with the Corner tool.</em></p>
  3812.  
  3813. <p>Select the rectangle with the Node tool (<kbd>A</kbd>), and in the top Context toolbar, click the button “Convert to Curves”. The bounding box will disappear, and all of the nodes forming the shape will be shown. Also, note how in the Layers panel, the name of the object changes from “Rounded Rectangle” to “Curve”.</p>
  3814.  
  3815. <p>Now you need to manipulate the shape in order to create an object that looks like a car window. Look at the reference picture to get a better idea of how it should look. Also, tweak the rest of the drawn lines in the car, so that it all fits together nicely. Don’t worry if the shapes don’t look perfect (yet). Getting them right is a matter of practice! Using the Pen tool, help yourself with the <kbd>Alt</kbd> and <kbd>Shift</kbd> keys and observe how differently the segment nodes behave. After you have created the front window, go ahead and create the back one, following the same method.</p>
  3816.  
  3817. <p>We also need to create the reflections of the window, which we’ll do by drawing three rectangles, filling them with white color, overlapping them with a bit of offset from one another, and setting the opacity to 50%.</p>
  3818.  
  3819. <p>Place the cursor over the top bounding-box white circle, and when it turns into a curved arrow with two ends, move it to give the rectangles an angle. Create a clipping mask, dragging it over the window shape in the Layers panel as we saw before. You can also do this by following the following alternative methods:</p>
  3820.  
  3821. <ul>
  3822. <li>Under the menu “Layer” &rarr; “Insertion” &rarr; “Insert Inside” the selected window object.</li>
  3823.  
  3824. <li>With the keyboard shortcut <kbd>Ctrl</kbd> + <kbd>X</kbd> (Windows) and <kbd>Cmd</kbd> + <kbd>X</kbd> (Mac), select your window object &rarr; “Edit” &rarr; “Paste Inside” (<kbd>Ctrl</kbd>/<kbd>Cmd</kbd> + <kbd>Alt</kbd> + <kbd>V</kbd>).</li>
  3825. </ul>
  3826.  
  3827. <p>Repeat this for the back window. To add visual interest, you can duplicate the reflections and slightly change the rectangles’ opacities and widths.</p>
  3828.  
  3829. <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a03b711e-7e0e-4a71-9738-fd0c723395ac/window-reflections.gif"><img src="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a03b711e-7e0e-4a71-9738-fd0c723395ac/window-reflections.gif" width="600" height="375" alt="Create the reflections on the windows, and clip them inside." /></a><figcaption>Create the reflections on the windows, and clip them inside. (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a03b711e-7e0e-4a71-9738-fd0c723395ac/window-reflections.gif">View large version</a>)</figcaption></figure>
  3830.  
  3831. <h4>9. Adding Visual Interest: Halftone Pattern, Shadows And Reflections</h4>
  3832.  
  3833. <p>Before we start with the shadows and reflections, we need to add an extra piece onto the car so that all of the elements look well integrated. Let’s create the piece that sits below the doors. It is a simple rectangle. Place it on the corresponding layer order, so that it looks like the picture below, and keep inserting all of the pieces together so that it looks compact. I will also move a bit the front fender to make the front shorter.</p>
  3834.  
  3835.  
  3836.  
  3837.  
  3838.  
  3839.  
  3840.  
  3841.  
  3842.  
  3843.  
  3844.  
  3845. <figure class="article__image break-out">
  3846. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c642e4c2-3151-4ce6-97f5-cb30ed750c73/13-car-integratedpieces.png">
  3847. <img
  3848. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c642e4c2-3151-4ce6-97f5-cb30ed750c73/13-car-integratedpieces.png 400w,
  3849.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c642e4c2-3151-4ce6-97f5-cb30ed750c73/13-car-integratedpieces.png 800w,
  3850.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c642e4c2-3151-4ce6-97f5-cb30ed750c73/13-car-integratedpieces.png 1200w,
  3851.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c642e4c2-3151-4ce6-97f5-cb30ed750c73/13-car-integratedpieces.png 1600w,
  3852.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c642e4c2-3151-4ce6-97f5-cb30ed750c73/13-car-integratedpieces.png 2000w"
  3853. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c642e4c2-3151-4ce6-97f5-cb30ed750c73/13-car-integratedpieces.png"
  3854. sizes="100vw"
  3855. alt="The car, once the final bodywork pieces have been placed and tweaks made. We’re getting there!"
  3856. />
  3857. </a>
  3858.  
  3859. <figcaption class="op-vertical-bottom">
  3860. The car, once the final bodywork pieces have been placed and tweaks made. We’re getting there! (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c642e4c2-3151-4ce6-97f5-cb30ed750c73/13-car-integratedpieces.png'>View large version</a>)
  3861. </figcaption>
  3862. </figure>
  3863.  
  3864.  
  3865. <p>Now let’s create the <strong>halftone pattern</strong>.</p>
  3866.  
  3867. <p>Grab the Pen tool (<kbd>P</kbd>) and trace a line on your canvas. In the Stroke panel (you can also do this in the Pen tool’s Context toolbar section for the stroke, at the top), set the size to something like 7 pixels. We can easily change this value later if needed. Select the “Dash” line style, and the rest of the dialog settings should be as follows:</p>
  3868.  
  3869.  
  3870.  
  3871.  
  3872.  
  3873.  
  3874.  
  3875.  
  3876.  
  3877.  
  3878.  
  3879. <figure class="article__image break-out">
  3880. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f533a815-efab-471a-92f7-8acf7479c311/halftone.png">
  3881. <img
  3882. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f533a815-efab-471a-92f7-8acf7479c311/halftone.png 400w,
  3883.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f533a815-efab-471a-92f7-8acf7479c311/halftone.png 800w,
  3884.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f533a815-efab-471a-92f7-8acf7479c311/halftone.png 1200w,
  3885.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f533a815-efab-471a-92f7-8acf7479c311/halftone.png 1600w,
  3886.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f533a815-efab-471a-92f7-8acf7479c311/halftone.png 2000w"
  3887. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f533a815-efab-471a-92f7-8acf7479c311/halftone.png"
  3888. sizes="100vw"
  3889. alt="Settings for the first part of creating the halftone pattern."
  3890. />
  3891. </a>
  3892.  
  3893. <figcaption class="op-vertical-bottom">
  3894. Settings for the first part of creating the halftone pattern. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f533a815-efab-471a-92f7-8acf7479c311/halftone.png'>View large version</a>)
  3895. </figcaption>
  3896. </figure>
  3897.  
  3898.  
  3899. <p>Now, duplicate this line, and place the new one below with a bit of an offset to the left.</p>
  3900.  
  3901.  
  3902.  
  3903.  
  3904.  
  3905.  
  3906.  
  3907.  
  3908.  
  3909.  
  3910.  
  3911. <figure >
  3912. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/61ec4877-437c-4eed-85cf-290517aa0d73/halftone2.png">
  3913. <img
  3914. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/61ec4877-437c-4eed-85cf-290517aa0d73/halftone2.png 400w,
  3915.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/61ec4877-437c-4eed-85cf-290517aa0d73/halftone2.png 800w,
  3916.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/61ec4877-437c-4eed-85cf-290517aa0d73/halftone2.png 1200w,
  3917.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/61ec4877-437c-4eed-85cf-290517aa0d73/halftone2.png 1600w,
  3918.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/61ec4877-437c-4eed-85cf-290517aa0d73/halftone2.png 2000w"
  3919. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/61ec4877-437c-4eed-85cf-290517aa0d73/halftone2.png"
  3920. sizes="100vw"
  3921. alt=""
  3922. />
  3923. </a>
  3924.  
  3925. <figcaption class="op-vertical-bottom">
  3926. <a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/61ec4877-437c-4eed-85cf-290517aa0d73/halftone2.png'>View large version</a>
  3927. </figcaption>
  3928. </figure>
  3929.  
  3930.  
  3931. <p>Group both lines, duplicate this group with a Smart copy, and create something like this:</p>
  3932.  
  3933.  
  3934.  
  3935.  
  3936.  
  3937.  
  3938.  
  3939.  
  3940.  
  3941.  
  3942.  
  3943. <figure >
  3944. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e1171ae0-b7ae-4fd5-b6f6-e6f5cc91cfc6/smartcopyhalftone.png">
  3945. <img
  3946. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e1171ae0-b7ae-4fd5-b6f6-e6f5cc91cfc6/smartcopyhalftone.png 400w,
  3947.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e1171ae0-b7ae-4fd5-b6f6-e6f5cc91cfc6/smartcopyhalftone.png 800w,
  3948.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e1171ae0-b7ae-4fd5-b6f6-e6f5cc91cfc6/smartcopyhalftone.png 1200w,
  3949.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e1171ae0-b7ae-4fd5-b6f6-e6f5cc91cfc6/smartcopyhalftone.png 1600w,
  3950.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e1171ae0-b7ae-4fd5-b6f6-e6f5cc91cfc6/smartcopyhalftone.png 2000w"
  3951. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e1171ae0-b7ae-4fd5-b6f6-e6f5cc91cfc6/smartcopyhalftone.png"
  3952. sizes="100vw"
  3953. alt="Smart copy the first two lines, and create the whole pattern."
  3954. />
  3955. </a>
  3956.  
  3957. <figcaption class="op-vertical-bottom">
  3958. Smart copy the first two lines, and create the whole pattern. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e1171ae0-b7ae-4fd5-b6f6-e6f5cc91cfc6/smartcopyhalftone.png'>View large version</a>)
  3959. </figcaption>
  3960. </figure>
  3961.  
  3962.  
  3963. <p>When you drag a selection in Affinity Designer, only objects that are completely within the selection area will be selected. If you want to select all objects without having to drag over all of them completely, you have the following options:</p>
  3964.  
  3965. <ul>
  3966. <li>Mac: Holding the <kbd>⌃</kbd> (<kbd>Ctrl</kbd>) key will allow you to select all objects touching the selection marquee as you draw it.</li>
  3967.  
  3968. <li>Windows: Click and hold the left mouse button, start dragging a selection, and then click and hold the right mouse button as well. As you are holding both buttons, all objects touching the selection marquee will be selected.</li>
  3969.  
  3970. <li>Alternatively, you can make this behavior a global preference. On Mac, go to “Affinity Designer” &rarr; “Preferences” &rarr; “Tools”, and check “Select object when intersects with selection marquee”. On Windows, go to “Edit” &rarr; “Preferences” &rarr; “Tools”, and check “Select object when intersects with selection marquee”.</li>
  3971. </ul>
  3972.  
  3973. <p>To make the illustration more interesting, we are going to vary the beginning and end of some of the lines a bit. To do this, we select the Node tool (<kbd>A</kbd>), and move the nodes a bit inwards.</p>
  3974.  
  3975. <p>It should now look like this:</p>
  3976.  
  3977.  
  3978.  
  3979.  
  3980.  
  3981.  
  3982.  
  3983.  
  3984.  
  3985.  
  3986.  
  3987. <figure >
  3988. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/36b055bf-4ce2-44ad-9191-52aaecf8bf5a/halftone3.png">
  3989. <img
  3990. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/36b055bf-4ce2-44ad-9191-52aaecf8bf5a/halftone3.png 400w,
  3991.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/36b055bf-4ce2-44ad-9191-52aaecf8bf5a/halftone3.png 800w,
  3992.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/36b055bf-4ce2-44ad-9191-52aaecf8bf5a/halftone3.png 1200w,
  3993.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/36b055bf-4ce2-44ad-9191-52aaecf8bf5a/halftone3.png 1600w,
  3994.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/36b055bf-4ce2-44ad-9191-52aaecf8bf5a/halftone3.png 2000w"
  3995. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/36b055bf-4ce2-44ad-9191-52aaecf8bf5a/halftone3.png"
  3996. sizes="100vw"
  3997. alt=""
  3998. />
  3999. </a>
  4000.  
  4001. <figcaption class="op-vertical-bottom">
  4002. <a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/36b055bf-4ce2-44ad-9191-52aaecf8bf5a/halftone3.png'>View large version</a>
  4003. </figcaption>
  4004. </figure>
  4005.  
  4006.  
  4007. <p>To apply the pattern to our design, make sure everything is grouped, copy and paste it into our car artwork, reduce its opacity to 30%, and also reduce the size (making sure “Scale with object” is checked in the Stroke panel). We will then create a clipping mask. It is important to keep consistency in the angle, color and size of this pattern throughout the illustration.</p>
  4008.  
  4009. <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fe5e7630-8f70-4167-a6ce-9b51f384d49f/halftonemask.gif"><img src="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fe5e7630-8f70-4167-a6ce-9b51f384d49f/halftonemask.gif" width="600" height="375" alt="Applying the halftone mask." /></a><figcaption>Applying the halftone mask (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fe5e7630-8f70-4167-a6ce-9b51f384d49f/halftonemask.gif">View large version</a>)</figcaption></figure>
  4010.  
  4011. <p>Now, apply the halftone pattern to the back fender and to the car’s side; make sure to create a placeholder for it first, be it the fender itself or a new shape. Make some tweaks if you need to adapt the pattern to your drawing in a harmonious way. You can change the overall size, the dots’ size, the transparency, the angle and so on, but try to be consistent when applying these changes to the pattern bits.</p>
  4012.  
  4013. <p>For the shadow below the windows, I drew a curve to be the placeholder, and applied the color <code>#CFA204</code> so that it looks darker.</p>
  4014.  
  4015. <h4>10. Creating The Remaining Elements Of The Car</h4>
  4016.  
  4017. <p>Now, it’s all about creating the rest of the elements that make up the car: the bumpers, the back wheel and the surf board, plus the design stickers.</p>
  4018.  
  4019. <ul>
  4020. <li><strong>The front and back lights</strong><br />
  4021. For the front light, switch to the Segment tool and draw the shape. Then we need to rotate it a bit and place it somewhere below the car’s main bodywork. The same can be done for the back light but using the Rectangle tool. The colors are <code>#FFDA9D</code> for the front light and <code>#FF0031</code> for the back light.</li>
  4022. </ul>
  4023.  
  4024. <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6867a304-9fa6-48cc-93e8-64559e8756c6/frontlight.gif"><img src="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6867a304-9fa6-48cc-93e8-64559e8756c6/frontlight.gif" width="600" height="375" alt="Creating the front light" /></a><figcaption>Creating the front light (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6867a304-9fa6-48cc-93e8-64559e8756c6/frontlight.gif">View large version</a>)</figcaption></figure>
  4025.  
  4026. <ul>
  4027. <li><strong>Surfboard</strong><br />
  4028. To create the surfboard, we will use the Ellipse tool and draw a long ellipse. Convert it to curves and pull up the lower segment, adjusting a bit the handles to give it the ideal shape.</li>
  4029. </ul>
  4030.  
  4031. <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/de3e0e4d-35b0-47c5-af72-1239cfb3253b/surfboard.gif"><img src="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/de3e0e4d-35b0-47c5-af72-1239cfb3253b/surfboard.gif" width="600" height="375" alt="Creating the surf board" /></a><figcaption>Creating the surf board (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/de3e0e4d-35b0-47c5-af72-1239cfb3253b/surfboard.gif">View large version</a>)</figcaption></figure>
  4032.  
  4033. <p>Now, just create two small rounded rectangles, with a little extra line on top for the board’s rack. Place them in a layer behind the car’s main body shape.</p>
  4034.  
  4035.  
  4036.  
  4037.  
  4038.  
  4039.  
  4040.  
  4041.  
  4042.  
  4043.  
  4044.  
  4045. <figure class="article__image break-out">
  4046. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/606f1fc7-6b22-4fa4-9e93-8927fb19e480/rack.png">
  4047. <img
  4048. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/606f1fc7-6b22-4fa4-9e93-8927fb19e480/rack.png 400w,
  4049.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/606f1fc7-6b22-4fa4-9e93-8927fb19e480/rack.png 800w,
  4050.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/606f1fc7-6b22-4fa4-9e93-8927fb19e480/rack.png 1200w,
  4051.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/606f1fc7-6b22-4fa4-9e93-8927fb19e480/rack.png 1600w,
  4052.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/606f1fc7-6b22-4fa4-9e93-8927fb19e480/rack.png 2000w"
  4053. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/606f1fc7-6b22-4fa4-9e93-8927fb19e480/rack.png"
  4054. sizes="100vw"
  4055. alt="Board rack pieces"
  4056. />
  4057. </a>
  4058.  
  4059. <figcaption class="op-vertical-bottom">
  4060. Board rack pieces (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/606f1fc7-6b22-4fa4-9e93-8927fb19e480/rack.png'>View large version</a>)
  4061. </figcaption>
  4062. </figure>
  4063.  
  4064.  
  4065. <p>With the Pen tool, add the rudder. Its color is <code>#B2E3EF</code>. And for the stroke, use a 6-pixel width and set the color to <code>#131000</code>.</p>
  4066.  
  4067. <ul>
  4068. <li><strong>Spare wheel</strong><br />
  4069. Now let’s create the the spare wheel! Switch to the Rounded Rectangle tool. Drag over the canvas to draw a shape. Color it <code>#34646C</code>, and make the stroke <code>#131000</code> and 8 pixels in size. The size of the spare wheel should fit the proportions of your car and should have the same diameter as the other wheels, or perhaps just a bit smaller. Pull the orange dots totally inwards, and give it a 45-degree angle. For the rack that holds the wheel, create a small piece with the Rectangle tool, and give it the same 45-degree angle, color it <code>#4A8F99</code>, and make the stroke <code>#131000</code> and 4.5 pixels in size. Create the last piece that rests over the car in the same way, with a color of <code>#34646C</code>, and a stroke that is <code>#131000</code> and 4.5 pixels in size.</li>
  4070. </ul>
  4071.  
  4072. <p>Lastly, let’s create a shadow inside the wheel to add some more interest. For this, we’ll create a clipping mask and insert an ellipse shape with a color of <code>#194147</code>, without a stroke.</p>
  4073.  
  4074. <p><strong>Note:</strong> <em>We may want to create the same shadow effect for the car wheels. Use the Rectangle tool and a color of <code>#312A00</code>, create a clipping mask, and insert it in the wheel shape, placing it halfway.</em></p>
  4075.  
  4076.  
  4077.  
  4078.  
  4079.  
  4080.  
  4081.  
  4082.  
  4083.  
  4084.  
  4085.  
  4086. <figure >
  4087. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7fc4b860-d5e7-4ef5-a706-2001513227b2/spare-wheel.png">
  4088. <img
  4089. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7fc4b860-d5e7-4ef5-a706-2001513227b2/spare-wheel.png 400w,
  4090.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7fc4b860-d5e7-4ef5-a706-2001513227b2/spare-wheel.png 800w,
  4091.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7fc4b860-d5e7-4ef5-a706-2001513227b2/spare-wheel.png 1200w,
  4092.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7fc4b860-d5e7-4ef5-a706-2001513227b2/spare-wheel.png 1600w,
  4093.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7fc4b860-d5e7-4ef5-a706-2001513227b2/spare-wheel.png 2000w"
  4094. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7fc4b860-d5e7-4ef5-a706-2001513227b2/spare-wheel.png"
  4095. sizes="100vw"
  4096. alt="Three simple shapes to draw the spare wheel and its rack"
  4097. />
  4098. </a>
  4099.  
  4100. <figcaption class="op-vertical-bottom">
  4101. Three simple shapes to draw the spare wheel and its rack (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7fc4b860-d5e7-4ef5-a706-2001513227b2/spare-wheel.png'>View large version</a>)
  4102. </figcaption>
  4103. </figure>
  4104.  
  4105.  
  4106. <ul>
  4107. <li><strong>Bumpers</strong><br />
  4108. For the bumpers, we will apply the boolean operation “add” to two basic shapes and then clip-mask a shadow, just as we did for the wheels.</li>
  4109. </ul>
  4110.  
  4111. <p>Boolean operations are displayed in the section of icons labeled “Geometry” (Mac) and “Operations” (Windows). (Yes, the label names are inconsistent, but the Affinity team will likely update them in the near future, and one of the labels will become the default for both operating systems.) If you don’t see them in the upper toolbar, go to “View” &rarr; “Customize Toolbar”, and drag and drop them into the toolbar.</p>
  4112.  
  4113. <p><strong>Important:</strong> If you want the operation to be non-destructive, hold the Alt key while clicking on the “Add” icon (to combine the two basic shapes).</p>
  4114.  
  4115.  
  4116.  
  4117.  
  4118.  
  4119.  
  4120.  
  4121.  
  4122.  
  4123.  
  4124.  
  4125. <figure >
  4126. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dcc188fa-a469-488a-a0bc-0c80c351d056/geometry.png">
  4127. <img
  4128. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dcc188fa-a469-488a-a0bc-0c80c351d056/geometry.png 400w,
  4129.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dcc188fa-a469-488a-a0bc-0c80c351d056/geometry.png 800w,
  4130.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dcc188fa-a469-488a-a0bc-0c80c351d056/geometry.png 1200w,
  4131.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dcc188fa-a469-488a-a0bc-0c80c351d056/geometry.png 1600w,
  4132.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dcc188fa-a469-488a-a0bc-0c80c351d056/geometry.png 2000w"
  4133. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dcc188fa-a469-488a-a0bc-0c80c351d056/geometry.png"
  4134. sizes="100vw"
  4135. alt="Boolean operations: Add, Subtract, Intersect, Divide, Combine."
  4136. />
  4137. </a>
  4138.  
  4139. <figcaption class="op-vertical-bottom">
  4140. Boolean operations: Add, Subtract, Intersect, Divide, Combine. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/dcc188fa-a469-488a-a0bc-0c80c351d056/geometry.png'>View large version</a>)
  4141. </figcaption>
  4142. </figure>
  4143.  
  4144.  
  4145.  
  4146.  
  4147.  
  4148.  
  4149.  
  4150.  
  4151.  
  4152.  
  4153.  
  4154.  
  4155. <figure class="article__image break-out">
  4156. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/57987244-ea91-4dba-837f-e52626f61926/single-shape-from-two-shapes.png">
  4157. <img
  4158. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/57987244-ea91-4dba-837f-e52626f61926/single-shape-from-two-shapes.png 400w,
  4159.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/57987244-ea91-4dba-837f-e52626f61926/single-shape-from-two-shapes.png 800w,
  4160.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/57987244-ea91-4dba-837f-e52626f61926/single-shape-from-two-shapes.png 1200w,
  4161.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/57987244-ea91-4dba-837f-e52626f61926/single-shape-from-two-shapes.png 1600w,
  4162.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/57987244-ea91-4dba-837f-e52626f61926/single-shape-from-two-shapes.png 2000w"
  4163. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/57987244-ea91-4dba-837f-e52626f61926/single-shape-from-two-shapes.png"
  4164. sizes="100vw"
  4165. alt="Applying the (destructive) Add operation to create a single shape from two shapes."
  4166. />
  4167. </a>
  4168.  
  4169. <figcaption class="op-vertical-bottom">
  4170. Applying the (destructive) Add operation to create a single shape from two shapes. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/57987244-ea91-4dba-837f-e52626f61926/single-shape-from-two-shapes.png'>View large version</a>)
  4171. </figcaption>
  4172. </figure>
  4173.  
  4174.  
  4175. <p><strong>Note:</strong> <em>If you try to paste the “shadow” object inside the bumper, it will <strong>only</strong> work if the bumper is one whole object (a destructive operation). So, if you used <kbd>Alt</kbd> + “Add”, this will not work now. However, you can still work around this by converting the Compound shape (the result of a non-destructive operation that is a group of two objects) to one Curve (one whole vector object). You just need to click on the Compound shape, then in the menu go to “Layer” &rarr; “Convert to Curves” (or use the key combination <kbd>Ctrl</kbd> + <kbd>Enter</kbd>).</em></p>
  4176.  
  4177. <ul>
  4178. <li><p><strong>Back window</strong><br />
  4179. We are still missing the back window, which we will create with the Pen tool, and the decoration for the car. For the two colored stripes, we need the Square tool and then clip-mask these two rectangles into the main bodywork. The size is 30 &#215; 380 pixels, and the colors are <code>#0AC8CE</code> and <code>#FF6500</code>. Clip them by making sure you’ve put them on the right layer, so that the dark lines we drew before are <strong>above them</strong>.</p></p></li>
  4180.  
  4181. <li><p><strong>Number 56</strong><br />
  4182. For the number “56” decoration, use the Artistic Text tool (“T”), and type in “56”. Choose a nice font that matches the style of the illustration, or <a href="http://www.fontsec.com/fonts/51416/phosphateinline.html">try the one I’ve used</a></a>.</p></p></li>
  4183. </ul>
  4184.  
  4185. <p>The color for the text object is <code>#FFF3AD</code>.</p>
  4186.  
  4187. <p>(I added an extra squared shape behind the back fender, which will look like the end of the exhaust pipe. The color is <code>#000000</code>.)</p>
  4188.  
  4189. <ul>
  4190. <li><strong>Color strips</strong><br />
  4191. Now that we’ve done this, check the color stripes and the window they overlap with. As you can see (and because we put some transparency in the window glass), the orange stripe is <strong>visible through it</strong>. Let’s use some Boolean power again to fix this.</li>
  4192. </ul>
  4193.  
  4194.  
  4195.  
  4196.  
  4197.  
  4198.  
  4199.  
  4200.  
  4201.  
  4202.  
  4203.  
  4204. <figure class="article__image break-out">
  4205. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d619a22a-3da9-4019-9262-1c0741207d1f/almost-car.png">
  4206. <img
  4207. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d619a22a-3da9-4019-9262-1c0741207d1f/almost-car.png 400w,
  4208.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d619a22a-3da9-4019-9262-1c0741207d1f/almost-car.png 800w,
  4209.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d619a22a-3da9-4019-9262-1c0741207d1f/almost-car.png 1200w,
  4210.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d619a22a-3da9-4019-9262-1c0741207d1f/almost-car.png 1600w,
  4211.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d619a22a-3da9-4019-9262-1c0741207d1f/almost-car.png 2000w"
  4212. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d619a22a-3da9-4019-9262-1c0741207d1f/almost-car.png"
  4213. sizes="100vw"
  4214. alt="Bumpers and exhauster added. Check out the overlapped window and the orange stripe!"
  4215. />
  4216. </a>
  4217.  
  4218. <figcaption class="op-vertical-bottom">
  4219. Bumpers and exhauster added. Check out the overlapped window and the orange stripe! (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d619a22a-3da9-4019-9262-1c0741207d1f/almost-car.png'>View large version</a>)
  4220. </figcaption>
  4221. </figure>
  4222.  
  4223.  
  4224. <p>Duplicate the window object. Select both the window object (the one you just duplicated) and the orange stripe in the Layers panel. Apply a “subtract” operation.</p>
  4225.  
  4226.  
  4227.  
  4228.  
  4229.  
  4230.  
  4231.  
  4232.  
  4233.  
  4234.  
  4235.  
  4236. <figure >
  4237. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ec089a03-5e01-4727-8f38-a121410da6cc/window-stripe1-new.png">
  4238. <img
  4239. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ec089a03-5e01-4727-8f38-a121410da6cc/window-stripe1-new.png 400w,
  4240.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ec089a03-5e01-4727-8f38-a121410da6cc/window-stripe1-new.png 800w,
  4241.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ec089a03-5e01-4727-8f38-a121410da6cc/window-stripe1-new.png 1200w,
  4242.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ec089a03-5e01-4727-8f38-a121410da6cc/window-stripe1-new.png 1600w,
  4243.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ec089a03-5e01-4727-8f38-a121410da6cc/window-stripe1-new.png 2000w"
  4244. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ec089a03-5e01-4727-8f38-a121410da6cc/window-stripe1-new.png"
  4245. sizes="70vw"
  4246. alt="Stage 1, before the subtract operation."
  4247. />
  4248. </a>
  4249.  
  4250. <figcaption class="op-vertical-bottom">
  4251. Stage 1, before the subtract operation. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8ba7c520-df98-407c-b5d2-8bb13bef9792/window-stripe1.png'>View large version</a>)
  4252. </figcaption>
  4253. </figure>
  4254.  
  4255.  
  4256.  
  4257.  
  4258.  
  4259.  
  4260.  
  4261.  
  4262.  
  4263.  
  4264.  
  4265.  
  4266. <figure >
  4267. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f72b1ece-b4fd-49ff-ab64-c8d55a8015e3/window-stripe2-new.png">
  4268. <img
  4269. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5ea231b6-8e2c-4eb8-8b1c-8b3b90875e5a/window-stripe2-1000.png 400w,
  4270.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5ea231b6-8e2c-4eb8-8b1c-8b3b90875e5a/window-stripe2-1000.png 800w,
  4271.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5ea231b6-8e2c-4eb8-8b1c-8b3b90875e5a/window-stripe2-1000.png 1200w,
  4272.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5ea231b6-8e2c-4eb8-8b1c-8b3b90875e5a/window-stripe2-1000.png 1600w,
  4273.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5ea231b6-8e2c-4eb8-8b1c-8b3b90875e5a/window-stripe2-1000.png 2000w"
  4274. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/5ea231b6-8e2c-4eb8-8b1c-8b3b90875e5a/window-stripe2-1000.png"
  4275. sizes="70vw"
  4276. alt="tage 2, once the subtract operation is applied."
  4277. />
  4278. </a>
  4279.  
  4280. <figcaption class="op-vertical-bottom">
  4281. Stage 2, once the subtract operation is applied. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ba4dd967-8aa5-40b2-9d53-d4288657f247/window-stripe2.png'>View large version</a>)
  4282. </figcaption>
  4283. </figure>
  4284.  
  4285.  
  4286. <p>Now, the orange stripe has the perfect shape, fitting the window in such a way that they don’t overlap.</p>
  4287.  
  4288.  
  4289.  
  4290.  
  4291.  
  4292.  
  4293.  
  4294.  
  4295.  
  4296.  
  4297.  
  4298. <figure >
  4299. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7b99ea04-ba78-4520-83d8-967904858075/stripe-window-boolean.png">
  4300. <img
  4301. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7b99ea04-ba78-4520-83d8-967904858075/stripe-window-boolean.png 400w,
  4302.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7b99ea04-ba78-4520-83d8-967904858075/stripe-window-boolean.png 800w,
  4303.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7b99ea04-ba78-4520-83d8-967904858075/stripe-window-boolean.png 1200w,
  4304.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7b99ea04-ba78-4520-83d8-967904858075/stripe-window-boolean.png 1600w,
  4305.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7b99ea04-ba78-4520-83d8-967904858075/stripe-window-boolean.png 2000w"
  4306. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7b99ea04-ba78-4520-83d8-967904858075/stripe-window-boolean.png"
  4307. sizes="70vw"
  4308. alt="Stripe and window with subtraction operation applied."
  4309. />
  4310. </a>
  4311.  
  4312. <figcaption class="op-vertical-bottom">
  4313. Stripe and window with subtraction operation applied. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7b99ea04-ba78-4520-83d8-967904858075/stripe-window-boolean.png'>View large version</a>)
  4314. </figcaption>
  4315. </figure>
  4316.  
  4317.  
  4318. <ul>
  4319. <li><strong>Smoke</strong><br />
  4320. To create the <strong>smoke</strong> from the exhaust, draw a circle with a white stroke, 5.5 pixels in size and no fill. Transform it to curves and break one of its points. From the bottom node, trace a straight line with the Pen tool.</li>
  4321. </ul>
  4322.  
  4323. <p>Duplicate this “broken” circle, and resize to smaller circles, and flip and place them so that they look like this:</p>
  4324.  
  4325.  
  4326.  
  4327.  
  4328.  
  4329.  
  4330.  
  4331.  
  4332.  
  4333.  
  4334.  
  4335. <figure class="article__image break-out">
  4336. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/64055ff5-709f-426b-af35-4dd4de02d36e/exhauster-smoke.png">
  4337. <img
  4338. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/64055ff5-709f-426b-af35-4dd4de02d36e/exhauster-smoke.png 400w,
  4339.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/64055ff5-709f-426b-af35-4dd4de02d36e/exhauster-smoke.png 800w,
  4340.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/64055ff5-709f-426b-af35-4dd4de02d36e/exhauster-smoke.png 1200w,
  4341.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/64055ff5-709f-426b-af35-4dd4de02d36e/exhauster-smoke.png 1600w,
  4342.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/64055ff5-709f-426b-af35-4dd4de02d36e/exhauster-smoke.png 2000w"
  4343. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/64055ff5-709f-426b-af35-4dd4de02d36e/exhauster-smoke.png"
  4344. sizes="100vw"
  4345. alt="Creating the exhaust smoke"
  4346. />
  4347. </a>
  4348.  
  4349. <figcaption class="op-vertical-bottom">
  4350. Creating the exhaust smoke (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/64055ff5-709f-426b-af35-4dd4de02d36e/exhauster-smoke.png'>View large version</a>)
  4351. </figcaption>
  4352. </figure>
  4353.  
  4354.  
  4355. <p><strong>Note:</strong> <em>Now that the car is finished, group all of its layers together. It will be much easier to keep working if you do so!</em></p>
  4356.  
  4357. <h4>11. Creating The Ground And The Background Elements.</h4>
  4358.  
  4359. <ul>
  4360. <li><strong>Ground</strong><br />
  4361. Let’s trace a simple line for the ground, and add two bits breaking it in order to create visual interest and suggest a bit of movement. We also want to add an extra piece to create the ground. For this, we will use the Rectangle tool and draw a rectangle with a gradient color of <code>#008799</code> for the left stop and <code>#81BEC7</code> for the right stop. Give it 30% opacity.</li>
  4362. </ul>
  4363.  
  4364.  
  4365.  
  4366.  
  4367.  
  4368.  
  4369.  
  4370.  
  4371.  
  4372.  
  4373.  
  4374. <figure class="article__image break-out">
  4375. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/30dd3816-8849-41ad-8e86-06d1751ebf9e/17-gradient-floor.png">
  4376. <img
  4377. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/30dd3816-8849-41ad-8e86-06d1751ebf9e/17-gradient-floor.png 400w,
  4378.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/30dd3816-8849-41ad-8e86-06d1751ebf9e/17-gradient-floor.png 800w,
  4379.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/30dd3816-8849-41ad-8e86-06d1751ebf9e/17-gradient-floor.png 1200w,
  4380.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/30dd3816-8849-41ad-8e86-06d1751ebf9e/17-gradient-floor.png 1600w,
  4381.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/30dd3816-8849-41ad-8e86-06d1751ebf9e/17-gradient-floor.png 2000w"
  4382. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/30dd3816-8849-41ad-8e86-06d1751ebf9e/17-gradient-floor.png"
  4383. sizes="100vw"
  4384. alt="Gradient for the ground piece and the grouped car layers for a clean view in the Layers panel."
  4385. />
  4386. </a>
  4387.  
  4388. <figcaption class="op-vertical-bottom">
  4389. Gradient for the ground piece and the grouped car layers for a clean view in the Layers panel. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/30dd3816-8849-41ad-8e86-06d1751ebf9e/17-gradient-floor.png'>View large version</a>)
  4390. </figcaption>
  4391. </figure>
  4392.  
  4393.  
  4394. <ul>
  4395. <li><strong>Clouds</strong><br />
  4396. For the clouds, select the Cloud tool from the list of (primitive) vector shapes. Draw a cloud by holding Shift to keep the proportions. Make it white. Transform it into curves, and with the Node tool (<kbd>A</kbd>) select the bottom nodes and delete them. Sub-select the bottom-left and bottom-right nodes (after deleting all of the others), and then in the Context toolbar, select “Convert to Sharp” in the Convert section. This will make your bottom segment straight. Apply some transparency with the Transparency tool (<kbd>Y</kbd>), and duplicate this cloud. Place the clouds in your drawing, spread apart as you wish and in different sizes.</li>
  4397. </ul>
  4398.  
  4399. <p>My clouds have 12 bubbles and an inner radius of 82%. You can do the same or change these values to your liking.</p>
  4400.  
  4401. <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/34b65b64-d2fe-41d8-9f7f-1f6c7e263864/clouds.gif"><img src="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/34b65b64-d2fe-41d8-9f7f-1f6c7e263864/clouds.gif" width="600" height="375" alt="Creating the clouds with the Cloud tool and the Transparency tool" /></a><figcaption>Creating the clouds with the Cloud tool and the Transparency tool (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/34b65b64-d2fe-41d8-9f7f-1f6c7e263864/clouds.gif">View large version</a>)</figcaption></figure>
  4402.  
  4403. <ul>
  4404. <li><strong>Palm trees</strong><br />
  4405. To create the palm trees, use the Crescent tool from the list of primitive shapes on the left. Give it a gradient color, with a left stop of <code>#F05942</code> and a right stop of <code>#D15846</code>.</li>
  4406. </ul>
  4407.  
  4408. <p>Drag to draw the crescent shape. Move its center of rotation to the bottom of the bounding box, and give it a -60-degree angle.</p>
  4409.  
  4410. <p>The center of rotation can be made visible in the Contextual toolbar section for the Move (and Node) tool. It looks like a little crosshair icon. When you click on it, the crosshair for moving the rotation center of an object will show. Duplicate it, either via <kbd>Cmd</kbd> + <kbd>C</kbd> and <kbd>Cmd</kbd> + <kbd>V</kbd> (Mac) or <kbd>Ctrl</kbd> + <kbd>C</kbd> and <kbd>Ctrl</kbd> + <kbd>V</kbd> (Windows), or by clicking and then <kbd>Alt</kbd> + dragging on the object, and move the angle of the new crescent to -96 degrees. Make it a bit smaller. Copy the two shapes and flip them horizontally.</p>
  4411.  
  4412. <p>I also created and extra crescent.</p>
  4413.  
  4414. <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a8a0abee-c070-4b23-9998-12c46a0555e8/palm1.gif"><img src="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a8a0abee-c070-4b23-9998-12c46a0555e8/palm1.gif" width="600" height="375" alt="Creating the palm leaves" /></a><figcaption>Create the palm leaves (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a8a0abee-c070-4b23-9998-12c46a0555e8/palm1.gif">View large version</a>)</figcaption></figure>
  4415.  
  4416. <p>To create the indentations on the leaves, transform the object to curves, add a node with the Node tool, and pull inwards. To make the vortex sharp, use “Convert” &rarr; “Sharp”.</p>
  4417.  
  4418. <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b0eb7a64-952f-4c2b-978b-fd11c9c87275/palm2.gif"><img src="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b0eb7a64-952f-4c2b-978b-fd11c9c87275/palm2.gif" width="600" height="375" alt="Creating the leaves’ indentations" /></a><figcaption>Creating the leaves’ indentations (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b0eb7a64-952f-4c2b-978b-fd11c9c87275/palm2.gif">View large version</a>)</figcaption></figure>
  4419.  
  4420. <p>Create the trunk of the palm tree with the Pen tool, group all of the shapes together, and apply an “add” boolean. This way, all of the shapes will transform into just one. Apply a 60% opacity to it.</p>
  4421.  
  4422.  
  4423.  
  4424.  
  4425.  
  4426.  
  4427.  
  4428.  
  4429.  
  4430.  
  4431.  
  4432. <figure >
  4433. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fbbb670d-a3b5-45f0-ae33-74dbd7ba0b29/joint-palmtree.png">
  4434. <img
  4435. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fbbb670d-a3b5-45f0-ae33-74dbd7ba0b29/joint-palmtree.png 400w,
  4436.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fbbb670d-a3b5-45f0-ae33-74dbd7ba0b29/joint-palmtree.png 800w,
  4437.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fbbb670d-a3b5-45f0-ae33-74dbd7ba0b29/joint-palmtree.png 1200w,
  4438.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fbbb670d-a3b5-45f0-ae33-74dbd7ba0b29/joint-palmtree.png 1600w,
  4439.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fbbb670d-a3b5-45f0-ae33-74dbd7ba0b29/joint-palmtree.png 2000w"
  4440. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fbbb670d-a3b5-45f0-ae33-74dbd7ba0b29/joint-palmtree.png"
  4441. sizes="100vw"
  4442. alt="The palm tree once the Add boolean operation has been applied."
  4443. />
  4444. </a>
  4445.  
  4446. <figcaption class="op-vertical-bottom">
  4447. The palm tree once the Add boolean operation has been applied (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/fbbb670d-a3b5-45f0-ae33-74dbd7ba0b29/joint-palmtree.png'>View large version</a>)
  4448. </figcaption>
  4449. </figure>
  4450.  
  4451.  
  4452. <p>Duplicate the tree shape several times, changing the sizes and tweaking to make the trees slightly different from one another. (Making them exactly the same would result in a less interesting image.)</p>
  4453.  
  4454. <p>The last thing we need to make is the sun.</p>
  4455.  
  4456. <ul>
  4457. <li><strong>The sun</strong><br />
  4458. For this, simply draw an ellipse and apply a color of <code>#FFFFBA</code> to it. Apply a transparency with the Transparency tool (<kbd>Y</kbd>), where the bottom is transparent and gets opaque at the top.</li>
  4459. </ul>
  4460.  
  4461.  
  4462.  
  4463.  
  4464.  
  4465.  
  4466.  
  4467.  
  4468.  
  4469.  
  4470.  
  4471. <figure class="article__image break-out">
  4472. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/31e2fada-5b56-430c-a296-6ba0cbe9b2fe/sun.png">
  4473. <img
  4474. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/31e2fada-5b56-430c-a296-6ba0cbe9b2fe/sun.png 400w,
  4475.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/31e2fada-5b56-430c-a296-6ba0cbe9b2fe/sun.png 800w,
  4476.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/31e2fada-5b56-430c-a296-6ba0cbe9b2fe/sun.png 1200w,
  4477.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/31e2fada-5b56-430c-a296-6ba0cbe9b2fe/sun.png 1600w,
  4478.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/31e2fada-5b56-430c-a296-6ba0cbe9b2fe/sun.png 2000w"
  4479. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/31e2fada-5b56-430c-a296-6ba0cbe9b2fe/sun.png"
  4480. sizes="100vw"
  4481. alt="Transparency applied to the sun shape"
  4482. />
  4483. </a>
  4484.  
  4485. <figcaption class="op-vertical-bottom">
  4486. Transparency applied to the sun shape (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/31e2fada-5b56-430c-a296-6ba0cbe9b2fe/sun.png'>View large version</a>)
  4487. </figcaption>
  4488. </figure>
  4489.  
  4490.  
  4491. <p>Now we will add some detail by overlapping several rounded rectangles over the sun circle and subtracting them (click <kbd>Alt</kbd> for a non-destructive action, if you prefer).</p>
  4492.  
  4493. <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8682f945-ffc3-4eca-9ecc-911f664e6003/sun-subtract.gif"><img src="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8682f945-ffc3-4eca-9ecc-911f664e6003/sun-subtract.gif" width="600" height="375" alt="Applying a subtract operation" /></a><figcaption>Applying a subtract operation (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8682f945-ffc3-4eca-9ecc-911f664e6003/sun-subtract.gif">View large version</a>)</figcaption></figure>
  4494.  
  4495. <p>Place your sun in the scene, and we are done!</p>
  4496.  
  4497. <h4>12. A Note On The Stacking Order (And Naming Of Layers)</h4>
  4498.  
  4499. <p>While you work, and as the number of objects (layers) grows, which will also make your illustration more and more complex, keep in mind the <strong>stacking order</strong> of your layers. The sooner you start naming the layers <strong>and</strong> placing them in the right order, the better. Also, lock those layers that you’re done with (especially for things such as the background), so that they don’t get in the way as you work.</p>
  4500.  
  4501. <p>In this illustration, the order of elements from bottom to top is:</p>
  4502.  
  4503. <ul>
  4504. <li>background,</li>
  4505. <li>ground,</li>
  4506. <li>sun,</li>
  4507. <li>clouds,</li>
  4508. <li>palm trees,</li>
  4509. <li>car.</li>
  4510. </ul>
  4511.  
  4512. <h3>Conclusion</h3>
  4513.  
  4514. <p>I hope you could follow all of the steps with no major problems and now better understand some of Affinity Designer’s main tools and actions. (Of course, if you have some questions or need help, leave a comment below!)</p>
  4515.  
  4516. <p>These tools will allow you to create not only flat illustrations, but many other kinds of artwork as well. The tools, actions and procedures we’ve used here are some of the most useful and common that designers and illustrators use daily (including me), be it for simple illustration projects or much more complex ones.</p>
  4517.  
  4518. <p>However, even my <a href="https://dribbble.com/shots/2373851-1957-Chevy-Corvette-Roadster-Vector-Drawing">most complex illustrations</a> usually need the same tools that we’ve seen in action in this tutorial! It’s mainly a matter of understanding how much you can get out of each tool.</p>
  4519.  
  4520. <p>Remember the few important tips, such as locking the layers that could get in your way (or using half-transparency), stacking the layers in the right order, and naming them, so that even the most complex of illustrations are easy to organize and work with. Practice often, and try to organize things so that your workflow improves &mdash; this will lead to better artwork and better time management as well.</p>
  4521.  
  4522. <p>Also, to learn more about how to create this type of illustration, check out the <a href="https://www.youtube.com/watch?v=V0c9f270zFU">video tutorial</a> that I posted on my YouTube channel.</p>
  4523.  
  4524.  
  4525.  
  4526.  
  4527.  
  4528.  
  4529.  
  4530.  
  4531.  
  4532.  
  4533.  
  4534. <figure class="article__image break-out">
  4535. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e25a538e-9616-4cc1-887f-3ac549e6277c/finished-beetle.png">
  4536. <img
  4537. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e25a538e-9616-4cc1-887f-3ac549e6277c/finished-beetle.png 400w,
  4538.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e25a538e-9616-4cc1-887f-3ac549e6277c/finished-beetle.png 800w,
  4539.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e25a538e-9616-4cc1-887f-3ac549e6277c/finished-beetle.png 1200w,
  4540.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e25a538e-9616-4cc1-887f-3ac549e6277c/finished-beetle.png 1600w,
  4541.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e25a538e-9616-4cc1-887f-3ac549e6277c/finished-beetle.png 2000w"
  4542. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e25a538e-9616-4cc1-887f-3ac549e6277c/finished-beetle.png"
  4543. sizes="100vw"
  4544. alt="The completed Volkswagen Beetle illustration."
  4545. />
  4546. </a>
  4547.  
  4548. <figcaption class="op-vertical-bottom">
  4549. The completed Volkswagen Beetle illustration. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e25a538e-9616-4cc1-887f-3ac549e6277c/finished-beetle.png'>View large version</a>)
  4550. </figcaption>
  4551. </figure>
  4552.  
  4553.  
  4554. <div class="signature">
  4555.  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial">
  4556.  <span>(mb, ms, ra, yk, al, il)</span>
  4557. </div>
  4558.  
  4559.  
  4560.              </article>
  4561.            </body>
  4562.          </html>
  4563.        ]]></content:encoded>
  4564.      </item>
  4565.    
  4566.      <item>
  4567.        
  4568.          
  4569.          <author>Murat Kemaldar</author>
  4570.        
  4571.        <title>Learning To Code By Writing Code Poems</title>
  4572.        <link>https://www.smashingmagazine.com/2018/07/writing-code-poems/</link>
  4573.        <pubDate>Wed, 11 Jul 2018 14:00:32 +0200</pubDate>
  4574.        <guid>https://www.smashingmagazine.com/2018/07/writing-code-poems/</guid>
  4575.        <description>Back in 2008, I started studying design and clearly remember how the sheer sight of code just intimidated me. I had some coding classes, and without any prior coding experience, I had a tough time understanding the code I first got in touch with. Suddenly, the words that I was used to in the English language (such as &amp;ldquo;new,&amp;rdquo; &amp;ldquo;return&amp;rdquo; and &amp;ldquo;throw/catch&amp;rdquo;) took on a whole new meaning; the cryptic syntax, semicolons, brackets and completely new rules didn’t make things any easier for me.</description>
  4576.        <content:encoded><![CDATA[
  4577.          <html>
  4578.            <head>
  4579.              <meta charset="utf-8">
  4580.              <link rel="canonical" href="https://www.smashingmagazine.com/2018/07/writing-code-poems/" />
  4581.              <title>Learning To Code By Writing Code Poems</title>
  4582.            </head>
  4583.            <body>
  4584.              <article>
  4585.                <header>
  4586.                  <h1>Learning To Code By Writing Code Poems</h1>
  4587.                  
  4588.                    
  4589.                    <address>Murat Kemaldar</address>
  4590.                  
  4591.                  <time datetime="2018-07-11T14:00:32&#43;02:00" class="op-published">2018-07-11T14:00:32+02:00</time>
  4592.                  <time datetime="2018-07-23T11:42:51&#43;00:00" class="op-modified">2018-07-23T11:42:51+00:00</time>
  4593.                </header>
  4594.                
  4595.  
  4596. <p>Back in 2008, I started studying design and clearly remember how the sheer sight of code just intimidated me. I had some coding classes, and without any prior coding experience, I had a tough time understanding the code I first got in touch with. Suddenly, the words that I was used to in the English language (such as &ldquo;new,&rdquo; &ldquo;return&rdquo; and &ldquo;throw/catch&rdquo;) took on a whole new meaning; the cryptic syntax, semicolons, brackets and completely new rules didn’t make things any easier for me.</p>
  4597.  
  4598. <p>If you are new to JavaScript and/or have struggles adding it to your skillset, I may have an approach for you to overcome those barriers. You are definitely not alone, and you have every right to think that learning to code is a tough nut to crack.</p>
  4599.  
  4600. <h3 id="why-is-learning-to-code-so-tough">Why Is Learning To Code So Tough?</h3>
  4601.  
  4602. <p>Here are <strong>some of the misconceptions</strong> about why I think people are having a hard time learning or getting interested in JavaScript (or any coding language):</p>
  4603.  
  4604. <ul>
  4605. <li>Code is cryptic, purely functional and scary;</li>
  4606. <li>Code is meant for machines only, so people do not feel addressed or engaged;</li>
  4607. <li>Code is not treated as a language because it has a completely different use case and looks very different from anything they have seen before;</li>
  4608. <li>People think of stereotypes (evil hackers, maybe some Matrix dudes), and thus do not identify themselves with it.</li>
  4609. </ul>
  4610.  
  4611.  
  4612.  
  4613. <aside class="product-panel product-panel__tilted product-panel--book" data-audience="non-subscriber">
  4614.    <div class="container product-panel--book__container">
  4615.      <div class="panel__description panel__description--book">
  4616.    <p>Nope, we can't do any magic tricks, but we have articles, <a href="http://smashed.by/perfpanelbooks">books</a> and <a href="http://smashed.by/perfpaneltv">webinars</a> featuring techniques we all can use to improve our work. <a href="http://smashed.by/perfpanelmembership">Smashing Members</a> get a seasoned selection of magic front-end tricks — e.g. <strong>live designing sessions</strong> and perf audits, too. <em>Just sayin'</em>! ;-)</p>
  4617.  
  4618.      <a href="http://smashed.by/perfpanelmembership" class="btn btn--green btn--large">
  4619.        Explore Smashing Wizardry&nbsp;→
  4620.      </a>
  4621.      </div>
  4622.      <div class="panel__image panel__image--book">
  4623.        <a href="http://smashed.by/perfpanelmembership" class="books__book__image">
  4624.        <div class="books__book__img">
  4625.          <img src="https://www.smashingmagazine.com/images/smashing-cat/cat-wizard.svg" alt="Smashing Cat, just preparing to do some magic stuff." width="310" height="400">
  4626.        </div>
  4627.      </a>
  4628.      </div>
  4629.    </div>
  4630.  </aside>
  4631.  
  4632.  
  4633.  
  4634.  
  4635.  
  4636.  
  4637.  
  4638.  
  4639.  
  4640.  
  4641.  
  4642.  
  4643.  
  4644.  
  4645. <figure >
  4646. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8ce7d4c0-bc1d-428f-af64-7bb324419ce6/writing-code-poetically-baby.png">
  4647. <img
  4648. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8ce7d4c0-bc1d-428f-af64-7bb324419ce6/writing-code-poetically-baby.png 400w,
  4649.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8ce7d4c0-bc1d-428f-af64-7bb324419ce6/writing-code-poetically-baby.png 800w,
  4650.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8ce7d4c0-bc1d-428f-af64-7bb324419ce6/writing-code-poetically-baby.png 1200w,
  4651.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8ce7d4c0-bc1d-428f-af64-7bb324419ce6/writing-code-poetically-baby.png 1600w,
  4652.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8ce7d4c0-bc1d-428f-af64-7bb324419ce6/writing-code-poetically-baby.png 2000w"
  4653. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8ce7d4c0-bc1d-428f-af64-7bb324419ce6/writing-code-poetically-baby.png"
  4654. sizes="100vw"
  4655. alt="A young and unexperienced student with a pacifier and pillow"
  4656. />
  4657. </a>
  4658.  
  4659. <figcaption class="op-vertical-bottom">
  4660. Me, before any contact with code (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8ce7d4c0-bc1d-428f-af64-7bb324419ce6/writing-code-poetically-baby.png'>Large preview</a>)
  4661. </figcaption>
  4662. </figure>
  4663.  
  4664.  
  4665. <p>As a developer, you are expected to treat code in a very specific way &mdash; even to think in a quite different (and highly logical) way. Coding languages are quite strict and intolerant; a single character can make the machine fail to understand what you mean and make applications crash. You are expected to ignore and override certain things you know from speaking and writing a human language (which is, by the way, also the case when learning a new human language).</p>
  4666.  
  4667. <p>But not all programming languages, documentations or tutorials on the web are made with this &ldquo;human to programming language transition&rdquo; in mind. Of course, they don’t have to. After all, the main purpose of code is to tell machines what to do.</p>
  4668.  
  4669. <p>Still, due to that purpose, a chance for comparison is simply missing and the languages you speak (vocabulary and rules) seem to be rendered useless for learning a programming language. <strong>There is no word for &ldquo;love&rdquo; in the JavaScript language</strong>, nor does it make sense to say &ldquo;I love you.&rdquo; A machine (or browser) simply does not know or care about love (yet?). This &ldquo;completely new&rdquo; and &ldquo;don’t know where to start&rdquo; feeling can be scary as hell.</p>
  4670.  
  4671.  
  4672.  
  4673.  
  4674.  
  4675.  
  4676.  
  4677.  
  4678.  
  4679.  
  4680.  
  4681. <figure >
  4682. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ba520005-77e6-471e-b5f5-4f1a69f3ca73/writing-code-poetically-baby2.png">
  4683. <img
  4684. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ba520005-77e6-471e-b5f5-4f1a69f3ca73/writing-code-poetically-baby2.png 400w,
  4685.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ba520005-77e6-471e-b5f5-4f1a69f3ca73/writing-code-poetically-baby2.png 800w,
  4686.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ba520005-77e6-471e-b5f5-4f1a69f3ca73/writing-code-poetically-baby2.png 1200w,
  4687.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ba520005-77e6-471e-b5f5-4f1a69f3ca73/writing-code-poetically-baby2.png 1600w,
  4688.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ba520005-77e6-471e-b5f5-4f1a69f3ca73/writing-code-poetically-baby2.png 2000w"
  4689. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ba520005-77e6-471e-b5f5-4f1a69f3ca73/writing-code-poetically-baby2.png"
  4690. sizes="100vw"
  4691. alt=" A student who is intimidated by coding languages"
  4692. />
  4693. </a>
  4694.  
  4695. <figcaption class="op-vertical-bottom">
  4696. Me, after my first contact with code. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ba520005-77e6-471e-b5f5-4f1a69f3ca73/writing-code-poetically-baby2.png'>Large preview</a>)
  4697. </figcaption>
  4698. </figure>
  4699.  
  4700.  
  4701. <p>This is why I am here. I think that you can learn JavaScript in a much easier and artistic fashion, by holding on to your human language knowledge, and by treating JavaScript like any other human language. Let me demonstrate with a small example.</p>
  4702.  
  4703. <p><strong>Fun fact</strong>: <em>Some programming languages actually have the transition from one programming language to another in mind. This is why it is so much easier to learn a lot of programming languages &mdash; just by learning a single one.</em></p>
  4704.  
  4705. <h3 id="a-small-example">A Small Example</h3>
  4706.  
  4707. <p>In a lot of cases, when you want to execute JavaScript code, you want the &ldquo;document&rdquo; (basically the website, a user is downloading on each visit) to be ready so that you can interact with HTML elements, for example. In pure JavaScript, you may stumble over something this:</p>
  4708.  
  4709. <p><pre><code class="language-javascript">(function() {
  4710.   // Your code goes here
  4711. })();
  4712. </pre></code></p>
  4713.  
  4714. <p>(Yuck! 😖 In this case, a function is defined in brackets, and then immediately called with another pair of brackets at the end. This is referred to as an <a href="https://developer.mozilla.org/en-US/docs/Glossary/IIFE">IIFE</a>.)</p>
  4715.  
  4716. <p>Or sometimes like this:</p>
  4717.  
  4718. <p><pre><code class="language-javascript">if (document.readyState === &lsquo;complete&rsquo;) {
  4719.  // Your code goes here
  4720. }
  4721. </pre></code></p>
  4722.  
  4723. <p>The first snippet definitely requires an explanation, while with the second (and maybe some fantasy), one could comprehend that there is a condition which needs to be fulfilled so that something else happens just by just looking at it.</p>
  4724.  
  4725. <p>Imagine something like this, though:</p>
  4726.  
  4727. <p><pre><code class="language-javascript">onceUponATime(function () {
  4728.  // Your code (story) goes here
  4729. })
  4730. </pre></code></p>
  4731.  
  4732. <p>&ldquo;Once upon a time&rdquo; is something (dare I say) even a child might understand. It addresses the developer (by referring to childhood memories), while theoretically doing the same thing. This is what I consider &ldquo;having the human to coding language transition&rdquo; in mind.</p>
  4733.  
  4734. <p><strong>Quick note on &ldquo;functions</strong>&ldquo;: A function is basically a skill, which is dormant until you call upon it. &ldquo;To read&rdquo; is a skill <code>function read() { … }</code>, which is called upon when you are want to read something like this: <code>read()</code>. There is also something called “anonymous functions”, i.e. <code>&quot;function() { … }</code> (has no name, like in the snippets above) which are basically &ldquo;one-time / casual actions&rdquo; that you wouldn’t consider to be a skill, such as &ldquo;to push a button.&rdquo;</p>
  4735.  
  4736. <h3 id="turning-the-tables-from-message-to-basics">Turning The Tables: From Message To Basics</h3>
  4737.  
  4738. <p>So let’s take this idea a bit further. Let’s take the reasons and misconceptions above, and turn them upside-down:</p>
  4739.  
  4740. <blockquote>A small poem.<br /><br />Written in JavaScript.<br /><br />Made for human beings.<br /><br />About the love between two individuals.</blockquote>
  4741.  
  4742. <p><pre><code class="language-javascript">// Love at first sight
  4743. if (me.getDistanceTo(you.position) &lt; 200) {
  4744.  me.setFeelings({
  4745.    inLove: true,
  4746.  });
  4747. }
  4748. </pre></code></p>
  4749.  
  4750. <p>It is not functional. It is currently not meant for machines. It is meant for you to read and understand.</p>
  4751.  
  4752. <p>If you got the message of the poem, you actually understood a piece of JavaScript code, which you might have compared to the English language.</p>
  4753.  
  4754. <p>Now you might ask yourself: I understand this, but why is it written like this? What are the rules (grammar) of this language? What is the meaning of &ldquo;me&rdquo; (in a technical sense), and why does this code look so similar to English?</p>
  4755.  
  4756. <h3 id="rules-vocabulary-and-variables">Rules, Vocabulary, And Variables</h3>
  4757.  
  4758. <p>One of the most important things to understand when learning a programming language is <strong>the concept of variables</strong>.</p>
  4759.  
  4760. <p>Every human language has its rules (grammar) and a lot of vocabulary (pre-defined). Obviously, both of these first need to be learned in order to be able to speak the language.</p>
  4761.  
  4762. <p>JavaScript, like many other programming languages, also comes with its own set of rules (e.g. the <code>.</code> between the words or how <code>if</code> statements are written) and its own vocabulary (<code>if</code>, <code>document</code>, <code>window</code>, <code>Event</code>, and so on). These keywords are reserved (or ‘pre-defined’) by JavaScript (and the browser), and each one of them has its specific purpose.</p>
  4763.  
  4764. <p>But like I mentioned earlier, a chance to compare the words and sentences you know from the English language is seemingly missing because <strong>there are no equivalents</strong>.</p>
  4765.  
  4766. <p>This is where variables come in; you (the developer) can (or even have to) define the variables in order to make machines and developers understand what something stands for. Variables can take a lot of forms (hence the name): They can be a chain of words and letters (strings), a number, an action (function), or even a collection (array). You name it.</p>
  4767.  
  4768. <p>In all languages, there is probably a word for love. You kinda know what it means, but not really, because it is so subjective. But still, there is a word for it.</p>
  4769.  
  4770. <p>But in JavaScript, there is no &ldquo;love,&rdquo; until you say there is. It can be whatever you want it to be.</p>
  4771.  
  4772. <p><pre><code class="language-javascript">var love = {
  4773.  color: &lsquo;red&rsquo;,
  4774.  duration: 365,
  4775.  loveTarget:  &lsquo;cats&rsquo;,
  4776. };
  4777. // a simple variable expression,
  4778. // where love is an object &ldquo;{ &hellip; }&rdquo;, a thing
  4779. // with some properties (color, duration, loveTarget).</p>
  4780.  
  4781. <p>const love2 = {
  4782.  color: &lsquo;purple&rsquo;,
  4783.  duration: &lsquo;forever&rsquo;,
  4784.  loveTarget: &lsquo;dogs&rsquo;,
  4785. };</p>
  4786.  
  4787. <p>// also a variable expression, where love2 (a constant),
  4788. // cannot be redefined / overwritten completely:
  4789. // love2 = undefined; // =&gt; will not work</p>
  4790.  
  4791. <p>// (&ldquo;undefined&rdquo; is a pre-defined javascript keyword,
  4792. // basically saying &ldquo;has no value&rdquo;)
  4793. </pre></code></p>
  4794.  
  4795. <p>It is crucial to be able to distinguish between what is pre-defined in JavaScript (JavaScript rules and vocabulary), and what is actually custom defined by the developer (also known as ‘application logic’ or ‘business logic’).</p>
  4796.  
  4797. <p>Returning to the poem written above:</p>
  4798.  
  4799. <p><pre><code class="language-javascript">// Love at first sight
  4800. if (me.getDistanceTo(you.position) &lt; 200) {
  4801.  me.setFeelings({
  4802.    inLove: true,
  4803.  });
  4804. }
  4805. </pre></code></p>
  4806.  
  4807. <p>These expressions come from the following JavaScript vocabulary/ruleset:</p>
  4808.  
  4809. <p><pre class="break-out"><code class="language-javascript">if (&hellip;) { &hellip; }
  4810. // if statement: when &hellip; is met, do things in { &hellip; }</p>
  4811.  
  4812. <p>{
  4813.    inLove: true,
  4814. }
  4815. // an &ldquo;object&rdquo; with some info, some thing in the world.
  4816. // can contain other info, and &ldquo;skills&rdquo; (functions).
  4817. // &ldquo;inLove&rdquo; is a custom property,
  4818. // &ldquo;true&rdquo; is pre-defined in javascript, (meaning: &ldquo;yes&rdquo;)
  4819. // and the value of &ldquo;inLove&rdquo;.</p>
  4820.  
  4821. <p>.
  4822. // needed to access an objects property &ldquo;my name: me.name&rdquo;</p>
  4823.  
  4824. <p>getDistanceTo()
  4825. // an expression to &ldquo;call&rdquo; a function (a &ldquo;skill&rdquo;).
  4826. // getDistanceTo is custom (not JavaScript), and a function,
  4827. // so it can be executed / called upon with the &ldquo;()&rdquo; after.
  4828. // sometimes you can pass arguments in those brackets (like &ldquo;position&rdquo;)
  4829. // to change the outcome of a function.
  4830. </pre></code></p>
  4831.  
  4832. <p>And these are the variables (where you have free reign over defining their names and behavior):</p>
  4833.  
  4834. <p><pre class="break-out"><code class="language-javascript">me // an object, some thing in the world
  4835. you // an object, some thing in the world
  4836. position // an info about &ldquo;you&rdquo;, accessed by the &ldquo;.&rdquo;
  4837. getDistanceTo // a skill of me, accessed by the &ldquo;.&rdquo;
  4838. getDistanceTo() // the skill, with javascript grammar telling: do it.
  4839. getDistanceTo(position) // same, but do it with &ldquo;position&rdquo;.
  4840. setFeelings // another skill of me, accessed by the &ldquo;.&rdquo;
  4841. setFeelings({ inLove: true }); // the skill, with some instructions (an object).
  4842. </pre></code></p>
  4843.  
  4844. <p>Let’s assume the poem is now human-readable. You might have understood the message, you also might see the difference between JavaScript language rules you need to follow, and the things you actually have to come up with yourself (the variables).</p>
  4845.  
  4846. <p>But what about the machine?</p>
  4847.  
  4848. <p>If the machine (the browser) were to read this poem, it would throw an error. The machine needs a definition of &ldquo;me&rdquo; and &ldquo;you&rdquo; because it tries to access its properties (via the <code>.</code> in <code>me.getDistanceTo()</code>). With the distinction ability mentioned above, you can actually engineer &ldquo;me&rdquo; and &ldquo;you&rdquo; to make the poem executeable/machine-readable, like this:</p>
  4849.  
  4850. <p><pre><code class="language-javascript">// This is how the definition of a being (me/you) could look like</p>
  4851.  
  4852. <p>var me = {
  4853.  position: {x: 0, y: 0} // some coordinates, maybe
  4854.  getDistanceTo: function(position) {
  4855.    // calculate the distance, relative to own position
  4856.  },
  4857.  setFeelings: function(feelings) {
  4858.    // handle those feelings&hellip;
  4859.  }
  4860. }</p>
  4861.  
  4862. <p>var you = {
  4863.  position: {x: 0, y: 0} // some coordinates, maybe
  4864. }</p>
  4865.  
  4866. <p>// the poem itself
  4867. if (me.getDistanceTo(you.position) &lt; 200) {
  4868.  me.setFeelings({
  4869.    inLove: true,
  4870.  });
  4871. }
  4872. </pre></code></p>
  4873.  
  4874. <p>So what happened here?</p>
  4875.  
  4876. <ul>
  4877. <li>We read a JavaScript poem, written with JavaScript &ldquo;grammar&rdquo; with the only goal to be understood by human beings.</li>
  4878. <li>After understanding the message, we distinguished between rules, vocabulary, and variables, to understand the structure of the poem (grammar and basics of JavaScript).</li>
  4879. <li>With that distinction, we engineered the rest of the poems variables, with JavaScript rules in order to make it runnable by a machine (in the browser).</li>
  4880. </ul>
  4881.  
  4882. <p><strong>This was possible, because we treated JavaScript just like the English language.</strong></p>
  4883.  
  4884. <div class="sponsors__wide-place"></div>
  4885.  
  4886.  
  4887.  
  4888.  
  4889. <h3 id="a-bigger-example-interactive-code-poetry">A Bigger Example: Interactive Code Poetry</h3>
  4890.  
  4891. <p>This is how my personal project <a href="https://lovebits.bilebile.net/">LoveBits</a> came to be. LoveBits is a code learning/storytelling experience.</p>
  4892.  
  4893. <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/65065399-4008-4313-a3b5-2c45221d7f77/writing-code-poetically-lovebits-intro.gif"><img src="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/65065399-4008-4313-a3b5-2c45221d7f77/writing-code-poetically-lovebits-intro.gif" width="1800" height="1450" alt="Animated demonstration of the LoveBits project" /></a><figcaption>LoveBits: Code poetry project in JavaScript (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/65065399-4008-4313-a3b5-2c45221d7f77/writing-code-poetically-lovebits-intro.gif">Large preview</a>)</figcaption></figure>
  4894.  
  4895. <p>It tries to get people interested in JavaScript/coding by:</p>
  4896.  
  4897. <ul>
  4898. <li>Putting readability and human language first;</li>
  4899. <li>Combining code with an art the reader might already be familiar with.</li>
  4900. </ul>
  4901.  
  4902. <p>Storywise, it is about two Bits (rectangular beings); one of the Bits (blueBit) is the romantic one and writes JavaScript love poems to the other Bit (purpleBit).</p>
  4903.  
  4904. <p>When you start LoveBits, you can select one of the multiple love poems (written in JavaScript). Each poem has a code snippet which is written in a way that it is supposed to be understood by people who are not even familiar with programming. <strong>The only requirement is the English language.</strong></p>
  4905.  
  4906. <p>&ldquo;Love at first sight&rdquo; (actually one of the LoveBits poems), for example, is about these two Bits in which the blueBit basically says, “If I get close enough to your position, I will ‘set my feelings’ to <code>inLove: true</code>.”</p>
  4907.  
  4908. <p>The special thing about these poems though is that you can &ldquo;run&rdquo; or &ldquo;play&rdquo; them simply by pressing the &ldquo;play&rdquo; button below. In the case of &ldquo;Love at first sight,&rdquo; you would see a blue and purple rectangle along with a number. As you might&rsquo;ve already guessed, those are the two Bits mentioned in the poem, and the number below the blueBit is actually the distance between the blueBit and the purpleBit.</p>
  4909.  
  4910. <p>As the poem suggests, you may want to make the blueBit fall in love with the purpleBit by reducing the distance between them,  right? So what can you do? You can interact and drag the blueBit around, and make it fall in love. But be careful, sometimes there is more than just one outcome.</p>
  4911.  
  4912. <p>One might actually say that you are the machine here. You&rsquo;re the one who needs to interpret JavaScript code to be able to act and help two digital beings fall in love.</p>
  4913.  
  4914. <h3 id="where-to-go-from-here">Where To Go From Here?</h3>
  4915.  
  4916. <p>If you are a struggling developer, try treating JavaScript like a human language, and just understand what code snippets are supposed to do first instead of what they actually end up doing.</p>
  4917.  
  4918. <p>This is what I would recommend you to do next:</p>
  4919.  
  4920. <ul>
  4921. <li>Always prefer going straight for examples and code for entire applications that combine rules, vocabulary, and variables together to form an application logic;</li>
  4922. <li>Application logic will tell the stories that will help you fill the gaps like in the code examples above. Code libraries and utilities such as <code>lodash</code> will only provide you with new vocabulary which will become helpful after being able to read and understand JavaScript code;</li>
  4923. <li>Review existing code, and try to break it down into small functions with names that reflect what they do. Write code which addresses humans and machines alike. Write code in such a way that it can be read like a sentence. Use comments wherever needed. Think about: How would I express this in a human language (to another developer)?</li>
  4924. </ul>
  4925.  
  4926. <h3 id="conclusion">Conclusion</h3>
  4927.  
  4928. <p>Learning to code can become easier once you start treating code as a human language and not as something aliens may have invented. Learning to distinguish between language features (built-ins) and variables/custom code for application logic is crucial. Being able to understand the application logic will put you in a powerful position to improve and change things, without even knowing language features.</p>
  4929.  
  4930. <p><strong>Message before basics</strong>: Understand the message of any code snippet, and the basics of JavaScript will naturally follow. How many times have you heard someone say, “I understand the language, but I do not speak it yet”? It is a natural process, which can and maybe <em>should</em> be applied for learning both human and coding languages.</p>
  4931.  
  4932. <p>Also, always keep in mind that code has a clear functional purpose, but it does not always have to be like that. Even human languages were purely functional once, but then there came poems and even songs (JavaScript songs, anyone?), which connected people in entirely different ways. I think, or hope, that the same can apply here.</p>
  4933.  
  4934. <p>Always <a href="https://github.com/explore">explore</a> <a href="https://codepen.io/pens/">code projects</a>, and perhaps even try writing a poem yourself (maybe even in another programming language you are familiar with)? I enjoyed creating the <a href="https://lovebits.bilebile.net/">LoveBits</a> project and would love to see some of your ideas in the comments below!</p>
  4935.  
  4936. <h4 id="further-reading">Further Reading</h4>
  4937.  
  4938. <ul>
  4939. <li>“<a href="https://nostarch.com/hemingway">If Hemingway wrote JavaScript</a>,” Angus Croll<br />
  4940. This is one of my favorite books which I actually stumbled upon after LoveBits. It’s about several famous poets and artists, and how they would have written JavaScript code snippets. It’s hilarious!</li>
  4941. </ul>
  4942.  
  4943. <div class="signature">
  4944.  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial">
  4945.  <span>(rb, ra, il)</span>
  4946. </div>
  4947.  
  4948.  
  4949.              </article>
  4950.            </body>
  4951.          </html>
  4952.        ]]></content:encoded>
  4953.      </item>
  4954.    
  4955.      <item>
  4956.        
  4957.          
  4958.          <author>Ida Aalen</author>
  4959.        
  4960.        <title>Better Collaboration By Bringing Designers Into The Code Review Process</title>
  4961.        <link>https://www.smashingmagazine.com/2018/07/collaboration-designers-code-review-process/</link>
  4962.        <pubDate>Tue, 10 Jul 2018 13:50:26 +0200</pubDate>
  4963.        <guid>https://www.smashingmagazine.com/2018/07/collaboration-designers-code-review-process/</guid>
  4964.        <description>Smooth collaboration between developers and designers is something everyone aspires to, but it’s notoriously difficult. But with today’s advanced web, it&#39;s difficult &amp;mdash; if not impossible &amp;mdash; to build a truly great product without collaborating across disciplines. Because of the range of technologies required to build a product, the product can only truly succeed when all disciplines &amp;mdash; developers and designers, content creators, and user experience strategists &amp;mdash; are deeply involved from the early stages of the project.</description>
  4965.        <content:encoded><![CDATA[
  4966.          <html>
  4967.            <head>
  4968.              <meta charset="utf-8">
  4969.              <link rel="canonical" href="https://www.smashingmagazine.com/2018/07/collaboration-designers-code-review-process/" />
  4970.              <title>Better Collaboration By Bringing Designers Into The Code Review Process</title>
  4971.            </head>
  4972.            <body>
  4973.              <article>
  4974.                <header>
  4975.                  <h1>Better Collaboration By Bringing Designers Into The Code Review Process</h1>
  4976.                  
  4977.                    
  4978.                    <address>Ida Aalen</address>
  4979.                  
  4980.                  <time datetime="2018-07-10T13:50:26&#43;02:00" class="op-published">2018-07-10T13:50:26+02:00</time>
  4981.                  <time datetime="2018-07-23T11:42:51&#43;00:00" class="op-modified">2018-07-23T11:42:51+00:00</time>
  4982.                </header>
  4983.                <p>Smooth collaboration between developers and designers is something everyone aspires to, but it’s <a href="https://www.smashingmagazine.com/2018/04/working-together-designers-developers/">notoriously difficult</a>. But with today’s advanced web, it's difficult &mdash; if not impossible &mdash; to build a truly great product without collaborating across disciplines. Because of the range of technologies required to build a product, the product can only truly succeed when all disciplines &mdash; developers <em>and</em> designers, content creators, and user experience strategists &mdash; are deeply involved from the early stages of the project. When this happens, all ends of what it takes to build a product come naturally together into a unified whole, and a thus great product.</p>
  4984.  
  4985. <p>Because of this, no one is really promoting <a href="https://en.wikipedia.org/wiki/Waterfall_model">waterfall processes</a> anymore. Nevertheless, involving other people early on, especially people from other disciplines, can feel scary. In the worst case scenario, it leads to “<a href="https://en.wikipedia.org/wiki/Design_by_committee">design by committee</a>.”</p>
  4986.  
  4987. <p>Moreover, both designers and content strategists often have backgrounds in fields in which a sole creative genius is still the ideal. Having someone else proof your work can feel like a threat to your creativity.</p>
  4988.  
  4989. <p>So how can you involve people early on so that you’re avoiding the waterfall, but also making sure that you’re not setting yourself up for design by committee? I found my answer when learning about code reviews.</p>
  4990.  
  4991.  
  4992.  
  4993. <aside class="product-panel product-panel__tilted product-panel--book" data-audience="non-subscriber">
  4994.    <div class="container product-panel--book__container">
  4995.      <div class="panel__description panel__description--book">
  4996.    <p>Getting workflow <em>just</em> right ain’t an easy task. So are proper estimates. Or alignment among different departments. That’s why we’ve set up <strong>“this-is-how-I-work”-sessions</strong> — with smart cookies sharing what works well for them. A part of the <a href="http://smashed.by/workflowpanelmembership">Smashing Membership</a>, of course.</p>
  4997.      <a href="http://smashed.by/workflowpanelmembership" class="btn btn--green btn--large">
  4998.        Explore features&nbsp;→
  4999.      </a>
  5000.      </div>
  5001.      <div class="panel__image panel__image--book">
  5002.        <a href="http://smashed.by/workflowpanelmembership" class="books__book__image">
  5003.        <div class="books__book__img">
  5004.          <img src="https://www.smashingmagazine.com/images/smashing-cat/smashing-tv-box-cat.svg" alt="Smashing TV, with live sessions for professional designers and developers." width="310" height="400">
  5005.        </div>
  5006.      </a>
  5007.      </div>
  5008.    </div>
  5009.  </aside>
  5010.  
  5011.  
  5012.  
  5013.  
  5014. <h3>The <em>Aha!</em> Moment</h3>
  5015.  
  5016. <p>In July 2017, I founded <a href="https://confrere.com">Confrere</a> together with two developers, and we quickly hired our first engineer (I’m not a developer myself, I’m more of a UX or content designer). Our collaboration was running surprisingly smoothly,  so much so that at our <a href="https://www.atlassian.com/team-playbook/plays/retrospective">retrospectives</a>, the recurring theme was that we all felt that we were “doing it right.”</p>
  5017.  
  5018.  
  5019.  
  5020.  
  5021.  
  5022.  
  5023.  
  5024.  
  5025.  
  5026.  
  5027.  
  5028. <figure >
  5029. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/50e9277c-279f-47c5-9565-53800ee25c30/00-the-team.jpeg">
  5030. <img
  5031. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/50e9277c-279f-47c5-9565-53800ee25c30/00-the-team.jpeg 400w,
  5032.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/50e9277c-279f-47c5-9565-53800ee25c30/00-the-team.jpeg 800w,
  5033.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/50e9277c-279f-47c5-9565-53800ee25c30/00-the-team.jpeg 1200w,
  5034.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/50e9277c-279f-47c5-9565-53800ee25c30/00-the-team.jpeg 1600w,
  5035.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/50e9277c-279f-47c5-9565-53800ee25c30/00-the-team.jpeg 2000w"
  5036. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/50e9277c-279f-47c5-9565-53800ee25c30/00-the-team.jpeg"
  5037. sizes="100vw"
  5038. alt="Three people are smiling and sitting next to each other around a computer. From left to right, they are Dag-Inge (CTO), Ida (CPO) and Ingvild (Sr. Engineer)."
  5039. />
  5040. </a>
  5041.  
  5042. <figcaption class="op-vertical-bottom">
  5043. Dag-Inge (CTO), myself (CPO) and Ingvild (Sr. Engineer). (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/50e9277c-279f-47c5-9565-53800ee25c30/00-the-team.jpeg'>Large preview</a>)
  5044. </figcaption>
  5045. </figure>
  5046.  
  5047.  
  5048. <p>I sat down with my colleagues to try to pinpoint what exactly it was that we were “doing right” so that we could try to preserve that feeling even as our company grew and our team expanded. We came to the realization that we all appreciated that the whole team was involved early on and that we were being honest and clear in our feedback to each other. Our CTO Dag-Inge added: “It works because we’re doing it as peers. You’re not being berated and just getting a list of faults”.</p>
  5049.  
  5050. <p>The word “peer” is what gave me the aha moment. I realized that those of us working within UX, design, and content have a lot to learn from developers when it comes to collaboration.</p>
  5051.  
  5052. <p>Peer reviewing in the form of code reviews is essential to how software gets built. To me, code reviews offer inspiration for improving collaboration within our own fields, but also a model for collaborating across fields and disciplines.</p>
  5053.  
  5054. <p>If you’re already familiar with code reviews, feel free to skip the next section.</p>
  5055.  
  5056. <h3>What Is A Code Review?</h3>
  5057.  
  5058. <p>A code review can be done in various ways. Today, the most typical form of code review happens in the way of so-called <a href="https://www.atlassian.com/git/tutorials/making-a-pull-request">pull requests</a> (using a technology called <a href="https://www.atlassian.com/git/tutorials/what-is-git">git</a>). As illustrated below, the pull requests let other people on the team know that a developer has completed code that they wish to merge with the main code base. It also allows the team to review the code: they give feedback on the code before it gets merged, in case it needs improvement.</p>
  5059.  
  5060. <p>Pull requests have clearly defined roles: there is an author and a reviewer(s).</p>
  5061.  
  5062.  
  5063.  
  5064.  
  5065.  
  5066.  
  5067.  
  5068.  
  5069.  
  5070.  
  5071.  
  5072. <figure >
  5073. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/354b8724-8a3f-4f0f-83fe-ff3c093360fe/01-code-review-01.jpeg">
  5074. <img
  5075. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/354b8724-8a3f-4f0f-83fe-ff3c093360fe/01-code-review-01.jpeg 400w,
  5076.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/354b8724-8a3f-4f0f-83fe-ff3c093360fe/01-code-review-01.jpeg 800w,
  5077.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/354b8724-8a3f-4f0f-83fe-ff3c093360fe/01-code-review-01.jpeg 1200w,
  5078.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/354b8724-8a3f-4f0f-83fe-ff3c093360fe/01-code-review-01.jpeg 1600w,
  5079.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/354b8724-8a3f-4f0f-83fe-ff3c093360fe/01-code-review-01.jpeg 2000w"
  5080. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/354b8724-8a3f-4f0f-83fe-ff3c093360fe/01-code-review-01.jpeg"
  5081. sizes="100vw"
  5082. alt="Ingvild and Dag-Inge is setting next to each other and smiling. An arrow indicated that Ingvild has sent code to Dag-Inge."
  5083. />
  5084. </a>
  5085.  
  5086. <figcaption class="op-vertical-bottom">
  5087. Ingvild (the author) requests a review from Dag-Inge (the reviewer). (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/354b8724-8a3f-4f0f-83fe-ff3c093360fe/01-code-review-01.jpeg'>Large preview</a>)
  5088. </figcaption>
  5089. </figure>
  5090.  
  5091.  
  5092. <p>As an example, let’s say our senior engineer Ingvild has made a change to Confrere’s sign-up flow. Before it is merged into the main code base and gets shipped, she (the author) creates a pull request to request a review from our CTO Dag-Inge (the reviewer). He won’t make any changes to her code, only add his comments.</p>
  5093.  
  5094.  
  5095.  
  5096.  
  5097.  
  5098.  
  5099.  
  5100.  
  5101.  
  5102.  
  5103.  
  5104. <figure >
  5105. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b30af716-c158-44a1-93d3-3eb1101dd13d/02-code-review-02.jpeg">
  5106. <img
  5107. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b30af716-c158-44a1-93d3-3eb1101dd13d/02-code-review-02.jpeg 400w,
  5108.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b30af716-c158-44a1-93d3-3eb1101dd13d/02-code-review-02.jpeg 800w,
  5109.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b30af716-c158-44a1-93d3-3eb1101dd13d/02-code-review-02.jpeg 1200w,
  5110.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b30af716-c158-44a1-93d3-3eb1101dd13d/02-code-review-02.jpeg 1600w,
  5111.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b30af716-c158-44a1-93d3-3eb1101dd13d/02-code-review-02.jpeg 2000w"
  5112. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b30af716-c158-44a1-93d3-3eb1101dd13d/02-code-review-02.jpeg"
  5113. sizes="100vw"
  5114. alt="Ingvild and Dag-Inge is setting next to each other. An arrow indicates that Dag-Inge has sent comments on code back to Ingvild."
  5115. />
  5116. </a>
  5117.  
  5118. <figcaption class="op-vertical-bottom">
  5119. Dag-Inge comments on Ingvild’s code. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b30af716-c158-44a1-93d3-3eb1101dd13d/02-code-review-02.jpeg'>Large preview</a>)
  5120. </figcaption>
  5121. </figure>
  5122.  
  5123.  
  5124. <p>It’s up to Ingvild how she wants to act on the feedback she received in the review. She’ll update her pull request with the changes she sees fit.</p>
  5125.  
  5126.  
  5127.  
  5128.  
  5129.  
  5130.  
  5131.  
  5132.  
  5133.  
  5134.  
  5135.  
  5136. <figure >
  5137. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4311ee16-a41d-4dd6-bf32-0555f7c6262e/03-code-review-03.jpeg">
  5138. <img
  5139. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4311ee16-a41d-4dd6-bf32-0555f7c6262e/03-code-review-03.jpeg 400w,
  5140.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4311ee16-a41d-4dd6-bf32-0555f7c6262e/03-code-review-03.jpeg 800w,
  5141.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4311ee16-a41d-4dd6-bf32-0555f7c6262e/03-code-review-03.jpeg 1200w,
  5142.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4311ee16-a41d-4dd6-bf32-0555f7c6262e/03-code-review-03.jpeg 1600w,
  5143.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4311ee16-a41d-4dd6-bf32-0555f7c6262e/03-code-review-03.jpeg 2000w"
  5144. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4311ee16-a41d-4dd6-bf32-0555f7c6262e/03-code-review-03.jpeg"
  5145. sizes="100vw"
  5146. alt="Ingvild and Dag-Inge are sitting next to each other. An arrow indicates that Ingvild is sending back her code to Dag-Inge, having looked through the code he commented on."
  5147. />
  5148. </a>
  5149.  
  5150. <figcaption class="op-vertical-bottom">
  5151. Ingvild updates her code with the changes she sees fit in light of Dag-Inge’s comments. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4311ee16-a41d-4dd6-bf32-0555f7c6262e/03-code-review-03.jpeg'>Large preview</a>)
  5152. </figcaption>
  5153. </figure>
  5154.  
  5155.  
  5156. <p>When the reviewer(s) approve the pull request, Ingvild can then merge her changes with the main code base.</p>
  5157.  
  5158.  
  5159.  
  5160.  
  5161.  
  5162.  
  5163.  
  5164.  
  5165.  
  5166.  
  5167.  
  5168. <figure >
  5169. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9dd649db-9e2b-4d64-8388-2c4b862c053f/04-code-review-04.jpeg">
  5170. <img
  5171. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9dd649db-9e2b-4d64-8388-2c4b862c053f/04-code-review-04.jpeg 400w,
  5172.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9dd649db-9e2b-4d64-8388-2c4b862c053f/04-code-review-04.jpeg 800w,
  5173.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9dd649db-9e2b-4d64-8388-2c4b862c053f/04-code-review-04.jpeg 1200w,
  5174.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9dd649db-9e2b-4d64-8388-2c4b862c053f/04-code-review-04.jpeg 1600w,
  5175.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9dd649db-9e2b-4d64-8388-2c4b862c053f/04-code-review-04.jpeg 2000w"
  5176. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9dd649db-9e2b-4d64-8388-2c4b862c053f/04-code-review-04.jpeg"
  5177. sizes="100vw"
  5178. alt="Ingvild and Dag-Inge are sitting next to each other. A thumbs-up is displayed on the code review Dag-Inge has sent to Ingvild. And arrow indicates she pushes this code to the main repository."
  5179. />
  5180. </a>
  5181.  
  5182. <figcaption class="op-vertical-bottom">
  5183. After Dag-Inge gives the thumbs up, Ingvild can push the fix to production. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9dd649db-9e2b-4d64-8388-2c4b862c053f/04-code-review-04.jpeg'>Large preview</a>)
  5184. </figcaption>
  5185. </figure>
  5186.  
  5187.  
  5188. <h3>Why Bother Doing Code Review?</h3>
  5189.  
  5190. <p>If you’ve never done code review, the process above might sound bureaucratic. If you have doubts, here’s a <a href="https://www.atlassian.com/agile/software-development/code-reviews">ton</a> <a href="https://blog.fullstory.com/what-we-learned-from-google-code-reviews-arent-just-for-catching-bugs/">of</a> <a href="https://medium.com/@palantir/code-review-best-practices-19e02780015f">blog</a> <a href="https://mtlynch.io/human-code-reviews-1/">posts</a> and <a href="https://kev.inburke.com/docs/shull_defects.pdf">academic research</a> about the advantages of code review.</p>
  5191.  
  5192. <blockquote>Code reviews set the tone for the entire company that everything we do should be open to scrutiny from others, and that such scrutiny should be a welcome part of your workflow rather than viewed as threatening.<br /><br />&mdash; <a href="https://blog.fullstory.com/what-we-learned-from-google-code-reviews-arent-just-for-catching-bugs/">Bruce Johnson, co-founder of Full Story</a></blockquote>
  5193.  
  5194. <p>Code review reduces risk. Having someone proof your work, and also <em>knowing</em> someone will proof your work, helps weed out
 errors and
 heightens quality. In addition, it ensures consistency and helps every team member familiarize with more of the code base.</p>
  5195.  
  5196. <p>When done right, code review also builds a culture for collaboration and openness. Trying to understand and critique other people’s work is an excellent way to learn, and so is getting honest feedback on your work.</p>
  5197.  
  5198. <p>Always having at least two people look over the code also curtails ideas of “my” code 
and “your” code.
 It’s <em>our</em> code.</p>
  5199.  
  5200. <p>Considering these advantages, a review shouldn’t just be for code.</p>
  5201.  
  5202. <div class="sponsors__wide-place"></div>
  5203.  
  5204.  
  5205.  
  5206.  
  5207. <h3>Review Principles For All Disciplines, Not Just Code</h3>
  5208.  
  5209. <p>With reviews, there is always one author and one or more reviewers. That means you can involve people early on without falling into design by committee.</p>
  5210.  
  5211. <p>First, I have to mention two important factors which will affect your team’s ability to do beneficial reviews. You don’t necessarily have to have mastered them, but as a minimum, you should aspire to the following:</p>
  5212.  
  5213. <ul>
  5214. <li>You and your colleagues <a href="https://www.smashingmagazine.com/2018/04/working-together-designers-developers/#respect">respect each other</a> and each other’s disciplines.</li>
  5215. <li>You’re sufficiently self-assured in your own role so that you feel like you can both give and receive criticism (this is also connected to the team’s <a href="https://www.nytimes.com/2016/02/28/magazine/what-google-learned-from-its-quest-to-build-the-perfect-team.html">psychological safety</a>).</li>
  5216. </ul>
  5217.  
  5218. <p>Even if we’re not reviewing code, there’s a lot to learn from existing <a href="https://medium.com/@palantir/code-review-best-practices-19e02780015f">best practices</a> for code reviews.</p>
  5219.  
  5220. <p>Within our team, we try to adhere to the following principles when doing reviews:</p>
  5221.  
  5222. <ol>
  5223. <li>Critique the work, 
not the author.</li>
  5224. <li>Be critical, but remain 
affable and curious.</li>
  5225. <li>Differentiate between a) Suggestions b) Requirements, c) Points that need discussion or clarification.</li>
  5226. <li>Move discussions from
 text to face-to-face. (<a href="https://www.smashingmagazine.com/2018/04/working-together-designers-developers/#creating-working-relationships">Video counts</a>)</li>
  5227. <li>Don’t forget to 
praise the good parts! What’s clever, creative, solid, original, funny, nice, and so on?</li>
  5228. </ol>
  5229.  
  5230. <p>These <a href="https://confrere.com/about/how-we-work/collaboration">principles</a> weren’t actually written down until <em>after</em> we discussed why our collaboration was working so well. We all felt we were allowed to and expected to ask questions and suggest improvements already, and that our motivations were always about building something great together, and not about criticising another person.</p>
  5231.  
  5232. <p>Because we were being clear about what kind of feedback we were giving, and also remembered to praise each other’s good work, doing reviews was a positive force rather than a demotivating one.</p>
  5233.  
  5234. <h3>An Example</h3>
  5235.  
  5236. <p>To give you an idea of how our team uses review across disciplines and throughout a process, let’s look at how the different members of our team switched between the roles of author and reviewer when we created our sign-up flow.</p>
  5237.  
  5238. <h4>Step 1: Requirements gathering</h4>
  5239.  
  5240. <p><strong>Author:</strong> Ida (UX)</p>
  5241.  
  5242. <p><strong>Reviewers:</strong> Svein (strategy), Dag-Inge (engineering), Ingvild (engineering).</p>
  5243.  
  5244.  
  5245.  
  5246.  
  5247.  
  5248.  
  5249.  
  5250.  
  5251.  
  5252.  
  5253.  
  5254. <figure >
  5255. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c4b47537-2a48-4d59-8b2f-64e0485a3c58/05-requirements-gathering.jpeg">
  5256. <img
  5257. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c4b47537-2a48-4d59-8b2f-64e0485a3c58/05-requirements-gathering.jpeg 400w,
  5258.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c4b47537-2a48-4d59-8b2f-64e0485a3c58/05-requirements-gathering.jpeg 800w,
  5259.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c4b47537-2a48-4d59-8b2f-64e0485a3c58/05-requirements-gathering.jpeg 1200w,
  5260.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c4b47537-2a48-4d59-8b2f-64e0485a3c58/05-requirements-gathering.jpeg 1600w,
  5261.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c4b47537-2a48-4d59-8b2f-64e0485a3c58/05-requirements-gathering.jpeg 2000w"
  5262. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c4b47537-2a48-4d59-8b2f-64e0485a3c58/05-requirements-gathering.jpeg"
  5263. sizes="100vw"
  5264. alt="A whiteboard is showing rough sketches of a sign-up form. A man (Svein) and a woman (Ingvild) are smiling and discussing."
  5265. />
  5266. </a>
  5267.  
  5268. <figcaption class="op-vertical-bottom">
  5269. The team gathered around the whiteboard. Svein (CEO) to the left, Ingvild (Sr. Eng), to the right. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c4b47537-2a48-4d59-8b2f-64e0485a3c58/05-requirements-gathering.jpeg'>Large preview</a>)
  5270. </figcaption>
  5271. </figure>
  5272.  
  5273.  
  5274. <p>Whiteboard sessions can be exhausting if there’s no structure to them. To maintain productivity and creativity, we use the author/reviewer structure, even for something as seemingly basic as brainstorming on a whiteboard. In this case, in which we were coming up with the requirements for our sign-up flow, I got to be the author, and the rest of the team gave their feedback and acted as reviewers. Because they also knew they’d be able to review what I came up with in step 2 (plenty more opportunity for adjustments, suggestions, and improvements), we worked swiftly and were able to agree upon the requirements in under 2 hours.</p>
  5275.  
  5276. <h4>Step 2: Mockup with microcopy</h4>
  5277.  
  5278. <p><strong>Author:</strong> Ida (UX)</p>
  5279.  
  5280. <p><strong>Reviewers:</strong> Ingvild (engineering), Eivind (design), Svein (strategy).</p>
  5281.  
  5282.  
  5283.  
  5284.  
  5285.  
  5286.  
  5287.  
  5288.  
  5289.  
  5290.  
  5291.  
  5292. <figure >
  5293. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9ed5ed76-7ce6-4d5b-a2fb-6cc9309bb3c2/06-mocup-with-microcopy.png">
  5294. <img
  5295. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9ed5ed76-7ce6-4d5b-a2fb-6cc9309bb3c2/06-mocup-with-microcopy.png 400w,
  5296.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9ed5ed76-7ce6-4d5b-a2fb-6cc9309bb3c2/06-mocup-with-microcopy.png 800w,
  5297.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9ed5ed76-7ce6-4d5b-a2fb-6cc9309bb3c2/06-mocup-with-microcopy.png 1200w,
  5298.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9ed5ed76-7ce6-4d5b-a2fb-6cc9309bb3c2/06-mocup-with-microcopy.png 1600w,
  5299.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9ed5ed76-7ce6-4d5b-a2fb-6cc9309bb3c2/06-mocup-with-microcopy.png 2000w"
  5300. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9ed5ed76-7ce6-4d5b-a2fb-6cc9309bb3c2/06-mocup-with-microcopy.png"
  5301. sizes="100vw"
  5302. alt="A screenshot of a Google Doc mocking up a sign-up form with comments from team members Ingvild and Ida."
  5303. />
  5304. </a>
  5305.  
  5306. <figcaption class="op-vertical-bottom">
  5307. By mocking up in Google docs, it’s easy for people from all disciplines to provide feedback early on. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/9ed5ed76-7ce6-4d5b-a2fb-6cc9309bb3c2/06-mocup-with-microcopy.png'>Large preview</a>)
  5308. </figcaption>
  5309. </figure>
  5310.  
  5311.  
  5312. <p>As an author, I created a mockup of the sign-up flow with microcopy. Did the sign-up flow make sense, from both the user and engineering perspective? And how could we improve the flow from a design and frontend perspective? At this stage, it was essential to work in a format in which  it would be easy for all disciplines to give feedback (we opted for Google Docs, but it could also have been done with a tool like InvisionApp).</p>
  5313.  
  5314. <h4>Step 3: Implementing the sign-up flow</h4>
  5315.  
  5316. <p><strong>Author:</strong> Ingvild (engineering)</p>
  5317.  
  5318. <p><strong>Reviewer:</strong> Ida (UX) and Dag-Inge (engineering).</p>
  5319.  
  5320. <p>We had agreed upon the flow, the input fields, and the microcopy, and so it was up to Ingvild to implement it. Thanks to <a href="https://surge.sh/">Surge</a>, we can automatically create preview URLs of the changes so that people who can’t read code are able to give feedback at this stage as well.</p>
  5321.  
  5322. <h4>Step 4: User testing</h4>
  5323.  
  5324. <p><strong>Author:</strong> Ida (UX)</p>
  5325.  
  5326. <p><strong>Reviewer:</strong> The users.</p>
  5327.  
  5328.  
  5329.  
  5330.  
  5331.  
  5332.  
  5333.  
  5334.  
  5335.  
  5336.  
  5337.  
  5338. <figure >
  5339. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cdaaea55-cc0a-4930-80f7-af953d4b7316/07-user-testing.jpeg">
  5340. <img
  5341. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cdaaea55-cc0a-4930-80f7-af953d4b7316/07-user-testing.jpeg 400w,
  5342.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cdaaea55-cc0a-4930-80f7-af953d4b7316/07-user-testing.jpeg 800w,
  5343.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cdaaea55-cc0a-4930-80f7-af953d4b7316/07-user-testing.jpeg 1200w,
  5344.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cdaaea55-cc0a-4930-80f7-af953d4b7316/07-user-testing.jpeg 1600w,
  5345.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cdaaea55-cc0a-4930-80f7-af953d4b7316/07-user-testing.jpeg 2000w"
  5346. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cdaaea55-cc0a-4930-80f7-af953d4b7316/07-user-testing.jpeg"
  5347. sizes="100vw"
  5348. alt="Two women (Ida and a user) sitting next to eachother in front of a laptop."
  5349. />
  5350. </a>
  5351.  
  5352. <figcaption class="op-vertical-bottom">
  5353. Ida doing user testing on a small budget. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/cdaaea55-cc0a-4930-80f7-af953d4b7316/07-user-testing.jpeg'>Large preview</a>)
  5354. </figcaption>
  5355. </figure>
  5356.  
  5357.  
  5358. <p>Yes, we consider user testing a form of review. We brought our newly built sign-up flow face-to-face with actual users. This step gave us a ton of insight, and the most significant changes in our sign-up flow came as a result.</p>
  5359.  
  5360. <h4>Step 5: Design</h4>
  5361.  
  5362. <p><strong>Author:</strong> Eivind (design)</p>
  5363.  
  5364. <p><strong>Reviewers:</strong> Ingvild (engineering) and Ida (UX).</p>
  5365.  
  5366.  
  5367.  
  5368.  
  5369.  
  5370.  
  5371.  
  5372.  
  5373.  
  5374.  
  5375.  
  5376. <figure >
  5377. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f66371e6-9301-4f66-8d3f-4543e51c8db3/08-design.png">
  5378. <img
  5379. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f66371e6-9301-4f66-8d3f-4543e51c8db3/08-design.png 400w,
  5380.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f66371e6-9301-4f66-8d3f-4543e51c8db3/08-design.png 800w,
  5381.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f66371e6-9301-4f66-8d3f-4543e51c8db3/08-design.png 1200w,
  5382.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f66371e6-9301-4f66-8d3f-4543e51c8db3/08-design.png 1600w,
  5383.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f66371e6-9301-4f66-8d3f-4543e51c8db3/08-design.png 2000w"
  5384. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f66371e6-9301-4f66-8d3f-4543e51c8db3/08-design.png"
  5385. sizes="100vw"
  5386. alt="A screenshot from Slack. Eivind, the designer, has posted a screenshot, and Ida replies with enthusiasm."
  5387. />
  5388. </a>
  5389.  
  5390. <figcaption class="op-vertical-bottom">
  5391. The first version of the sign-up flow was based on existing design components. In this stage, Eivind developed some new components to help improve the design. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f66371e6-9301-4f66-8d3f-4543e51c8db3/08-design.png'>Large preview</a>)
  5392. </figcaption>
  5393. </figure>
  5394.  
  5395.  
  5396. <p>When design suddenly shows up here in step 5, it might look a lot like a waterfall process. However, our designer Eivind had already been involved as a reviewer since step 2. He gave a bunch of useful feedback at that stage and was also able to start thinking about how we could improve the design of the sign-up flow beyond the existing modules in our design system. At this step, Eivind could also help solve some of the issues that we identified in the user testing.</p>
  5397.  
  5398. <h4>Step 6: Implementation</h4>
  5399.  
  5400. <p><strong>Author:</strong> Ingvild (engineering)</p>
  5401.  
  5402. <p><strong>Reviewer:</strong> Eivind (design), Ida (UX) and Dag-Inge (engineering).</p>
  5403.  
  5404. <p>And then we’re back to implementing.</p>
  5405.  
  5406. <h5>Why review works</h5>
  5407.  
  5408. <p>In summary, there’s always just one author, thus avoiding design by committee. By involving a range of disciplines as reviewers early on, we avoid having a waterfall process.</p>
  5409.  
  5410. <p>People can flag their concerns early and also start thinking about how they can contribute later on. The clearly defined roles keep the process on track.</p>
  5411.  
  5412. <h3>Regular Review Walkthroughs</h3>
  5413.  
  5414. <p>Taking inspiration from code walkthroughs, we also do regular review walkthroughs with different foci, guided by the following principles:</p>
  5415.  
  5416. <ul>
  5417. <li>The walkthrough is done <strong>together.</strong></li>
  5418. <li><strong>One person</strong> is in charge of reviewing and documenting.</li>
  5419. <li>The idea is to <strong>identify issues</strong>, not necessarily to solve them.</li>
  5420. <li>Choose a <strong>format</strong> that gives as much context as possible, so that it’s easy to act upon the findings later (e.g. InvisionApp for visual reviews, Google Docs for text, and so on).</li>
  5421. </ul>
  5422.  
  5423. <p>We’ve done review walkthroughs for things such as accessibility audits, reviewing feature requests, auditing the implementation of the design, and doing heuristic usability evaluations.</p>
  5424.  
  5425. <p>When we do our quarterly accessibility reviews, our accessibility consultant Joakim first goes through the interface and documents and prioritizes the issues he’s found in a shared Google Sheet. Joakim then walks us through the most important issues he’s identified.</p>
  5426.  
  5427. <p>Meeting face-to-face (or at least on video) to go through the issues helps create an environment for learning rather than a feeling of being supervised or micromanaged.</p>
  5428.  
  5429.  
  5430.  
  5431.  
  5432.  
  5433.  
  5434.  
  5435.  
  5436.  
  5437.  
  5438.  
  5439. <figure >
  5440. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ef4aac65-f779-4c7d-98dd-aeba501cba07/09-accessibility-review.jpeg">
  5441. <img
  5442. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ef4aac65-f779-4c7d-98dd-aeba501cba07/09-accessibility-review.jpeg 400w,
  5443.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ef4aac65-f779-4c7d-98dd-aeba501cba07/09-accessibility-review.jpeg 800w,
  5444.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ef4aac65-f779-4c7d-98dd-aeba501cba07/09-accessibility-review.jpeg 1200w,
  5445.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ef4aac65-f779-4c7d-98dd-aeba501cba07/09-accessibility-review.jpeg 1600w,
  5446.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ef4aac65-f779-4c7d-98dd-aeba501cba07/09-accessibility-review.jpeg 2000w"
  5447. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ef4aac65-f779-4c7d-98dd-aeba501cba07/09-accessibility-review.jpeg"
  5448. sizes="100vw"
  5449. alt="Three people in a sofa gathered around a laptop. They’re discussing and smiling."
  5450. />
  5451. </a>
  5452.  
  5453. <figcaption class="op-vertical-bottom">
  5454. Accessibility review: Joakim (right) walks Ingvild and Dag-Inge through the accessibility issues he found in his audit. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ef4aac65-f779-4c7d-98dd-aeba501cba07/09-accessibility-review.jpeg'>Large preview</a>)
  5455. </figcaption>
  5456. </figure>
  5457.  
  5458.  
  5459. <p>If you find yourself always being tied up with something that’s due for release, or fixing whatever is at the top of your inbox, reviews can help remedy that. If you set aside regular half days for reviewing work you’ve already done, you can identify issues before they become urgent. It can also help you refocus and make sure you’re priorities are keeping along the right lines. Your team should maybe not begin building that new feature before you’re confident that the existing features are living up to your standards.</p>
  5460.  
  5461. <h3>User Testing Is A Form Of Review</h3>
  5462.  
  5463. <p>An important motivation for code reviews is to reduce risk. By doing it every single time you introduce a change or add something new to your product, and not just when you suspect something is maybe not up to par, you diminish the chance of shipping bugs or subpar features. I believe we should look at <a href="https://confrere.com/about/how-we-work/user-testing">user testing</a> from the same perspective.</p>
  5464.  
  5465. <p>You see, if you want to reduce the risk of shipping with major usability issues, user testing has to be part of your process. Just having your UX designers review the interface isn’t enough. <a href="http://www.measuringu.com/blog/effective-he.php">Several studies</a> have found that even usability experts fail in identifying every actual usability problems. On average, 1 in 3 issues identified by experts were false alarms &mdash; they weren’t issues for users in practice. But worse, 1 in 2 issues that users did in fact have, were overlooked by the experts.</p>
  5466.  
  5467. <p>Skipping user testing is just as big a risk as skipping code review.</p>
  5468.  
  5469. <h3>Does Review Mean Death To Creativity?</h3>
  5470.  
  5471. <p>People working within design, user experience, and content often have educational backgrounds from art schools or maybe literature, in which the sole creator or creative artistic genius is hailed as the ideal. If you go back in history, this used to be the case for developers as well. Over time, this has changed by necessity as web development has grown more complex.</p>
  5472.  
  5473. <p>If you cling to the idea of creativity coming from somewhere deep within yourself, the idea of review might feel threatening or scary. Someone meddling in your half-finished work? Ouch. But if you think about creativity as something that can spring from many sources, including dialogue, collaboration, or any form of inspiration (whether from the outside or from someplace within you), then a review is only an asset and an opportunity.</p>
  5474.  
  5475. <p>As long as we’re building something for the web, there’s no way around collaborating with other people, be it within our own field or others. And a good idea will survive review.</p>
  5476.  
  5477. <p>Let’s create something great together.</p>
  5478.  
  5479. <div class="signature">
  5480.  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial">
  5481.  <span>(rb, ra, yk, il)</span>
  5482. </div>
  5483.  
  5484.  
  5485.              </article>
  5486.            </body>
  5487.          </html>
  5488.        ]]></content:encoded>
  5489.      </item>
  5490.    
  5491.      <item>
  5492.        
  5493.          
  5494.          <author>Rachel Andrew</author>
  5495.        
  5496.        <title>Pattern Library First: An Approach For Managing CSS</title>
  5497.        <link>https://www.smashingmagazine.com/2018/07/pattern-library-first-css/</link>
  5498.        <pubDate>Mon, 09 Jul 2018 14:00:35 +0200</pubDate>
  5499.        <guid>https://www.smashingmagazine.com/2018/07/pattern-library-first-css/</guid>
  5500.        <description>In this article, based on the talk that I gave at Smashing Conference in Toronto, I’m going to describe a method of working that I’ve adopted over the past two years that helps me to manage CSS across my projects.
  5501. I’ll be showing you how to use the pattern library tool Fractal, to manage your CSS on a component by component basis, while allowing you to use the tools you are already familiar with.</description>
  5502.        <content:encoded><![CDATA[
  5503.          <html>
  5504.            <head>
  5505.              <meta charset="utf-8">
  5506.              <link rel="canonical" href="https://www.smashingmagazine.com/2018/07/pattern-library-first-css/" />
  5507.              <title>Pattern Library First: An Approach For Managing CSS</title>
  5508.            </head>
  5509.            <body>
  5510.              <article>
  5511.                <header>
  5512.                  <h1>Pattern Library First: An Approach For Managing CSS</h1>
  5513.                  
  5514.                    
  5515.                    <address>Rachel Andrew</address>
  5516.                  
  5517.                  <time datetime="2018-07-09T14:00:35&#43;02:00" class="op-published">2018-07-09T14:00:35+02:00</time>
  5518.                  <time datetime="2018-07-23T11:42:51&#43;00:00" class="op-modified">2018-07-23T11:42:51+00:00</time>
  5519.                </header>
  5520.                <p>In this article, based on the talk that I gave at Smashing Conference in Toronto, I’m going to describe a method of working that I’ve adopted over the past two years that helps me to manage CSS across my projects.</p>
  5521.  
  5522. <p>I’ll be showing you how to use the pattern library tool <a href="https://fractal.build/">Fractal</a>, to manage your CSS on a component by component basis, while allowing you to use the tools you are already familiar with. While this serves as an introduction to Fractal, and why we have selected this particular pattern library, it is likely this way of working would transfer to other solutions. </p>
  5523.  
  5524. <h4>Our Projects</h4>
  5525.  
  5526. <p>My company has a couple of products &mdash; Perch and Perch Runway CMS and Notist, a software as a service application for public speakers. These products are quite different, especially given that Perch is a self-hosted system and Notist is SaaS, however, they both have a lot of user interface to develop. We also have all of the associated websites and documentation for these products, plus other things that we work on such as the 24 Ways website. After discovering Fractal two years ago, we have moved every new project &mdash; large and small &mdash; into Fractal.</p>
  5527.  
  5528. <h4>Problems we wanted to solve</h4>
  5529.  
  5530. <p>I began investigating pattern library solutions two years ago when I started work rebuilding the Perch UI for version 3. A feature of Perch is that the templates you create for the output of content on your website become the schema of the admin UI. This means that any fieldtype used in a template needs to be able to exist alongside any other fieldtype. We don’t know how our customers might combine these, and there are a huge number of possible combinations. It's also not a "website", and I didn't want to try and force the pattern library into something designed for organizing website patterns.</p>
  5531.  
  5532. <p>As Perch is self-hosted &mdash; people download it and host it on their own servers &mdash; we need to use the simplest tech stack possible in order to not place any additional barriers to entry in front of people, many of who are new to using a CMS. To add an extra level of fun, we support back to Internet Explorer 9, yet I intended to use a lot of Flexbox &mdash; as this was before Grid Layout shipped.</p>
  5533.  
  5534.  
  5535.  
  5536. <aside class="product-panel product-panel__tilted product-panel--book" data-audience="non-subscriber">
  5537.    <div class="container product-panel--book__container">
  5538.      <div class="panel__description panel__description--book">
  5539.    <p>With so much happening on the web, what should we really pay attention to? At <a href="https://smashingconf.com/ny-2018/">SmashingConf New York 2018</a> 🇺🇸 we’ll explore everything from PWAs, font loading best practices, web performance and eCommerce UX optimization, to refactoring CSS, design workflows and convincing your clients. With Sarah Drasner, Dan Mall, Sara Soueidan, Jason Grigsby, and <a href="http://smashed.by/confpanelspeakers">many other speakers</a>. Oct <span class="small-caps">23–24</span>.</p>
  5540.      <a href="http://smashed.by/confpanelspeakers" class="btn btn--green btn--large">
  5541.        Check the speakers&nbsp;→
  5542.      </a>
  5543.      </div>
  5544.      <div class="panel__image panel__image--book">
  5545.        <a href="http://smashed.by/confpanelspeakers" class="books__book__image">
  5546.        <div class="books__book__img">
  5547.          <img src="https://res.cloudinary.com/indysigner/image/upload/v1529498640/sarah-drasner-opt_kaxhos.png" alt="SmashingConf New York 2018, with Dan Mall, Sara Soueidan, Sarah Drasner and many others." width="310" height="400">
  5548.        </div>
  5549.      </a>
  5550.      </div>
  5551.    </div>
  5552.  </aside>
  5553.  
  5554.  
  5555.  
  5556.  
  5557. <p>I was also keen to avoid using tools which came with a lot of relearning how we worked, and completely changing our process. Any additional tool or change to the way that you work on your projects brings with it new friction. You can solve one problem, but bring in a whole new set of problems if you make large changes to the way that you work. In our case, we were using Sass in a fairly limited way, and processing that using Gulp. None of our projects use a Javascript framework, we’re just writing HTML, CSS and JavaScript.</p>
  5558.  
  5559. <p>Fractal fit our needs perfectly. It is agnostic as to the way you develop or the tools you want to use. Importantly for our purposes, it didn’t assume we were building a website. The experiment was so successful that we found ourselves using Fractal for every project large or small, as it makes the process of working on CSS far more straightforward. Even small sites I create on my own often start life in Fractal, because there are more benefits than you might think in terms of working with a pattern library, and many of those benefits make as much sense for a team of one as a large team.</p>
  5560.  
  5561. <p>Before we think about how to develop using Fractal and why I think it makes sense for small projects as well as large ones, let’s take a look at how to get the environment set up.</p>
  5562.  
  5563. <h4>Getting Started With Fractal</h4>
  5564.  
  5565. <p>The most straightforward approach for working with Fractal is to go to the Fractal website and take a look at the <a href="https://fractal.build/guide/getting-started">Getting Started Guide</a>. You will first need to install Fractal globally, you can then follow the steps listed here to create a new Fractal project.</p>
  5566.  
  5567. <p>With your new project installed, at the command line change into the folder you have just created and run the command:</p>
  5568.  
  5569. <pre><code class="language-bash">fractal start --sync</code></code></pre>
  5570.  
  5571. <p>This will start up a little server at port 3000, so you should be able to go to <code>http://localhost:3000</code> in a web browser and see your project.</p>
  5572.  
  5573. <p>Now that your project is up and running, open up the project folder in your favorite text editor and find the example component under <code>components/example</code>. You will find a config file and a file named <em>example.hbs</em>. The <em>example.hbs</em> template is the HTML of your component, you can add some more HTML to that and Fractal will automatically reload and display it. Change the file to:</p>
  5574.  
  5575. <pre><code class="language-html">&#x3C;h1&#x3E;This is my heading&#x3C;/h1&#x3E;
  5576. &#x3C;p&#x3E;{{ text }}&#x3C;/p&#x3E;</code></pre>
  5577.  
  5578. <p>You should see the heading appear in the browser. The config file can be used to add content and otherwise configure your component. If you want to read your heading text out of that file then edit that file to look like the following example:</p>
  5579.  
  5580. <pre><code class="language-html">title: Example component
  5581. context:
  5582.    text: This is an example component!
  5583.    heading: My heading</code></pre>
  5584.  
  5585. <p>Now change your <em>example.hbs</em> file to read in that text.</p>
  5586.  
  5587. <pre><code class="language-html">&#x3C;h1&#x3E;{{ heading }}&#x3C;/h1&#x3E;
  5588. &#x3C;p&#x3E;{{ text }}&#x3C;/p&#x3E;</code></pre>
  5589.  
  5590. <h5>Adding Additional Components</h5>
  5591.  
  5592. <p>You can follow the pattern of the example component to add your own. At a minimum, you need a folder (the name of the component) and a <em>.hbs</em> file using the same name. You can add the config file if you want to set configuration options.</p>
  5593.  
  5594. <p>Components can be nested into folders to make it easier to locate particular components, and how you structure the folders is completely up to you.</p>
  5595.  
  5596. <p><strong>Note</strong>: <em>It is really easy to find yourself spending a lot of time worrying about how to name your components. In Fractal at least, renaming and also reorganizing components into folders is straightforward. You can rename or move them and Fractal will update to show the new structure. I find that often the ideal structure only becomes apparent as I’m developing so I don’t worry too much at the outset and then firm it up later.</em></p>
  5597.  
  5598. <h4>Adding a CSS Workflow</h4>
  5599.  
  5600. <p>So far, we are able to create HTML components as handlebars templates, and a config file to insert data, however, we haven’t added any CSS. Ideally, we want to add the CSS for each component into the same folder as the rest of the component files and then combine it all together.</p>
  5601.  
  5602. <p>I mentioned that Fractal makes very few assumptions about your workflow; due to this, it does far less out of the box than it might if it were forcing you down a particular way of working. However, we can fairly easily get Fractal working with a Gulp setup.</p>
  5603.  
  5604. <h5>Combining Fractal, Sass, And Gulp</h5>
  5605.  
  5606. <p>The following describes a minimal setup using Gulp and Sass to create a single output CSS file. Hopefully, you can follow this process to do anything else that you would normally do in Gulp. The key thing to note is that most of this is not Fractal specific, so once you get the Fractal part working you can add in anything else following the same patterns. If you are familiar with another build tool then it is likely that you could create a similar process; if you do, and are happy to share, let us know in the comments.</p>
  5607.  
  5608. <p>First some setup, the following will enable you to follow along with the code listed in this tutorial, the locations of your Sass files and output CSS might ultimately be different to mine. The key thing is that the output CSS file needs to be somewhere in the public folder.</p>
  5609.  
  5610. <ol>
  5611.    <li>Inside the <em>public</em> folder in your Fractal install, add a folder named <em>css</em>.</li>
  5612.    <li>In the root folder of your Fractal, install add a folder <em>assets</em> inside which is a folder <em>scss</em>. Create a Sass file named <em>global.scss</em> inside that folder. Inside that file add the following line:<br/>
  5613.    <pre><code class="language-html">@import &quot;../../components/**/*.scss&quot;;</code></pre>
  5614.  </li>
  5615.    <li>Create a file named <em>example.scss</em> in your <code>example</code> component directory.</li>
  5616.    <li>Create <em>gulpfile.js</em> in the root of your Fractal project and add the below code.</li>
  5617. </ol>
  5618.  
  5619. <pre><code class="language-javascript">'use strict';
  5620.  
  5621. const gulp         = require('gulp');
  5622. const fractal      = require('./fractal.js');
  5623. const logger       = fractal.cli.console;
  5624. const sass         = require('gulp-sass');
  5625. const sassGlob     = require('gulp-sass-glob');
  5626. const plumber      = require('gulp-plumber');
  5627. const notify       = require('gulp-notify');
  5628. const path         = require('path');
  5629.  
  5630. gulp.task('sass',function() {
  5631.    return gulp.src('assets/scss/**/*.scss')
  5632.    .pipe(customPlumber('Error running Sass'))
  5633.    .pipe(sassGlob())
  5634.    .pipe(sass())
  5635.    .pipe(gulp.dest('public/css'))
  5636. });
  5637.  
  5638. gulp.task('watch', ['sass'], function() {
  5639.   gulp.watch([
  5640.        'components/**/*.scss',
  5641.        'assets/scss/**/*.scss'
  5642.        ], ['sass']);
  5643. });
  5644.  
  5645. function customPlumber(errTitle) {
  5646.    return plumber({
  5647.        errorHandler: notify.onError({
  5648.            title: errTitle || "Error running Gulp",
  5649.            message: "Error: <%= error.message %>",
  5650.        })
  5651.    });
  5652. }
  5653.  
  5654. gulp.task('fractal:start', function(){
  5655.    const server = fractal.web.server({
  5656.        sync: true
  5657.    });
  5658.    server.on('error', err => logger.error(err.message));
  5659.    return server.start().then(() => {
  5660.        logger.success(`Fractal server is now running at ${server.url}`);
  5661.    });
  5662. });
  5663.  
  5664. gulp.task('default', ['fractal:start', 'sass', 'watch']);</code></pre>
  5665.  
  5666. <p>I then install the dependencies listed at the top of the file. If you were to install those at the command line you would run:</p>
  5667.  
  5668. <p><code>npm install gulp gulp-sass gulp-sass-glob gulp-plumber gulp-notify</code></p>
  5669.  
  5670. <p>The <code>sass</code> function compiles the Sass from assets into a single file, and outputs it into the folder in <code>public</code>.</p>
  5671.  
  5672. <pre><code class="language-javascript">gulp.task(&#39;sass&#39;,function() {
  5673. return gulp.src(&#39;src/assets/scss/**/*.scss&#39;)
  5674. .pipe(customPlumber(&#39;Error running Sass&#39;))
  5675. .pipe(sassGlob())
  5676. .pipe(sass())
  5677. .pipe(gulp.dest(&#39;public/css&#39;))
  5678. });
  5679. </code></pre>
  5680.  
  5681. <p>I then create a <code>watch</code> function that will watch my Sass in <code>assets</code> and also that in individual components and compile it into the folder in public.</p>
  5682.  
  5683. <pre><code class="language-javascript">gulp.task(&#39;watch&#39;, [&#39;sass&#39;], function() {
  5684.   gulp.watch([
  5685. &#39;components/**/*.scss&#39;,
  5686. &#39;assets/scss/**/*.scss&#39;
  5687. ], [&#39;sass&#39;]);
  5688. });
  5689. </code></pre>
  5690.  
  5691. <p>That’s my CSS building. I now want to make it so that I can run gulp and it will kick off the watching of the CSS file as well as starting fractal. I do this by creating a gulp task to run the fractal start command.</p>
  5692.  
  5693. <pre><code class="language-javascript">gulp.task(&#39;fractal:start&#39;, function(){
  5694. const server = fractal.web.server({
  5695. sync: true
  5696. });
  5697. server.on(&#39;error&#39;, err =&gt; logger.error(err.message));
  5698. return server.start().then(() =&gt; {
  5699. logger.success(Fractal server is now running at ${server.url});
  5700. });
  5701. });</code></pre>
  5702.  
  5703. <p>Finally, I need to ensure that the Sass building and Fractal start run when I run gulp and the command line:</p>
  5704.  
  5705. <p><code class="language-javascript">gulp.task(&#39;default&#39;, &#39;fractal:start&#39;, &#39;sass&#39;, &#39;watch&#39;);</code></p>
  5706.  
  5707. <p>That’s my completed <em>gulpfile.js</em>. If you add this into your default Fractal project, make sure the folders are in place for the paths mentioned. You should be able to go to the command line, run <code>gulp</code>, and Fractal will start.</p>
  5708.  
  5709.  
  5710.  
  5711.  
  5712.  
  5713.  
  5714.  
  5715.  
  5716.  
  5717.  
  5718.  
  5719. <figure class="article__image break-out">
  5720. <img
  5721. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/30f5f567-218a-4813-9ccd-dfffbadbcfb7/cli.png 400w,
  5722.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/30f5f567-218a-4813-9ccd-dfffbadbcfb7/cli.png 800w,
  5723.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/30f5f567-218a-4813-9ccd-dfffbadbcfb7/cli.png 1200w,
  5724.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/30f5f567-218a-4813-9ccd-dfffbadbcfb7/cli.png 1600w,
  5725.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/30f5f567-218a-4813-9ccd-dfffbadbcfb7/cli.png 2000w"
  5726. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/30f5f567-218a-4813-9ccd-dfffbadbcfb7/cli.png"
  5727. sizes="100vw"
  5728. alt="Commandline output"
  5729. />
  5730.  
  5731. <figcaption class="op-vertical-bottom">
  5732. Starting Fractal with gulp (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/30f5f567-218a-4813-9ccd-dfffbadbcfb7/cli.pngg'>View large version</a>)
  5733. </figcaption>
  5734. </figure>
  5735.  
  5736.  
  5737. <p>We can test out our Sass by adding a variable in the <em>global.scss</em> file; you will need to add this above the line that includes the components so that the variable is available for those components.</p>
  5738.  
  5739. <pre><code class="language-css">$color1: rebeccapurple;</code></pre>
  5740.  
  5741. <p>Then in <code>example.scss</code> add a rule for the level 1 heading we added earlier:</p>
  5742.  
  5743. <pre><code class="language-css">h1 {
  5744.  color: $color1;
  5745. }</code></pre>
  5746.  
  5747. <p>If everything is set up correctly, you should find you have a <em>.css</em> file in public/css which contains the rule:</p>
  5748.  
  5749. <pre><code class="language-css">h1 {
  5750.  color: rebeccapurple;
  5751. }</code></pre>
  5752.  
  5753. <p>We need to do one more thing so that we can preview our components using the CSS we are building. We need to create a preview file, which will link in the stylesheet from the public folder. </p>
  5754.  
  5755. <p>Inside your components folder, create a file named <em>_preview.hbs</em>.</p>
  5756.  
  5757. <p>The preview file is essentially an HTML document, linking in our CSS and anything else you need to include. In the body is a tag <code>{{ yield }}</code>, and this is where a component will be placed.</p>
  5758.  
  5759. <pre><code class="language-html">&#x3C;!doctype html&#x3E;
  5760. &#x3C;html lang=&#x22;en&#x22;&#x3E;
  5761. &#x3C;head&#x3E;
  5762. &#x9;&#x3C;meta charset=&#x22;utf-8&#x22; /&#x3E;
  5763. &#x9;&#x3C;title&#x3E;Preview Layout&#x3C;/title&#x3E;
  5764. &#x9;&#x3C;meta name=&#x22;viewport&#x22; content=&#x22;width=device-width, initial-scale=1, shrink-to-fit=no&#x22;&#x3E;
  5765. &#x9;&#x3C;link rel=&#x22;stylesheet&#x22; href=&#x22;{{ path &#x27;/css/global.css&#x27; }}&#x22;&#x3E;
  5766. &#x3C;/head&#x3E;
  5767. &#x3C;body&#x3E;
  5768. &#x9;{{{ yield }}}
  5769. &#x3C;/body&#x3E;
  5770. &#x3C;/html&#x3E;</code></pre>
  5771.  
  5772. <p><strong>Note</strong>: <em>The public folder can also house any other assets that you need to display in components such as images, fonts and so on.</em></p>
  5773.  
  5774. <h5>The Pattern Library As Source Of Truth</h5>
  5775.  
  5776. <p>As we have seen, Fractal can build our CSS. In our projects, we make it so that Fractal is the <em>only</em> place we build and process CSS and other assets for the site. What this means is that our pattern library and site or application do not drift. Drift happens after you deploy the site if people start editing the CSS of the site and not bringing those changes back to the pattern library. If you can make the pattern library the place where CSS is processed then changes have to start there &mdash; which prevents drift between the live site and library.</p>
  5777.  
  5778. <p>We build everything in Fractal and then copy those public assets over to the live sites to be deployed. In addition to preventing drift between the systems, it also makes managing CSS in source control much easier. When multiple people work on one CSS file, merge conflicts can be reasonably hard to deal with. With people working on individual components in the pattern library, you can usually avoid two people committing changes to the same file at once, and if they do it is only a small file to sort out and not all of your CSS.</p>
  5779.  
  5780. <div class="sponsors__wide-place"></div>
  5781.  
  5782.  
  5783.  
  5784.  
  5785. <h3>Using A Pattern Library First Approach For Managing Fallbacks</h3>
  5786.  
  5787. <p>I have found that working pattern library first makes dealing with fallbacks in your code far more straightforward and less overwhelming than attempting to fix up a complete site or application at once. It also allows us to concentrate on the best possible case, and be creative with new techniques, rather than limit what we do due to being worried about how we will get it to work well in non-supporting browsers.</p>
  5788.  
  5789. <p>We can look at a simple case of a media object component to see how that might work. To follow along, create a <em>media</em> folder inside components in Fractal, and add the files <em>media.hbs</em> and <em>media.scss</em>.</p>
  5790.  
  5791. <h5>Start With Good Markup</h5>
  5792.  
  5793. <p>Your starting point should always be well-structured markup. In the pattern library, it may be that you will use this component with a range of markup, for example, you could use a component with content marked up as a figure in one place and just with divs in another. Your content should, however, be structured in a way that makes sense and can be read from top to bottom.</p>
  5794.  
  5795. <p>This ensures that your content is accessible at a very basic level, but it also means you can take advantage of normal flow. Normal Flow is how browsers display your content by default, with block elements progressing one after the other in the block dimension and inline elements &mdash; such as words in a sentence &mdash; running along the inline axis. For a lot of content that is exactly what you want, and by taking advantage of normal flow rather than fighting against it you make your job far easier as you create your layout.</p>
  5796.  
  5797. <p>Therefore, my component has the following markup which I add to <em>media.hbs</em>.</p>
  5798.  
  5799. <pre><code class="language-html">&#x3C;div class=&#x22;media&#x22;&#x3E;
  5800.  
  5801.  &#x3C;div class=&#x22;img&#x22;&#x3E;
  5802.    &#x3C;img src=&#x22;/img/placeholder.jpg&#x22; alt=&#x22;Placeholder&#x22;&#x3E;
  5803.  &#x3C;/div&#x3E;
  5804.  &#x3C;h2 class=&#x22;title&#x22;&#x3E;This is my title&#x3C;/h2&#x3E;
  5805.  &#x3C;div class=&#x22;content&#x22;&#x3E;
  5806.      &#x3C;p&#x3E;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis vehicula vitae ligula sit amet maximus. Nunc auctor neque ipsum, ac porttitor elit lobortis ac. Vivamus ultrices sodales tellus et aliquam. Pellentesque porta sit amet nulla vitae luctus. Praesent quis risus id dolor venenatis condimentum.&#x3C;/p&#x3E;
  5807.  &#x3C;/div&#x3E;
  5808.  &#x3C;div class=&#x22;footer&#x22;&#x3E;
  5809.    An optional footer goes here.
  5810.  &#x3C;/div&#x3E;
  5811. &#x3C;/div&#x3E;</code></pre>
  5812.  
  5813. <p>You can see how this then displays inside Fractal.</p>
  5814.  
  5815.  
  5816.  
  5817.  
  5818.  
  5819.  
  5820.  
  5821.  
  5822.  
  5823.  
  5824.  
  5825. <figure class="article__image break-out">
  5826. <img
  5827. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bb40e309-8190-48c4-ab26-83d7bb641ca8/component-markedup.png 400w,
  5828.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bb40e309-8190-48c4-ab26-83d7bb641ca8/component-markedup.png 800w,
  5829.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bb40e309-8190-48c4-ab26-83d7bb641ca8/component-markedup.png 1200w,
  5830.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bb40e309-8190-48c4-ab26-83d7bb641ca8/component-markedup.png 1600w,
  5831.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bb40e309-8190-48c4-ab26-83d7bb641ca8/component-markedup.png 2000w"
  5832. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bb40e309-8190-48c4-ab26-83d7bb641ca8/component-markedup.png"
  5833. sizes="100vw"
  5834. alt="The fractal UI with the added component"
  5835. />
  5836.  
  5837. <figcaption class="op-vertical-bottom">
  5838. My component after adding the markup. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/bb40e309-8190-48c4-ab26-83d7bb641ca8/component-markedup.png'>View large version</a>)
  5839. </figcaption>
  5840. </figure>
  5841.  
  5842.  
  5843. <p>Once I’ve got the markup that I want, I am going to work on the desktop display that I have in mind. I’m going to use CSS Grid Layout and the <code>grid-template-areas</code> method of doing so. Add the following to <em>media.scss</em>.</p>
  5844.  
  5845. <pre><code class="language-css">img { max-width: 100%; }
  5846.  
  5847. .media &gt; .title {
  5848.  grid-area: title;
  5849. }
  5850.  
  5851. .media &gt; .img {
  5852.  grid-area: img;
  5853. }
  5854.  
  5855. .media &gt; .content {
  5856.  grid-area: bd;
  5857. }
  5858.  
  5859. .media &gt; .footer {
  5860.  grid-area: ft;
  5861. }
  5862.  
  5863. .media {
  5864.  margin-bottom: 2em;
  5865.  display: grid;
  5866.  grid-column-gap: 20px;
  5867.  grid-template-columns: 200px 3fr;
  5868.  grid-template-areas:
  5869.    &quot;img title&quot;
  5870.    &quot;img bd&quot;
  5871.    &quot;img ft&quot;;
  5872.  }</code></pre>
  5873.  
  5874. <p>We now have a simple media object layout:</p>
  5875.  
  5876.  
  5877.  
  5878.  
  5879.  
  5880.  
  5881.  
  5882.  
  5883.  
  5884.  
  5885.  
  5886. <figure class="article__image break-out">
  5887. <img
  5888. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/40d6ffb9-61a3-4715-ac63-7a65a466e926/component-layout.png 400w,
  5889.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/40d6ffb9-61a3-4715-ac63-7a65a466e926/component-layout.png 800w,
  5890.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/40d6ffb9-61a3-4715-ac63-7a65a466e926/component-layout.png 1200w,
  5891.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/40d6ffb9-61a3-4715-ac63-7a65a466e926/component-layout.png 1600w,
  5892.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/40d6ffb9-61a3-4715-ac63-7a65a466e926/component-layout.png 2000w"
  5893. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/40d6ffb9-61a3-4715-ac63-7a65a466e926/component-layout.png"
  5894. sizes="100vw"
  5895. alt="A two column layout, image on the left text on the right"
  5896. />
  5897.  
  5898. <figcaption class="op-vertical-bottom">
  5899. The Media Object layout. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/40d6ffb9-61a3-4715-ac63-7a65a466e926/component-layout.png'>View large version</a>)
  5900. </figcaption>
  5901. </figure>
  5902.  
  5903.  
  5904. <p>Something you can do in Fractal is to add variations of a component. You might want to flip the media object so that the image is on the right.</p>
  5905.  
  5906. <p>Now add the CSS to <em>media.scss</em> in order to flip the layout:</p>
  5907.  
  5908. <pre><code class="language-css">.media.media-flip {
  5909. grid-template-columns: 3fr 200px ;
  5910. grid-template-areas:
  5911.  &quot;title img&quot;
  5912.  &quot;bd img&quot;
  5913.  &quot;ft img&quot;;
  5914.  }
  5915. </code></pre>
  5916.  
  5917. <p>There are two ways to create variants: file-based and configuration based. File-based is simplest and is also useful if your variant has different markup. To create a file-based variant, make a copy of your component in the media folder with the name media <em>--flip.hbs</em> (that’s two dashes in the filename).</p>
  5918.  
  5919. <p>This component should have identical markup with the class <code>media-flip</code> added to the first line, and you will then be able to see both versions.</p>
  5920.  
  5921. <pre><code>&lt;div class=&quot;media media-flip&quot;&gt;</code></pre>
  5922.  
  5923.  
  5924.  
  5925.  
  5926.  
  5927.  
  5928.  
  5929.  
  5930.  
  5931.  
  5932.  
  5933. <figure class="article__image break-out">
  5934. <img
  5935. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4498b4db-aec4-4fa9-ae93-d8f3d8253729/component-flipped.png 400w,
  5936.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4498b4db-aec4-4fa9-ae93-d8f3d8253729/component-flipped.png 800w,
  5937.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4498b4db-aec4-4fa9-ae93-d8f3d8253729/component-flipped.png 1200w,
  5938.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4498b4db-aec4-4fa9-ae93-d8f3d8253729/component-flipped.png 1600w,
  5939.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4498b4db-aec4-4fa9-ae93-d8f3d8253729/component-flipped.png 2000w"
  5940. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4498b4db-aec4-4fa9-ae93-d8f3d8253729/component-flipped.png"
  5941. sizes="100vw"
  5942. alt="A two column layout, image on the right text on the left"
  5943. />
  5944.  
  5945. <figcaption class="op-vertical-bottom">
  5946. The flipped version. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/4498b4db-aec4-4fa9-ae93-d8f3d8253729/component-flipped.pngg'>View large version</a>)
  5947. </figcaption>
  5948. </figure>
  5949.  
  5950.  
  5951. <p>Alternately, as in this case all we need to do is add a class, you can create a variant using a config file.</p>
  5952.  
  5953. <p>If you want to do this, remove your variant file, and instead add a config file named <em>media.config.json</em> containing the following code:</p>
  5954.  
  5955. <pre><code class="language-javascript">{
  5956.    &quot;title&quot;: &quot;Media Object&quot;,
  5957.    &quot;context&quot;: {
  5958.        &quot;modifier&quot;: &quot;default&quot;
  5959.    },
  5960.    &quot;variants&quot;: [
  5961.        {
  5962.            &quot;name&quot;: &quot;Flipped&quot;,
  5963.            &quot;context&quot;: {
  5964.                &quot;modifier&quot;: &quot;flip&quot;
  5965.            }
  5966.        }
  5967.    ]
  5968. }
  5969. </code></pre>
  5970.  
  5971. <p>Then modify the first line of <em>media.hbs</em> as follows:</p>
  5972.  
  5973. <p><code class="language-html">&lt;div class=&quot;media media-{{ modifier }}&quot;&gt;</code></p>
  5974.  
  5975. <p><strong>Note</strong>: <em>You can add as many variants as you like (take a look at the <a href="https://fractal.build/guide/components/variants">documentation for variants</a> to read more).</em></p>
  5976.  
  5977. <p>We might now think about adding some CSS to change the layout based on screen size. Wrapping the layout we have created in a media query and above that creating a single column layout for smaller devices.</p>
  5978.  
  5979. <pre><code class="language-css">img {
  5980.  max-width: 100%;
  5981. }
  5982.  
  5983. .media &gt; .title {
  5984.  grid-area: title;
  5985. }
  5986.  
  5987. .media &gt; .img {
  5988.  grid-area: img;
  5989. }
  5990.  
  5991. .media &gt; .content {
  5992.  grid-area: bd;
  5993. }
  5994.  
  5995. .media &gt; .footer {
  5996.  grid-area: ft;
  5997. }
  5998.  
  5999. .media {
  6000.  display: grid;
  6001.  grid-column-gap: 20px;
  6002.  grid-template-areas:
  6003.    &quot;title&quot;
  6004.    &quot;img&quot;
  6005.    &quot;bd&quot;
  6006.    &quot;ft&quot;;
  6007.  }
  6008.  
  6009.  @media (min-width: 600px) {
  6010.    .media {
  6011.      margin-bottom: 2em;
  6012.      display: grid;
  6013.      grid-column-gap: 20px;
  6014.      grid-template-columns: 200px 3fr;
  6015.      grid-template-areas:
  6016.        &quot;img title&quot;
  6017.        &quot;img bd&quot;
  6018.        &quot;img ft&quot;;
  6019.    }
  6020.  
  6021.    .media.media-flip {
  6022.      grid-template-columns: 3fr 200px ;
  6023.      grid-template-areas:
  6024.        &quot;title img&quot;
  6025.        &quot;bd img&quot;
  6026.        &quot;ft img&quot;;
  6027.    }
  6028. }</code></pre>
  6029.  
  6030.  
  6031.  
  6032.  
  6033.  
  6034.  
  6035.  
  6036.  
  6037.  
  6038.  
  6039.  
  6040. <figure class="article__image break-out">
  6041. <img
  6042. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1d1eb900-b706-448f-bf69-5ebd5e3ae81b/component-narrow.png 400w,
  6043.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1d1eb900-b706-448f-bf69-5ebd5e3ae81b/component-narrow.png 800w,
  6044.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1d1eb900-b706-448f-bf69-5ebd5e3ae81b/component-narrow.png 1200w,
  6045.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1d1eb900-b706-448f-bf69-5ebd5e3ae81b/component-narrow.png 1600w,
  6046.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1d1eb900-b706-448f-bf69-5ebd5e3ae81b/component-narrow.png 2000w"
  6047. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1d1eb900-b706-448f-bf69-5ebd5e3ae81b/component-narrow.png"
  6048. sizes="100vw"
  6049. alt="A single column layout"
  6050. />
  6051.  
  6052. <figcaption class="op-vertical-bottom">
  6053. The object for mobile devices. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1d1eb900-b706-448f-bf69-5ebd5e3ae81b/component-narrow.png'>View large version</a>)
  6054. </figcaption>
  6055. </figure>
  6056.  
  6057.  
  6058. <p>Then, just as we manage the view for smaller devices within our component, we can manage the layout for older browsers which do not support grid.</p>
  6059.  
  6060. <p>In this case, I’m going to build a float-based fallback (this will work for pretty much any legacy browser). I’m only going to worry about it for wider screen sizes and leave the component displaying in normal flow for older mobile devices.</p>
  6061.  
  6062. <p>Just inside the media query, add the following CSS:</p>
  6063.  
  6064. <pre><code class="language-css">.media:after {
  6065.  content: &quot;&quot;;
  6066.  display: table;
  6067.  clear: both;
  6068. }
  6069.  
  6070. .media &gt; .media {
  6071.  margin-left: 160px;
  6072.  clear: both;
  6073. }
  6074.  
  6075. .media .img {
  6076.  float: left;
  6077.  margin: 0 10px 0 0;
  6078.  width: 150px;
  6079. }
  6080.  
  6081. .media.media-flip .img {
  6082.  float: right;
  6083.  margin: 0 0 0 10px;
  6084. }
  6085.  
  6086. .media &gt; * {
  6087.  margin: 0 0 0 160px;
  6088. }
  6089.  
  6090. .media.media-flip &gt; * {
  6091.  margin: 0 160px 0 0;
  6092. }</code></pre>
  6093.  
  6094. <p>This should sort out the display in non-grid browsers. For browsers that do support grid, you don’t need to worry about floats, i.e. when the floated item becomes a grid item, the float is removed. What will be a problem are any margins. The layout in grid supporting browsers will now be all spaced out due to the extra margins.</p>
  6095.  
  6096.  
  6097.  
  6098.  
  6099.  
  6100.  
  6101.  
  6102.  
  6103.  
  6104.  
  6105.  
  6106. <figure class="article__image break-out">
  6107. <img
  6108. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6c5b1cbe-b879-4c6e-bace-839efd3a7a29/component-gaps.png 400w,
  6109.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6c5b1cbe-b879-4c6e-bace-839efd3a7a29/component-gaps.png 800w,
  6110.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6c5b1cbe-b879-4c6e-bace-839efd3a7a29/component-gaps.png 1200w,
  6111.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6c5b1cbe-b879-4c6e-bace-839efd3a7a29/component-gaps.png 1600w,
  6112.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6c5b1cbe-b879-4c6e-bace-839efd3a7a29/component-gaps.png 2000w"
  6113. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6c5b1cbe-b879-4c6e-bace-839efd3a7a29/component-gaps.png"
  6114. sizes="100vw"
  6115. alt="Two column layout with big gaps"
  6116. />
  6117.  
  6118. <figcaption class="op-vertical-bottom">
  6119. The layout is spaced out due to the extra margins. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6c5b1cbe-b879-4c6e-bace-839efd3a7a29/component-gaps.png'>View large version</a>)
  6120. </figcaption>
  6121. </figure>
  6122.  
  6123.  
  6124. <p>This is where we can add a feature query, removing the margins if we know that our browser supports grid.</p>
  6125.  
  6126. <pre><code class="language-css">@supports(display: grid) {
  6127.  .media &gt; *,
  6128.  .media.media-flip &gt; * {
  6129.    margin: 0;
  6130.  }
  6131.  
  6132.  .media .img,
  6133.  .media.media-flip .img {
  6134.    width: auto;
  6135.    margin: 0;
  6136.  }
  6137.  
  6138.  .media:after {
  6139.    content: none;
  6140.  }
  6141. }</code></pre>
  6142.  
  6143. <p>That’s our small component finished. While a simple example &mdash; and it might be argued that it’s one which doesn’t really need grid at all if you <em>need</em> to have a fallback &mdash; it demonstrates the approach I’m taking across all of my projects, large and small.</p>
  6144.  
  6145. <p>To get my CSS file into production, we can take the CSS file from the public folder and add that to our production site. You could even script this process to copy it over to your site folder as it builds.</p>
  6146.  
  6147. <h5>Reduced Test Case First Development</h5>
  6148.  
  6149. <p>Something I have discovered as a key benefit in working this way, is that it really does make the browser support piece of the puzzle easier. Not only is it easier to see what fallback CSS is being included with this component, but also if we are having problems with a browser, it makes it far easier to debug them.</p>
  6150.  
  6151. <p>When you are battling with a browser issue then the thing you will generally be told to do is create a <a href="https://css-tricks.com/reduced-test-cases/">reduced test case</a>. Reduce the problem down to the smallest thing that exhibits the issue. A component in a pattern library is often very close to that reduced test case already. Certainly far closer than if you are trying to debug a problem while looking at your entire website.</p>
  6152.  
  6153. <p>In addition to making browser debugging easier, having your fallbacks included alongside the rest of the CSS makes it easier to remove the fallback code once it is no longer needed, it’s obvious this fallback code is for this component. I know that removing it won’t change the way anything else displays.</p>
  6154.  
  6155. <p>This ease of organizing our code is really why Fractal makes sense even in small projects. Given that we tend to use Gulp and Sass anyway (even on smaller projects), adding Fractal to the mix isn't a big overhead. We don't need to see it as only for our bigger projects, as even a small site might have a reasonable amount of CSS.</p>
  6156.  
  6157. <h3>See The Code</h3>
  6158.  
  6159. <p>I've created a <a href="https://github.com/rachelandrew/smashing-fractal">GitHub Project</a> which has all of the code mentioned in the article. I would suggest setting up Fractal as described in the article and then grabbing any bits - such as the gulpfile or preview layout, from my repository.</p>
  6160.  
  6161. <p>As an additional reference and to see some published Fractal projects, we have the published version of the <a href="http://patterns.perchcms.com/">Perch Pattern Library</a>, and also the Pattern Library for <a href="http://bits.24ways.org/">24 Ways</a> (built by <a href="https://twitter.com/paulrobertlloyd">Paul Robert Lloyd</a>), which you can take a look at. These are good examples of a non-website pattern library, and a more traditional one used for a site.</p>
  6162.  
  6163. <h3>How Do <em>You</em> Manage CSS?</h3>
  6164.  
  6165. <p>I really like this way of working; it allows me to write CSS in a straightforward, progressively enhanced way. Depending on the project, we may include far more tooling and processing of files. Or, I may be building a simple site in which case the setup will be pretty much as we have seen in this article &mdash; with some light processing of Sass. The fact that Fractal means we can have the same process for sites big and small, for web applications or websites. It means we can always work in a familiar way. </p>
  6166.  
  6167. <p>This works for us, and I hope this article might give you some things to experiment with. However, I would love to know the ways in which you and your team have approached managing CSS in your projects and the strengths and weaknesses of the approaches you have tried. I’d be especially interested in hearing from anyone who has developed a similar process using another pattern library solution. Add your experiences in the comments.</p>
  6168.  
  6169. <div class="signature">
  6170.  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial">
  6171.  <span>(il)</span>
  6172. </div>
  6173.  
  6174.  
  6175.              </article>
  6176.            </body>
  6177.          </html>
  6178.        ]]></content:encoded>
  6179.      </item>
  6180.    
  6181.      <item>
  6182.        
  6183.          
  6184.          <author>Sam Wright &amp; James Macnamara</author>
  6185.        
  6186.        <title>Better Research, Better Design, Better Results</title>
  6187.        <link>https://www.smashingmagazine.com/2018/07/better-research-design-results/</link>
  6188.        <pubDate>Fri, 06 Jul 2018 13:45:41 +0200</pubDate>
  6189.        <guid>https://www.smashingmagazine.com/2018/07/better-research-design-results/</guid>
  6190.        <description>Over the years, one thing we have consistently seen is how little insight from digital marketers is used at the planning stages of a web development project.
  6191. Data from Google Analytics and SEMrush to tools like VWO (Visual Website Optimizer) or Hotjar are all resources that can be used to provide valuable insight ahead of the first line of code being written. Basic SEO elements, such as URL structure and metadata, should also be involved in the decision making of any web design project.</description>
  6192.        <content:encoded><![CDATA[
  6193.          <html>
  6194.            <head>
  6195.              <meta charset="utf-8">
  6196.              <link rel="canonical" href="https://www.smashingmagazine.com/2018/07/better-research-design-results/" />
  6197.              <title>Better Research, Better Design, Better Results</title>
  6198.            </head>
  6199.            <body>
  6200.              <article>
  6201.                <header>
  6202.                  <h1>Better Research, Better Design, Better Results</h1>
  6203.                  
  6204.                    
  6205.                    <address>Sam Wright &amp; James Macnamara</address>
  6206.                  
  6207.                  <time datetime="2018-07-06T13:45:41&#43;02:00" class="op-published">2018-07-06T13:45:41+02:00</time>
  6208.                  <time datetime="2018-07-23T11:42:51&#43;00:00" class="op-modified">2018-07-23T11:42:51+00:00</time>
  6209.                </header>
  6210.                
  6211.  
  6212. <p>Over the years, one thing we have consistently seen is how little insight from digital marketers is used at the planning stages of a web development project.</p>
  6213.  
  6214. <p>Data from Google Analytics and SEMrush to tools like VWO (<strong>V</strong>isual <strong>W</strong>ebsite <strong>O</strong>ptimizer) or Hotjar are all resources that can be used to provide valuable insight ahead of the first line of code being written. Basic SEO elements, such as URL structure and metadata, should also be involved in the decision making of any web design project.</p>
  6215.  
  6216. <p>This has been <a href="https://searchengineland.com/seo-website-design-everything-need-know-272899">pointed out before</a>, and it’s a sore point for many SEO and content specialists. However, in this article we’re going to focus on the issue in relation to our own preferred methodology, which is effective content research and creation, and how user intent affects the process at every stage.</p>
  6217.  
  6218. <p>We’ll then move on through each aspect of the design process, talking about SEO questions along the way, and ending up with a detailed breakdown of a workflow we feel achieves two things: websites which look great, and are fully-realized assets designed to achieve measurable goals.</p>
  6219.  
  6220. <h3 id="intelligent-content-research">Intelligent Content Research</h3>
  6221.  
  6222. <p>A website doesn’t just have to be built. It has to populated with material. The way this material is designed will have a large part in determining a website’s success, i.e. what it brings to a client’s business or organization.</p>
  6223.  
  6224. <p>This is why we find it strange that a normal web design process misses out at its earliest stages things like <a href="https://moz.com/learn/seo/what-is-keyword-research">keyword research</a>, and its more developed relative &mdash; <a href="https://www.smashingmagazine.com/content-strategy-storytelling/">content strategy</a>. So often a frame is built without enough thought about what it’s going to contain.</p>
  6225.  
  6226.  
  6227.  
  6228.  <aside class="product-panel product-panel__tilted product-panel--book" data-audience="non-subscriber" data-remove="true">
  6229.    <div class="container product-panel--book__container">
  6230.      <div class="panel__description panel__description--book">
  6231.        <p>
  6232.          Is your pattern library up to date today? <em>Alla Kholmatova</em> has just finished a fully fledged book on <strong>Design Systems</strong> and how to get them right. With common traps, gotchas and the lessons she learned. Hardcover, eBook. <em>Just sayin'.</em>
  6233.        </p>
  6234.        <a href="http://smashed.by/uxpaneldsbook">
  6235.          <button class="btn btn--green btn--large">
  6236.            Table of Contents&nbsp;&rarr;
  6237.          </button>
  6238.        </a>
  6239.      </div>
  6240.      <div class="panel__image panel__image--book">
  6241.        <a href="http://smashed.by/uxpaneldsbook" class="books__book__image">
  6242.        <div class="books__book__img">
  6243.          <img src="https://www.smashingmagazine.com/images/books/design-systems--large-opt.png">
  6244.        </div>
  6245.      </a>
  6246.      </div>
  6247.    </div>
  6248.  </aside>
  6249.  
  6250.  
  6251.  
  6252.  
  6253.  
  6254.  
  6255.  
  6256.  
  6257.    
  6258.  
  6259.  
  6260.  
  6261.  
  6262.  
  6263.  
  6264.  
  6265.  
  6266.  
  6267. <p>All of our projects at some level require keyword research, and this always involves careful attention to <a href="https://www.smashingmagazine.com/2017/05/designing-voice-experiences/">user intent</a>. As SmashingMag readers, you’ll most likely understand this concept. For the sake of clarity though, it is worth revisiting this in terms of content strategy and SEO.</p>
  6268.  
  6269. <p>Before user intent was a thing, keyword research involved gathering lists of search volumes and “difficulty” numbers and trying to spot what keywords you might rank for, without too much attention paid to whether they were queries actually likely to be used by your ideal users.</p>
  6270.  
  6271. <p>While we still have to go through this process, effective research requires more intelligent use of the data we find. We have to focus on discovering target keywords and developing material that satisfies <a href="www.uxmatters.com/mt/archives/2012/10/the-importance-of-knowing-user-intent.php">the intent behind the query</a> &mdash; while still looking out for some relevant “good opportunity” keywords (i.e. high volume, low competition) along the way.</p>
  6272.  
  6273. <p>This means that keyword research is becoming a way of understanding what users mean by their searches <em>in context</em>, what questions they want answering, and what kind of language they use, all serving the purpose of creating content that has the best chance of helping a website meet its owner’s goals.</p>
  6274.  
  6275. <h3 id="user-intent-and-content-creation">User Intent And Content Creation</h3>
  6276.  
  6277. <p>User intent informs keyword research, which in time becomes content strategy, and then creation. The content we create always has a purpose, and in the majority of cases it is to satisfy the intent behind a user query.</p>
  6278.  
  6279. <p>As a broad example, let’s take the query “coffee”. Here’s how the results look &mdash; notice the different types of content aimed at meeting varying intents:</p>
  6280.  
  6281.  
  6282.  
  6283.  
  6284.  
  6285.  
  6286.  
  6287.  
  6288.  
  6289.  
  6290.  
  6291. <figure >
  6292. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/362a5872-cdd0-4ddc-b090-fc8d715af8da/2-google-search-results-page.png">
  6293. <img
  6294. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/362a5872-cdd0-4ddc-b090-fc8d715af8da/2-google-search-results-page.png 400w,
  6295.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/362a5872-cdd0-4ddc-b090-fc8d715af8da/2-google-search-results-page.png 800w,
  6296.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/362a5872-cdd0-4ddc-b090-fc8d715af8da/2-google-search-results-page.png 1200w,
  6297.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/362a5872-cdd0-4ddc-b090-fc8d715af8da/2-google-search-results-page.png 1600w,
  6298.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/362a5872-cdd0-4ddc-b090-fc8d715af8da/2-google-search-results-page.png 2000w"
  6299. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/362a5872-cdd0-4ddc-b090-fc8d715af8da/2-google-search-results-page.png"
  6300. sizes="100vw"
  6301. alt="Search engine results page for coffee"
  6302. />
  6303. </a>
  6304.  
  6305. <figcaption class="op-vertical-bottom">
  6306. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/362a5872-cdd0-4ddc-b090-fc8d715af8da/2-google-search-results-page.png'>Large preview</a>)
  6307. </figcaption>
  6308. </figure>
  6309.  
  6310.  
  6311. <p>The results vary hugely according to the audience they are targeting. Some are aimed at people wanting to find somewhere to grab a coffee nearby, others are sites where you can order your joe online. There are also resources looking at coffee’s history and nutritional information.</p>
  6312.  
  6313. <p>While we don’t often have to deal with such broad terms, all of this has to be thought about, unpicked and planned according to a website’s purpose. This means content research, when focused on users, has obvious and enormous implications when it comes to site architecture and even aesthetics &mdash; i.e. the first things to be worked out in any design process.</p>
  6314.  
  6315. <h3 id="when-content-isn-t-considered">When Content Isn’t Considered</h3>
  6316.  
  6317. <p>One of the most common issues we see with both old and new sites is content that has not designed to fully address user queries, in terms of exact phrases as well as general intent. In some cases, this is easy to fix &mdash; for example, a few tweaks to a page’s metadata and copy can often clarify its query and user targeting almost instantly.</p>
  6318.  
  6319. <p>In many others though, the problems are much more serious, and a revised architecture or navigation is required as part of an entirely new content strategy &mdash; a costly process that could have been avoided if the right professionals had been consulted all along.</p>
  6320.  
  6321. <p>Here are some scenarios specific to site content we’ve encountered too many times:</p>
  6322.  
  6323. <h4 id="scenario-1-shiny-new-website-dull-new-content">Scenario 1: Shiny New Website, Dull New Content</h4>
  6324.  
  6325. <p>A client &mdash; <a href="https://www.smashingmagazine.com/2010/02/is-john-the-client-dense-or-are-you-failing-him/">let’s call him John</a> &mdash; is launching a completely new site, with no previous content to refer to.</p>
  6326.  
  6327. <p>However, if John isn’t prompted to think about copy, content or SEO until much later down the line &mdash; typically after the back-end development phase &mdash; then poor decisions can be made, while there is also the risk that he will lose some of his motivation, energy, and patience with the project.</p>
  6328.  
  6329. <p>A rush to see it completed means the content isn’t researched or executed well enough to be effective in the long term. <em>Eventually it has to be looked at again during a lengthy and costly second-stage SEO and content creation campaign</em>.</p>
  6330.  
  6331. <h4 id="scenario-2-same-content-same-problems">Scenario 2: Same Content, Same Problems</h4>
  6332.  
  6333. <p>A rebuild of an existing site means there’s existing content to look at and refer to. Sometimes, John is so rushed, or is so intent on keeping costs down at this stage, content is not considered at all.</p>
  6334.  
  6335. <p>The same content is used on the old site as on the new site, and John wonders why his site doesn’t shoot immediately to number one for all of his top keywords. <em>Eventually it has to be looked at again during a lengthy and costly second-stage SEO and content creation campaign</em>.</p>
  6336.  
  6337. <h4 id="new-content-or-else">New Content, Or Else!</h4>
  6338.  
  6339. <p>Sometimes a valuable, authoritative site is rebuilt, as part of a rebrand for example. John insists that everything is new. Without the proper research spelling this out, for example analytics data (explored in more detail below), John isn’t aware of the assets he already has. He gets rid of the old content (or does something even worse like switch to a new domain) that search engines thought was valuable, and rankings mysteriously tank. <em>Eventually it has to be looked at again during a lengthy and costly second-stage SEO and content creation campaign</em>.</p>
  6340.  
  6341. <h3 id="workflow-issues-when-seos-are-called-in-after-the-fact">Workflow Issues When SEOs Are Called In After The Fact</h3>
  6342.  
  6343. <p>We have to make do with what we get of course, but it is frustrating for SEOs to work on projects well after problems have set it, and we end up having to suggest that a relatively new site needs to be pulled apart if it has any hope of realizing its value.</p>
  6344.  
  6345. <p>When SEO isn’t considered from the beginning, the page layout and semantic markup haven’t considered excerpts, H-tags, metadata or how the CMS can aid SEO in the long term. Many clients will then turn to quick fixes such Wordpress plugins like Yoast. There’s a good chance that these will be ineffective or used incorrectly, perpetuating the problems at hand.</p>
  6346.  
  6347.  
  6348.  
  6349.  
  6350.  
  6351.  
  6352.  
  6353.  
  6354.  
  6355.  
  6356.  
  6357. <figure >
  6358. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2061d5f8-09b5-4666-aa6f-e995ae561b5a/5-downward-results-graph.png">
  6359. <img
  6360. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2061d5f8-09b5-4666-aa6f-e995ae561b5a/5-downward-results-graph.png 400w,
  6361.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2061d5f8-09b5-4666-aa6f-e995ae561b5a/5-downward-results-graph.png 800w,
  6362.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2061d5f8-09b5-4666-aa6f-e995ae561b5a/5-downward-results-graph.png 1200w,
  6363.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2061d5f8-09b5-4666-aa6f-e995ae561b5a/5-downward-results-graph.png 1600w,
  6364.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2061d5f8-09b5-4666-aa6f-e995ae561b5a/5-downward-results-graph.png 2000w"
  6365. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2061d5f8-09b5-4666-aa6f-e995ae561b5a/5-downward-results-graph.png"
  6366. sizes="100vw"
  6367. alt="Graph showing negative results"
  6368. />
  6369. </a>
  6370.  
  6371. <figcaption class="op-vertical-bottom">
  6372. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2061d5f8-09b5-4666-aa6f-e995ae561b5a/5-downward-results-graph.png'>Large preview</a>)
  6373. </figcaption>
  6374. </figure>
  6375.  
  6376.  
  6377. <p>So, guess what? An SEO specialist is brought in after the site has been launched.</p>
  6378.  
  6379. <p>Now the client is unhappy with their existing agency and places a high importance on improving SEO. In turn, the SEO specialist has a difficult job trying not to undermine the web agency but still needs to recommend structural and on-page adjustments.</p>
  6380.  
  6381. <p>They will also face problems with client expectations, who will unsurprisingly feel ripped-off and begrudge spending more money on their new shiny website.</p>
  6382.  
  6383. <p>Does this all sound familiar? The crux of our argument is that by bringing inline processes such as intent-focused keyword research from the beginning, these situations can be avoided and everyone can get along.</p>
  6384.  
  6385. <p>At the same time, an integrated approach will mean better UX and conversions alongside a strong SEO performance. Better focused content can also mean <a href="https://www.digitalmarketingpro.net/5-ways-to-lower-cpc-costs-in-your-ppc-campaigns-220/">lower PPC costs</a> too, as relevancy is a part of Google’s Adword calculation.</p>
  6386.  
  6387. <p>Rather than an expensive design phase followed by a second round of expensive SEO work, the whole process can be streamlined, keeping time and costs down, clients happier, and producing a better final product as a result.</p>
  6388.  
  6389. <div class="sponsors__wide-place"></div>
  6390.  
  6391.  
  6392.  
  6393.  
  6394. <h3 id="a-new-design-process">A New Design Process</h3>
  6395.  
  6396. <p>This is all well and good, but how can we put it into practice? With varying degrees of complexity, for many in the industry the design process will look like this:</p>
  6397.  
  6398. <h4 id="a-typical-workflow">A Typical Workflow</h4>
  6399.  
  6400.  
  6401.  
  6402.  
  6403.  
  6404.  
  6405.  
  6406.  
  6407.  
  6408.  
  6409.  
  6410. <figure >
  6411. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/902d6deb-d240-4b51-96fa-ea2955cdd307/6-different-stages-graph-one.png">
  6412. <img
  6413. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/902d6deb-d240-4b51-96fa-ea2955cdd307/6-different-stages-graph-one.png 400w,
  6414.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/902d6deb-d240-4b51-96fa-ea2955cdd307/6-different-stages-graph-one.png 800w,
  6415.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/902d6deb-d240-4b51-96fa-ea2955cdd307/6-different-stages-graph-one.png 1200w,
  6416.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/902d6deb-d240-4b51-96fa-ea2955cdd307/6-different-stages-graph-one.png 1600w,
  6417.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/902d6deb-d240-4b51-96fa-ea2955cdd307/6-different-stages-graph-one.png 2000w"
  6418. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/902d6deb-d240-4b51-96fa-ea2955cdd307/6-different-stages-graph-one.png"
  6419. sizes="100vw"
  6420. alt="Flow graph showing the different processes, project planning, design, and development &amp; launch"
  6421. />
  6422. </a>
  6423.  
  6424. <figcaption class="op-vertical-bottom">
  6425. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/902d6deb-d240-4b51-96fa-ea2955cdd307/6-different-stages-graph-one.png'>Large preview</a>)
  6426. </figcaption>
  6427. </figure>
  6428.  
  6429.  
  6430. <p>It’s worth stating that good developers will focus on user experience and the visitor journey in their own workflow. Instead, a typical project may move through these stages:</p>
  6431.  
  6432.  
  6433.  
  6434.  
  6435.  
  6436.  
  6437.  
  6438.  
  6439.  
  6440.  
  6441.  
  6442. <figure >
  6443. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/94781d36-8c47-45dd-b9ba-c783996b4a1f/7-different-stages-graph-two.png">
  6444. <img
  6445. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/94781d36-8c47-45dd-b9ba-c783996b4a1f/7-different-stages-graph-two.png 400w,
  6446.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/94781d36-8c47-45dd-b9ba-c783996b4a1f/7-different-stages-graph-two.png 800w,
  6447.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/94781d36-8c47-45dd-b9ba-c783996b4a1f/7-different-stages-graph-two.png 1200w,
  6448.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/94781d36-8c47-45dd-b9ba-c783996b4a1f/7-different-stages-graph-two.png 1600w,
  6449.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/94781d36-8c47-45dd-b9ba-c783996b4a1f/7-different-stages-graph-two.png 2000w"
  6450. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/94781d36-8c47-45dd-b9ba-c783996b4a1f/7-different-stages-graph-two.png"
  6451. sizes="100vw"
  6452. alt="Flow graph showing the different processes, project planning, design, and development &amp; launch"
  6453. />
  6454. </a>
  6455.  
  6456. <figcaption class="op-vertical-bottom">
  6457. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/94781d36-8c47-45dd-b9ba-c783996b4a1f/7-different-stages-graph-two.png'>Large preview</a>)
  6458. </figcaption>
  6459. </figure>
  6460.  
  6461.  
  6462. <h4 id="a-different-approach">A Different Approach</h4>
  6463.  
  6464. <p>Over the past year or so, we have put a lot of effort into refining this process in a way that we believe gives the best possible value for our clients. Here it is:</p>
  6465.  
  6466. <h5 id="project-planning">Project planning</h5>
  6467.  
  6468.  
  6469.  
  6470.  
  6471.  
  6472.  
  6473.  
  6474.  
  6475.  
  6476.  
  6477.  
  6478. <figure >
  6479. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3b3133d7-a9fd-4837-abd3-86809319b0ba/8-project-planning.png">
  6480. <img
  6481. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3b3133d7-a9fd-4837-abd3-86809319b0ba/8-project-planning.png 400w,
  6482.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3b3133d7-a9fd-4837-abd3-86809319b0ba/8-project-planning.png 800w,
  6483.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3b3133d7-a9fd-4837-abd3-86809319b0ba/8-project-planning.png 1200w,
  6484.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3b3133d7-a9fd-4837-abd3-86809319b0ba/8-project-planning.png 1600w,
  6485.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3b3133d7-a9fd-4837-abd3-86809319b0ba/8-project-planning.png 2000w"
  6486. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3b3133d7-a9fd-4837-abd3-86809319b0ba/8-project-planning.png"
  6487. sizes="100vw"
  6488. alt="Flow graph showing the different processes, specifically project planning and defining budget"
  6489. />
  6490. </a>
  6491.  
  6492. <figcaption class="op-vertical-bottom">
  6493. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3b3133d7-a9fd-4837-abd3-86809319b0ba/8-project-planning.png'>Large preview</a>)
  6494. </figcaption>
  6495. </figure>
  6496.  
  6497.  
  6498. <p>As always, this should be the first step, as it will define the scope of the work ahead. Be realistic and build in room for error, and be very aware that you get what you pay for. Under-budgeting runs the risk of falling short on key areas such as design, functionality, and content. At the same time, if all the project’s budget is swallowed up on design and development, there will be no room for a supporting marketing strategy or ongoing updates and improvements.</p>
  6499.  
  6500.  
  6501.  
  6502.  
  6503.  
  6504.  
  6505.  
  6506.  
  6507.  
  6508.  
  6509.  
  6510. <figure >
  6511. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/394fdbc7-8ff7-4db0-8732-0a49f3dd936e/9-project-planning-2.png">
  6512. <img
  6513. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/394fdbc7-8ff7-4db0-8732-0a49f3dd936e/9-project-planning-2.png 400w,
  6514.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/394fdbc7-8ff7-4db0-8732-0a49f3dd936e/9-project-planning-2.png 800w,
  6515.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/394fdbc7-8ff7-4db0-8732-0a49f3dd936e/9-project-planning-2.png 1200w,
  6516.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/394fdbc7-8ff7-4db0-8732-0a49f3dd936e/9-project-planning-2.png 1600w,
  6517.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/394fdbc7-8ff7-4db0-8732-0a49f3dd936e/9-project-planning-2.png 2000w"
  6518. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/394fdbc7-8ff7-4db0-8732-0a49f3dd936e/9-project-planning-2.png"
  6519. sizes="100vw"
  6520. alt="Flow graph showing the different processes, specifically project planning and defining goals"
  6521. />
  6522. </a>
  6523.  
  6524. <figcaption class="op-vertical-bottom">
  6525. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/394fdbc7-8ff7-4db0-8732-0a49f3dd936e/9-project-planning-2.png'>Large preview</a>)
  6526. </figcaption>
  6527. </figure>
  6528.  
  6529.  
  6530. <p>Similarly, your goals should be clear from the very start. Are you focused on acquiring email addresses or selling products? What is the one thing that you want your visitors to do above all else? Without clearly understanding this, the chances are that your site will fall short in its aims.</p>
  6531.  
  6532. <p>Once this is decided, you can move on to setting broader targets. There are a number of methods here, such as <a href="https://www.designcrawl.com/why-web-designers-need-smart-goals/">SMART goals</a> (or Specific, Measurable, Attainable, Relevant and Time Bound). These will define how a successful project will look on completion. Be realistic here &mdash; if your current site has a few hundred visits per month, don’t expect this to reach 10,000 within a few months without some serious effort and investment.</p>
  6533.  
  6534.  
  6535.  
  6536.  
  6537.  
  6538.  
  6539.  
  6540.  
  6541.  
  6542.  
  6543.  
  6544. <figure >
  6545. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f6f294e1-9d73-4d66-a19b-2232409448b6/10-sales-website-goals-examples.jpg">
  6546. <img
  6547. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f6f294e1-9d73-4d66-a19b-2232409448b6/10-sales-website-goals-examples.jpg 400w,
  6548.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f6f294e1-9d73-4d66-a19b-2232409448b6/10-sales-website-goals-examples.jpg 800w,
  6549.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f6f294e1-9d73-4d66-a19b-2232409448b6/10-sales-website-goals-examples.jpg 1200w,
  6550.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f6f294e1-9d73-4d66-a19b-2232409448b6/10-sales-website-goals-examples.jpg 1600w,
  6551.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f6f294e1-9d73-4d66-a19b-2232409448b6/10-sales-website-goals-examples.jpg 2000w"
  6552. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f6f294e1-9d73-4d66-a19b-2232409448b6/10-sales-website-goals-examples.jpg"
  6553. sizes="100vw"
  6554. alt="Sales website goals examples, including generating more sales, improving sales conversion rate, and improving sales support"
  6555. />
  6556. </a>
  6557.  
  6558. <figcaption class="op-vertical-bottom">
  6559. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/f6f294e1-9d73-4d66-a19b-2232409448b6/10-sales-website-goals-examples.jpg'>Large preview</a>)
  6560. </figcaption>
  6561. </figure>
  6562.  
  6563.  
  6564. <p>At the same time, we are big fans of the <a href="https://rework.withgoogle.com/guides/set-goals-with-okrs/steps/introduction/">Objectives and Key Results</a> (OKR) approach that is used by <a href="www.businessinsider.com/googles-ranking-system-okr-2014-1?IR=T">Google</a>, LinkedIn et al. This technique can work really well for a web project as well a general business strategy.</p>
  6565.  
  6566. <p>Here’s a great video that will give you some background on the OKR system.</p>
  6567.  
  6568. <figure class="video-container"><iframe data-src="https://www.youtube.com/embed/mJB83EZtAjc" width="600" height="480" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></figure>
  6569.  
  6570. <p>Writing effective OKRs is a bit of an art in itself, but there are some <a href="http://okrexamples.co/design-okr-examples">good examples here</a>. The main thing to remember though is that your goals are going to define the site’s architecture to some extent.</p>
  6571.  
  6572. <p>At its simplest level, people won’t be able to contact you if there is no contact form. Similarly, they will be less likely to get in touch if you remove a bunch of FAQ or blog posts that help explain what it is that your product or service does. This brings us onto our next step.</p>
  6573.  
  6574.  
  6575.  
  6576.  
  6577.  
  6578.  
  6579.  
  6580.  
  6581.  
  6582.  
  6583.  
  6584. <figure >
  6585. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/193872df-eae5-4775-9542-7699fe40f99c/12-project-planning-3.png">
  6586. <img
  6587. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/193872df-eae5-4775-9542-7699fe40f99c/12-project-planning-3.png 400w,
  6588.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/193872df-eae5-4775-9542-7699fe40f99c/12-project-planning-3.png 800w,
  6589.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/193872df-eae5-4775-9542-7699fe40f99c/12-project-planning-3.png 1200w,
  6590.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/193872df-eae5-4775-9542-7699fe40f99c/12-project-planning-3.png 1600w,
  6591.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/193872df-eae5-4775-9542-7699fe40f99c/12-project-planning-3.png 2000w"
  6592. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/193872df-eae5-4775-9542-7699fe40f99c/12-project-planning-3.png"
  6593. sizes="100vw"
  6594. alt="Flow graph showing the different processes, specifically project planning and reviewing existing Google Analytics data, if available"
  6595. />
  6596. </a>
  6597.  
  6598. <figcaption class="op-vertical-bottom">
  6599. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/193872df-eae5-4775-9542-7699fe40f99c/12-project-planning-3.png'>Large preview</a>)
  6600. </figcaption>
  6601. </figure>
  6602.  
  6603.  
  6604. <p>You may have pages that are already performing well. If that is the case, you’ll need to identify them so you can make sure they are built into your new structure. If you shed pages that bring in traffic at any point of your funnel, this could result in a loss of leads or sales. Along with URL alterations, this can be one of the main causes of drops in traffic after a migration or significant site update. It may seem obvious but it is an issue that we’ve seen time and time again.</p>
  6605.  
  6606. <p>The first stage of preventing this is to look in Google Analytics, or whichever analytics platform you use. Find out which pages are bringing in organic visits first of all. These should be built into your new plan as a priority, preferably without changing the URL and keeping a prominent place in your navigation structure.</p>
  6607.  
  6608. <p>Another great tool here is <a href="https://keyword-hero.com/">Keyword Hero</a>. This is relatively new, but it plugs into Google Analytics and removes the <a href="https://modassicmarketing.com/google-encrypted-search-phrases-not-provided-and-what-it-means-for-your-seo-strategy"><code>&lt;not provided&gt;</code></a> tag that was applied to organic keywords a few years ago.</p>
  6609.  
  6610.  
  6611.  
  6612.  
  6613.  
  6614.  
  6615.  
  6616.  
  6617.  
  6618.  
  6619.  
  6620. <figure >
  6621. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e38883d8-6da4-426d-b8f6-76ea1332808b/13-not-provided-tag.png">
  6622. <img
  6623. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e38883d8-6da4-426d-b8f6-76ea1332808b/13-not-provided-tag.png 400w,
  6624.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e38883d8-6da4-426d-b8f6-76ea1332808b/13-not-provided-tag.png 800w,
  6625.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e38883d8-6da4-426d-b8f6-76ea1332808b/13-not-provided-tag.png 1200w,
  6626.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e38883d8-6da4-426d-b8f6-76ea1332808b/13-not-provided-tag.png 1600w,
  6627.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e38883d8-6da4-426d-b8f6-76ea1332808b/13-not-provided-tag.png 2000w"
  6628. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e38883d8-6da4-426d-b8f6-76ea1332808b/13-not-provided-tag.png"
  6629. sizes="100vw"
  6630. alt="Example of the not provided tag"
  6631. />
  6632. </a>
  6633.  
  6634. <figcaption class="op-vertical-bottom">
  6635. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e38883d8-6da4-426d-b8f6-76ea1332808b/13-not-provided-tag.png'>Large preview</a>)
  6636. </figcaption>
  6637. </figure>
  6638.  
  6639.  
  6640. <p>This uses <a href="https://keyword-hero.com/how-its-done">some clever machine learning</a>, and it means that you’ll be able to see which keywords drive traffic to specific pages on your site. This is extremely useful in terms of planning which pages to keep or remove.</p>
  6641.  
  6642. <p>Of course, not all pages are important in terms of organic traffic. As mentioned, some could be crucial pre-conversion or sale, such as an FAQ page, but bring in little of the may of inbound visits to the site. Take a look at page views, and user flow here to make sure you are not missing anything.</p>
  6643.  
  6644. <p>At the same time, it’s worth bearing in mind that your data may not be perfect. Checking the validity of Google Analytics data is a pretty big subject in itself, but one of the simplest steps you can take is to check that your tracking code is implemented correctly.</p>
  6645.  
  6646. <p>Again, we won’t go into the ins-and-outs here. However, there is one trick that we recommend when carrying out content migrations. The web crawler Screaming Frog has a nifty feature that allows you to check for <a href="http://www.sitevisibility.co.uk/blog/2016/07/22/check-google-analytics-code-every-page/">Analytics code on every page</a>. More than once, we’ve uncovered valuable pages that are not being tracked, and would have been lost in a redesign.</p>
  6647.  
  6648.  
  6649.  
  6650.  
  6651.  
  6652.  
  6653.  
  6654.  
  6655.  
  6656.  
  6657.  
  6658. <figure >
  6659. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e899d93b-a929-4fa2-b473-970690889657/14-project-planning-4.png">
  6660. <img
  6661. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e899d93b-a929-4fa2-b473-970690889657/14-project-planning-4.png 400w,
  6662.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e899d93b-a929-4fa2-b473-970690889657/14-project-planning-4.png 800w,
  6663.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e899d93b-a929-4fa2-b473-970690889657/14-project-planning-4.png 1200w,
  6664.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e899d93b-a929-4fa2-b473-970690889657/14-project-planning-4.png 1600w,
  6665.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e899d93b-a929-4fa2-b473-970690889657/14-project-planning-4.png 2000w"
  6666. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e899d93b-a929-4fa2-b473-970690889657/14-project-planning-4.png"
  6667. sizes="100vw"
  6668. alt="Flow graph showing the different processes, specifically project planning and reviewing current rankings (keywords and ranking pages), if available"
  6669. />
  6670. </a>
  6671.  
  6672. <figcaption class="op-vertical-bottom">
  6673. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/e899d93b-a929-4fa2-b473-970690889657/14-project-planning-4.png'>Large preview</a>)
  6674. </figcaption>
  6675. </figure>
  6676.  
  6677.  
  6678. <p>Next, it’s time to start looking to see which keywords you are visible for. There are a few tools we use here, but the most useful is <a href="https://www.semrush.com/dashboard/">SEMrush</a>. This monitors billions of keywords and tracks which sites are ranking for them. By querying its database, you can see which keywords your site is appearing for in Google’s results without manually entering them into a tracker. It’s by no means perfect, so you’ll need to manually check positions for any terms you think it may have missed too.</p>
  6679.  
  6680.  
  6681.  
  6682.  
  6683.  
  6684.  
  6685.  
  6686.  
  6687.  
  6688.  
  6689.  
  6690. <figure >
  6691. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8e40f258-d6b0-4c80-9fd8-e19d8046d1e0/15-top-organic-keywords.png">
  6692. <img
  6693. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8e40f258-d6b0-4c80-9fd8-e19d8046d1e0/15-top-organic-keywords.png 400w,
  6694.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8e40f258-d6b0-4c80-9fd8-e19d8046d1e0/15-top-organic-keywords.png 800w,
  6695.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8e40f258-d6b0-4c80-9fd8-e19d8046d1e0/15-top-organic-keywords.png 1200w,
  6696.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8e40f258-d6b0-4c80-9fd8-e19d8046d1e0/15-top-organic-keywords.png 1600w,
  6697.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8e40f258-d6b0-4c80-9fd8-e19d8046d1e0/15-top-organic-keywords.png 2000w"
  6698. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8e40f258-d6b0-4c80-9fd8-e19d8046d1e0/15-top-organic-keywords.png"
  6699. sizes="100vw"
  6700. alt="Example of top organic keywords from SEMRUSH"
  6701. />
  6702. </a>
  6703.  
  6704. <figcaption class="op-vertical-bottom">
  6705. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8e40f258-d6b0-4c80-9fd8-e19d8046d1e0/15-top-organic-keywords.png'>Large preview</a>)
  6706. </figcaption>
  6707. </figure>
  6708.  
  6709.  
  6710. <p>Once you have this information, you can start drawing it together in a spreadsheet. <a href="https://docs.google.com/spreadsheets/d/1FIbPzw7RbtcjYE0wGI-riU6cJRzfBcIPmc-F2bWlkVo/edit#gid=0">Here is a sample document</a>, and you can see the initial findings in the first tab.</p>
  6711.  
  6712.  
  6713.  
  6714.  
  6715.  
  6716.  
  6717.  
  6718.  
  6719.  
  6720.  
  6721.  
  6722. <figure >
  6723. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1331296b-6295-4387-acc3-7addc8ee8466/16-keyword-document.png">
  6724. <img
  6725. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1331296b-6295-4387-acc3-7addc8ee8466/16-keyword-document.png 400w,
  6726.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1331296b-6295-4387-acc3-7addc8ee8466/16-keyword-document.png 800w,
  6727.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1331296b-6295-4387-acc3-7addc8ee8466/16-keyword-document.png 1200w,
  6728.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1331296b-6295-4387-acc3-7addc8ee8466/16-keyword-document.png 1600w,
  6729.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1331296b-6295-4387-acc3-7addc8ee8466/16-keyword-document.png 2000w"
  6730. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1331296b-6295-4387-acc3-7addc8ee8466/16-keyword-document.png"
  6731. sizes="100vw"
  6732. alt="Example of a keyword research document"
  6733. />
  6734. </a>
  6735.  
  6736. <figcaption class="op-vertical-bottom">
  6737. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/1331296b-6295-4387-acc3-7addc8ee8466/16-keyword-document.png'>Large preview</a>)
  6738. </figcaption>
  6739. </figure>
  6740.  
  6741.  
  6742.  
  6743.  
  6744.  
  6745.  
  6746.  
  6747.  
  6748.  
  6749.  
  6750.  
  6751.  
  6752. <figure >
  6753. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6ca6306f-a843-4843-90ea-1d8f1b9c10be/17-project-planning-5.png">
  6754. <img
  6755. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6ca6306f-a843-4843-90ea-1d8f1b9c10be/17-project-planning-5.png 400w,
  6756.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6ca6306f-a843-4843-90ea-1d8f1b9c10be/17-project-planning-5.png 800w,
  6757.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6ca6306f-a843-4843-90ea-1d8f1b9c10be/17-project-planning-5.png 1200w,
  6758.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6ca6306f-a843-4843-90ea-1d8f1b9c10be/17-project-planning-5.png 1600w,
  6759.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6ca6306f-a843-4843-90ea-1d8f1b9c10be/17-project-planning-5.png 2000w"
  6760. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6ca6306f-a843-4843-90ea-1d8f1b9c10be/17-project-planning-5.png"
  6761. sizes="100vw"
  6762. alt="Flow graph showing the different processes, specifically project planning and creating audience profiles"
  6763. />
  6764. </a>
  6765.  
  6766. <figcaption class="op-vertical-bottom">
  6767. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/6ca6306f-a843-4843-90ea-1d8f1b9c10be/17-project-planning-5.png'>Large preview</a>)
  6768. </figcaption>
  6769. </figure>
  6770.  
  6771.  
  6772. <p>For both UX and SEO, it is important to understand who you are speaking to. Think about the types of language or phrases your users will know, as well as the tone of voice. Do they respond to images or copy, detail or bullets, flashy designs or more technical pages?</p>
  6773.  
  6774. <p>Keyword research is also really useful here, as it defines terms and reveals correct vocabulary &mdash; another example of how keyword research eventually filters down and is important to almost every step.</p>
  6775.  
  6776.  
  6777.  
  6778.  
  6779.  
  6780.  
  6781.  
  6782.  
  6783.  
  6784.  
  6785.  
  6786. <figure >
  6787. <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c84f1a1d-4796-415c-b432-49a9a87e1c95/18-project-planning-6.png">
  6788. <img
  6789. srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c84f1a1d-4796-415c-b432-49a9a87e1c95/18-project-planning-6.png 400w,
  6790.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c84f1a1d-4796-415c-b432-49a9a87e1c95/18-project-planning-6.png 800w,
  6791.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c84f1a1d-4796-415c-b432-49a9a87e1c95/18-project-planning-6.png 1200w,
  6792.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c84f1a1d-4796-415c-b432-49a9a87e1c95/18-project-planning-6.png 1600w,
  6793.        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c84f1a1d-4796-415c-b432-49a9a87e1c95/18-project-planning-6.png 2000w"
  6794. src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c84f1a1d-4796-415c-b432-49a9a87e1c95/18-project-planning-6.png"
  6795. sizes="100vw"
  6796. alt="low graph showing the different processes, specifically project planning and carrying out user-intent focused keyword research"
  6797. />
  6798. </a>
  6799.  
  6800. <figcaption class="op-vertical-bottom">
  6801. (<a href='https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c84f1a1d-4796-415c-b432-49a9a87e1c95/18-project-planning-6.png'>Large preview</a>)
  6802. </figcaption>
  6803. </figure>
  6804.  
  6805.  
  6806. <p>Now that we know who we are talking to, how best can you do it? We have explained the concept behind user-intent focused keyword research earlier in this document, but here’s some insight into how we go about doing it ourselves. Please note, this could be a feature in itself, so for the sake of brevity we’re just focusing on an outline here.</p>
  6807.  
  6808. <p>In terms of our toolkit, we tend to use a combination of <a href="https://www.semrush.com/dashboard/">SEMrush</a> and <a href="https://moz.com/explorer">Moz</a>. We feel that using both, as well as AdWords’ keyword planner, and any others you can get your hands on, is the best way of gathering data, as each tool will have its own strength, and often data for longer-tail keywords will be available in one tool, but not another.</p>
  6809.  
  6810. <p>Here are the first steps.</p>
  6811.  
  6812. <ul>
  6813. <li>Listing all the relevant keywords we can find along with the data we have for them, volume being the most important.</li>
  6814. <li>We’ll also include some measure of how competitive they are, as well an indication if the current is already ranking for them. We usually use Moz data here, which corresponds to this key.</li>
  6815. </ul>
  6816.  
  6817. <h5 id="key">Key</h5>
  6818.  
  6819. <table class="tablesaw break-out" data-tablesaw-mode="swipe" data-tablesaw-minimap>
  6820.        <tr>
  6821.            <td>0 - 15%</td>
  6822.