<?xml version="1.0" encoding="utf-8"?>
<!-- generator="Kirby" -->
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">

  <channel>
    <title>Gilli.is</title>
    <link>https://gilli.is</link>
    <generator>Kirby</generator>
    <lastBuildDate>Tue, 03 May 2022 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://gilli.is" rel="self" type="application/rss+xml" />

    
        <item>
      <title>103 Bits of Advice</title>
      <link>https://gilli.is/notes/bits-of-advice</link>
      <guid>notes/bits-of-advice</guid>
      <pubDate>Tue, 03 May 2022 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>I stumbled upon this excellent collection of advice on things the writer wished he knew when he was young. The experience and mistakes of the writer really shine through his tips. I only know because I've made a lot of those mistakes myself, which gives me confidence in the rest of the advice.</p>]]></description>
    </item>
        <item>
      <title>Baseline Embed Test</title>
      <link>https://gilli.is/notes/baseline-embed-test</link>
      <guid>notes/baseline-embed-test</guid>
      <pubDate>Thu, 06 Jan 2022 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>I've added a feature to embed brand guides from my personal project, <a href="https://baseline.is">Baseline</a>, and wanted to test it out here on a typical blog, with width constraints and other limitations. Here it is:</p>
<!-- Begin Baseline Embedded Brand Guide Embed -->
<!-- For best results, embed it on an empty page with no margins -->
<style>
  iframe {
    width: 1px;
    min-width: 100%;
    border: 0;
  }
</style>
<script src="https://cdn.baseline.is/misc/iframeResizer.min.js"></script>
<iframe id="baselineIframe" src="https://baseline.is/brand/9fWnhisCCVrfNsGqkhak4s/?disablechat=true"></iframe>
<script>
//  iFrameResize({ log: false }, '#baselineIframe')
var frame = document.getElementById('baselineIframe');
frame.addEventListener('load', function () {
  iFrameResize({ log: true }, '#baselineIframe');
});
</script>
<!-- End Baseline Embedded Brand Guide -->]]></description>
    </item>
        <item>
      <title>Notifications are out of control</title>
      <link>https://gilli.is/journal/notifications-are-out-of-control</link>
      <guid>journal/notifications-are-out-of-control</guid>
      <pubDate>Sun, 13 Jun 2021 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>It seems that notifications these days have lost their meaning. Companies do not seem to respect people's time and constantly want to shove their &quot;content&quot; down their throats. It amazes me how far they go to draw people's attention to them at all times. This post was born after waging several notification-wars with various apps I use.</p>
<figure><img src="https://gilli.is/content/4-journal/1-notifications-are-out-of-control/alas-mercy-1600-1.jpg" alt=""></figure>
<h2>Twitter</h2>
<p>Twitter seems to think it knows better than me what I want to be notified about. It prompts when someone I follow, likes, or retweets from someone I don't even know. And to make things worse, they won't let me disable it. Instead, I can choose to &quot;See less often&quot;. This is like letting me tell them: &quot;annoy me less often; otherwise, I will completely snap. Instead this way, you can slowly drive me crazy. Thank you&quot;.</p>
<p>What I want to be notified about is as few things as possible and only the most important. Most of the time I want to know if someone messaged me, unless it's spam. And maybe I want to know if someone mentioned me, but most likely it's less critical so it can wait. I wish Twitter would respect that.</p>
<h2>Browsers</h2>
<p>One of the worst browser features created in the last few years was the built-in browser notifications that let websites send you a notification when something &quot;important&quot; happens.</p>
<p>To this day, I've yet to see anything I would like a website to send me a desktop notification about. The few things I want to hear from a website are better delivered by email.</p>
<p>Thankfully they do let you disable that feature, but they don't make it easy. You can't just click the notification area and select disable these kinds of notifications. No, you have to go digging into the settings and try to guess what they call it. Or look it up online.</p>
<h2>Instagram</h2>
<p>Instagram has lately started showing a red &quot;1&quot; at random times on my iPhone. As if I got a notification or something happened. When I open the app, there is nothing to be seen. I have no idea what is causing it, but it is driving me nuts. I feel like they are just trying to trick me into using the app, but know nothing important can happen on Instagram, so they don't even try to show me anything. It's like a psychological trick to get me to open the app, and hopefully, by the time it's open, something pretty caught my eye, and I forgot why I opened it.</p>
<h2>Slack &amp; Discord</h2>
<p>Both of these two services assume by default that you want to be notified of nearly everything. It's like going to a party and having everybody jump to you and try to tell you something you must know, while ringing cowbells, all at once. How could anyone think this is something people would want? Let us opt into the few things we find important in a simple way and leave the rest turned off.</p>
<h2>In the end, it's just frustrating</h2>
<p>I feel like companies have gotten really out of line with their aggressive notification practices. I would recommend them to take a step back and think about how they would feel if someone was standing behind them, tapping their shoulder, and then telling them whatever they sent a notification for—then deciding if they would respond to that in a positive, neutral or negative way. If it's anything but positive, then don't, don't send that notification. Please.</p>]]></description>
    </item>
        <item>
      <title>Baseline</title>
      <link>https://gilli.is/projects/baseline</link>
      <guid>projects/baseline</guid>
      <pubDate>Sun, 13 Jun 2021 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>Baseline is what I like to call a brand design platform. You start by creating a brand guide in a few easy steps that automatically take care of a lot of the heavy lifting usually involved with creating a brand guide. For example, it extracts all the colors from a logo and presents it to you for confirmation. </p>
<figure><img src="https://gilli.is/content/3-projects/1-baseline/screenshot-colors.png" alt=""></figure>
<figure><img src="https://gilli.is/content/3-projects/1-baseline/screenshot-typescale.png" alt=""></figure>
<h2>Baseline Studio</h2>
<p>Once your brand guide is ready to go, you can start designing branded content with a single click of a button. Baseline has a lot of pre-made templates to choose from. All you have to do is select the one you would like to use, and Baseline will apply your brand (logos, colors, typography, etc.) to the template, giving you an automatically on-brand design. Then, all you have to do is modify the text, and you are ready to go.</p>
<p>In this example, we select a template, then choose and apply the Netflix brand to it. The result is a Netflix branded design without us having to do anything. All we have to do now is edit the text. It couldn't be any simpler.</p>
<figure><img src="https://gilli.is/content/3-projects/1-baseline/apply-brand.gif" alt=""></figure>
<p>Having Baseline apply your brand like that saves a lot of time since you don't have to adjust the whole design to your brand, which can be a tedious process.</p>
<figure><img src="https://gilli.is/content/3-projects/1-baseline/screen-shot-2021-05-02-at-23.28.29.png" alt="screenshot"></figure>
<p>It's still early days, so the template collection is rapidly growing, but that's not all. It also comes with vector illustrations that also automatically apply your brand to them when used. Also included are thousands of stock photos, device mockups like iPhone and Macbook with easy to replace screens to show off your app or website, and you can, of course, upload your own assets to use.</p>
<figure><img src="https://gilli.is/content/3-projects/1-baseline/screen-shot-2021-04-10-at-21.16.14.png" alt=""></figure>
<figure><img src="https://gilli.is/content/3-projects/1-baseline/screen-shot-2021-04-10-at-21.15.58.png" alt=""></figure>
<p><a href="https://baseline.is">Go try Baseline out for yourself</a></p>]]></description>
    </item>
        <item>
      <title>Baseline soft launch</title>
      <link>https://gilli.is/notes/baseline-soft-launch</link>
      <guid>notes/baseline-soft-launch</guid>
      <pubDate>Fri, 30 Apr 2021 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>I've quietly launched my new product, Baseline. Still testing things out so I haven't made much noise about it yet.</p>]]></description>
    </item>
        <item>
      <title>The three year rule: How to stay motivated</title>
      <link>https://gilli.is/notes/the-three-year-rule-how-to-stay-motivated</link>
      <guid>notes/the-three-year-rule-how-to-stay-motivated</guid>
      <pubDate>Thu, 01 Apr 2021 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>A nice article on how to stay motivated and let go of the expectation of instant feedback. Great things take time.</p>]]></description>
    </item>
        <item>
      <title>Norde Source</title>
      <link>https://gilli.is/projects/norde-source</link>
      <guid>projects/norde-source</guid>
      <pubDate>Mon, 17 Feb 2020 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>Let's imagine you just purchased an icon set for a project you are working on. However, the icon set is black with blue accents which doesn't fit your brand, because your brand colors are not black and blue. Usually, there is no quick way to change that, especially for an entire icon set. You would have to manually edit icons one at a time, change the color, and export them individually. That's where Norde Source comes to the rescue.</p>
<p><a href="https://norde.io">Norde Source</a> essentially lets you take icon sets that you already have, and easily modify their color, size, and export to whichever format you need.</p>
<figure><img src="https://gilli.is/content/3-projects/2-norde-source/norde-source-screenshot.png" alt=""></figure>
<h2>Recoloring icons</h2>
<p>Traditionally if you want to change the colors for an entire icon set, you would have to load each icon into a vector design tool such as Adobe Illustrator, Affinity Designer, Inkscape, or similar, and change each color by selecting that layer and then picking the color you need. Then repeat that for every different layer you want to change the color of, for all the icons you want to edit. That quickly becomes a very tedious thing to do. </p>
<p>Using Norde Source, it only takes a few seconds to recolor an entire icon set, even when it has multiple colors. It detects each color in the set and allows you to override it quickly for the entire set. That makes recoloring icon sets that use a few different colors, a breeze.</p>
<figure><img src="https://gilli.is/content/3-projects/2-norde-source/kapture-2020-02-17-at-14.30.15.gif" alt=""></figure>
<h2>Resizing</h2>
<p>Resizing couldn't be any easier. Select the size you want, and all the icons update automatically to that size. Then when you export, they automatically get exported in the size you already selected and is represented in the icon grid.</p>
<figure><img src="https://gilli.is/content/3-projects/2-norde-source/kapture-2020-02-17-at-14.47.55.gif" alt=""></figure>
<h2>Search</h2>
<p>Find the right icon in seconds using the search bar. Each keystroke filters the icon grid further. And if you can't find the right icon in the current set, switch to another set to see if you can find one there, without having to retype your search term.</p>
<figure><img src="https://gilli.is/content/3-projects/2-norde-source/kapture-2020-02-17-at-14.57.47.gif" alt=""></figure>
<h2>Exporting</h2>
<p>Usually when you export in other apps, you get a huge settings menu that you then have to try to figure out to make sure the end result is what you want. Then you hit the export button and dig for the file in your file system, only to find out that one of the settings was wrong so you have to go through the whole process again. And of course, those export values got reset to defaults. </p>
<figure><img src="https://gilli.is/content/3-projects/2-norde-source/screen-shot-2020-02-17-at-15.01.19.png" alt=""></figure>
<p>In Norde Source, the visual representation of the icons in the grid is always exactly what you get when you export. This keeps the app incredibly simple and easy to use. </p>
<h2>Drag and drop</h2>
<p>You can easily drag and drop one or multiple icons from Norde Source to the design tool of your choice. It retains the size and color you already set in Norde Source, eliminating the need to resize or color each one once you drop in your design software of choice.</p>
<figure><img src="https://gilli.is/content/3-projects/2-norde-source/kapture-2020-02-17-at-15.10.57.gif" alt=""></figure>
<h2>Conclusion</h2>
<p>Norde Source is a powerful tool to accelerate your productivity. Not only does it help you organize your icons but it makes editing them all at once a breeze. If you haven't already, I encourage you to <a href="https://norde.io">head over and download a copy of Norde Source</a>.</p>]]></description>
    </item>
        <item>
      <title>Why designing for open source can be so difficult</title>
      <link>https://gilli.is/journal/why-designing-for-open-source-can-be-so-difficult</link>
      <guid>journal/why-designing-for-open-source-can-be-so-difficult</guid>
      <pubDate>Tue, 11 Feb 2020 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>After being involved with design and open source projects for many years, I've noticed a few common reasons why designing for open source projects can be very difficult. Open source projects (especially FOSS) face a lot of issues that more conventional projects don't because they lack a clear business model, the structure, and the incentives that for-profit proprietary projects have.</p>
<figure><img src="https://gilli.is/content/4-journal/2-why-designing-for-open-source-can-be-so-difficult/corliss-steam-engine-1600.jpg" alt="The Corliss gear-cutting machine from https://www.oldbookillustrations.com/"></figure>
<h2>Nerd porn</h2>
<p>A lot of open source projects suffer from too much of what I like to call, nerd-porn. It involves displaying as much information about what is going on at any given time as possible, which nerds love. Don't get me wrong though, I'm a nerd, and I like nerds.</p>
<p>But the trouble is that most of that information is not that useful except maybe if you are a developer debugging the product. But, as if that isn't enough, nerd-porn lovers also want to be able to tweak everything to fit their taste perfectly.</p>
<p>Adding features and settings is fun and often done without much second thought. In the end, it results in a bloated beast that causes a lot of confusion and frustration, especially among the type of users most open-source projects are missing, the average user who just wants to get things done. </p>
<p>All this clutter is followed by adding optional themes as a solution to the complaints people have about the user experience, which, in my opinion, can never fix the problems because they go much deeper than the superficial surface, and that is all that a theme can fix. But it can require a lot of refactoring and changes to fix the user experience.</p>
<p>I prefer serving the average user who doesn't have time to dive into the settings and tweak everything before he is finally able to use the product. Striving for ease of use removes the need for most settings. If you're interested in reading a case study where I redesigned an open source that had these issues, <a href="http://gilli.is/projects/syncthing">check this case study out</a>.</p>
<h2>Decision making</h2>
<p>Many projects don't really have any real leadership which can lead them to end up being a bit aimless and unable to focus on what is essential for its success.</p>
<p>Getting people to focus on a clear goal is easy when money is involved. There is a big incentive to build for your user because he is the reason you are able to buy bread for your family. </p>
<p>But open source projects often don't have that incentive. They are worked on by volunteers who give away their free time and get very little in return. </p>
<p>As a result, contributors often only want to work on the fun stuff, like adding new features. But nobody wants to work on the boring, but arguably more important, things like optimisation or modifying complicated code to improve the user experience. Because after all they are doing this in their free time and most likely spent their day dealing with boring stuff at work.</p>
<p>In addition to all this, there is often a lack of a clear decision-making process. Nobody wants to be a dictator and, if there is no clear process in place, all the discussion leads to <a href="https://css-tricks.com/what-is-bikeshedding/">bike shedding</a>.</p>
<h2>Designers and developers</h2>
<p>I think a part of the reason why more designers don't contribute to open source is that often it requires you to rethink the entire product from the ground up and make changes that require someone else to do a lot of work. And maybe even remove features that blocking a good experience. That's actually how I start every project I work on, I dig in and question everything and make sure to strip it down to its bare bones and build it back up with a clear focus.</p>
<p>I think removing features is possibly one of the hardest things to do for an open source project because there will always be that one guy who really, really, really wants that feature and will be very vocal about it. For a project with a financial incentive, this is an easy decision to make. But for an open source project, this can lead to an endless discussion spanning many months. On top of that, someone may have put a lot of work into building that feature and might feel insulted if it is deleted. All this can lead to a lot of resentment and drain the energy out of the project.</p>
<h2>Conclusion</h2>
<p>I think the best way to solve these issues is to make the projects goals clear right from the start, who is it for? Is it for specialists or average joe? Who gets the final say? Who is in charge of making sure the discussion doesn't go on and on forever while making no progress? And how will you handle significant changes that are holding the project back?</p>
<p>Finally, I want to give a shoutout to <a href="https://opensourcedesign.net/">Open Source Design</a>, which I've been a member of for a long time, and whose goals are to improve open source design.</p>]]></description>
    </item>
        <item>
      <title>Native image lazy loading</title>
      <link>https://gilli.is/journal/native-image-lazy-loading</link>
      <guid>journal/native-image-lazy-loading</guid>
      <pubDate>Tue, 14 Jan 2020 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>This feature has been longed after for a long time, by me at least. Until now you needed to use some library if you want to lazy load your images in all browsers, and you still do if you want to to work in all browsers. However you can start using lazy loading for images , as well as iframes actually, if you don't mind it only <a href="https://caniuse.com/#feat=loading-lazy-attr">working in a few browsers</a>, since browsers that don't support it will just ignore it and load the image normally.</p>
<p>All you have to do to use it is to add the attribute <strong>loading</strong> with the value of <strong>lazy</strong> like shown below:</p>
<pre><code>&lt;img src="gillis-cat.jpg" loading="lazy" alt="..." /&gt;
&lt;iframe src="some-page.html" loading="lazy"&gt;&lt;/iframe&gt;</code></pre>
<p>That's it, simple as pie! Now to demonstrate this I'll add a bunch of <code>&lt;br&gt;</code> tags below to create some space and then add an image of my cat. If you're using Chrome or Opera the image should not load until right before you get to it. If your internet is too fast you might not even notice it at all. While experimenting with this feature I had to open the developer tools in my browser and look at the network tab to see the image get loaded in as I scrolled down. Hopefully, if you are reading this in the near future, it will work in whatever browser you may be using.</p>
<p>Here we go. Scroll down! </p>
<p><br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
Keep going!<br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
Won't be long, keep scrolling!<br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
Almost there!<br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br><br />
<br></p>
<img src="https://gilli.is/content/4-journal/3-native-image-lazy-loading/gillis-cat.jpg" loading="lazy" alt="Gillis cat whos name is Títan" />
<p>Finally! Maybe I made the space a bit too big. Anyway that's my cat. His name is Títan and he likes to eat tuna, play with toy mice, run around like crazy and of course cuddle on my desk as I work.</p>]]></description>
    </item>
        <item>
      <title>Autorefi</title>
      <link>https://gilli.is/projects/autorefi</link>
      <guid>projects/autorefi</guid>
      <pubDate>Thu, 25 Apr 2019 00:00:00 +0000</pubDate>
      <description><![CDATA[<h3>Enter zip to start</h3>
<p>Since the service is only available to a specific region we don't want to waste anyones time. Thus the first step is to enter your zip to make sure the person is eligable. </p>
<figure><img src="https://gilli.is/content/3-projects/3-autorefi/1.zip-2x.png" alt=""></figure>
<p>Once we have cleared the person as an eligible applicant we proceed to create an account and gather all the required personal information.</p>
<figure><img src="https://gilli.is/content/3-projects/3-autorefi/2.user-account-2x.png" alt=""></figure>
<figure><img src="https://gilli.is/content/3-projects/3-autorefi/2.personal-information-2x.png" alt=""></figure>
<p>There can be joint applicant's on the loan that we need the information for. So in case the user chooses to add a joint applicant we collect their information on the next screen.</p>
<figure><img src="https://gilli.is/content/3-projects/3-autorefi/applicant-joint-info-during-signup%402x.png" alt=""></figure>
<h3>Car information</h3>
<p>Now we're done with all the necessary applicant information we move on to the car information.</p>
<figure><img src="https://gilli.is/content/3-projects/3-autorefi/car-information-if-used-v2%402x.png" alt=""></figure>
<h3>Document upload</h3>
<figure><img src="https://gilli.is/content/3-projects/3-autorefi/document-upload%402x.png" alt=""></figure>
<p>The document upload was made to be flexible and quickly communicate the necessary documents. Once you upload a doc you choose what it's for and if you still need something it will say so between the upload field and the file list.</p>
<figure><img src="https://gilli.is/content/3-projects/3-autorefi/document-upload-upload-finished%402x.png" alt=""></figure>
<h3>Review</h3>
<p>Once we gathered all the necessary information there is a chance to review. If anything doesn't look right, it's just a click away. Both by each section in the review and on the right half of the page where you can go back anytime, at any step of the process.</p>
<figure><img src="https://gilli.is/content/3-projects/3-autorefi/review-application%402x.png" alt=""></figure>
<h3>Dashboard</h3>
<p>All is not over when the review is done. The user is able to come back and check up on the process, or even make new applications. Once there is an offer ready an email is sent out as well as it being visible right there in the dashboard.</p>
<figure><img src="https://gilli.is/content/3-projects/3-autorefi/loan-dashboard-notification%402x.png" alt=""></figure>
<h3>Offer</h3>
<p>On the offer page the user can compare the exact loan they want, with every difference clearly visible. How much they pay per month being the most obvious along with changes in APR depending on the length of the term.  </p>
<figure><img src="https://gilli.is/content/3-projects/3-autorefi/offer%402x.png" alt=""></figure>
<h3>Results</h3>
<p>Products like these allow credit unions to team up to give them an compatative advantage. It allows an otherwise tiny credit union that people are unaware of able to make an offer to a customer that otherwise would never have heard of them. </p>
<p>These kind of products are a real joy for me to design and build because they offer me a proper challenge to use my head to create a great experience that is simple and effective to use for the user.</p>]]></description>
    </item>
        <item>
      <title>A logo I made got featured</title>
      <link>https://gilli.is/notes/a-logo-i-made-got-featured</link>
      <guid>notes/a-logo-i-made-got-featured</guid>
      <pubDate>Wed, 10 Apr 2019 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>It's always a nice feeling to see your work get shared. I just noticed some traffic to my website coming from a a little logo inspiration website featuring a little logo I made for a client. I don't normally do much logo work but once in a while a client twists my arm and this one was the result of one of those cases.</p>]]></description>
    </item>
        <item>
      <title>How to get better at design</title>
      <link>https://gilli.is/journal/how-to-get-better-at-design</link>
      <guid>journal/how-to-get-better-at-design</guid>
      <pubDate>Tue, 05 Feb 2019 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>I recently answered a post on <a href="https://www.indiehackers.com">Indiehackers.com</a> about how non-design founders (Such as developers and business people) can get better at design. That's something I always try to help my clients do so that they can make better decisions. This allows us to work better together  and help them become more self-sufficient. After all my job is to help them succeed not bleed them out. Here is what I told him:</p>
<hr />
<p>Getting better with design is similar to getting better at programming. The more you do it the better you get.</p>
<p>That being said as a consultant I usually try to help my clients get a better sense for design so that we can work together more easily. Here are a couple of tips that you can try as a first steps to get better:</p>
<ol>
<li>
<p>First of all start paying attention when you use a product that you like or made a good impression on you visually. Pay special attention to sizing, spacing, colors, etc..</p>
</li>
<li>
<p>Start simple. After years of designing I still start things very simple. Usually on a white background with a good font and one high contrast color (besides black). Give elements the breathing room they deserve by adding spacing. Without going into details I would recommend you to go back to step 1 and look at the products you like for inspiration. I would also suggest you to base your gray tones on that single high contrast color. For example instead of making the text be completely black, add a hint of that primary color into it (indiehackers.com actually does this).</p>
</li>
<li>Don't overcomplicate things, especially at the start. For example let's take indiehackers.com as an example. If you were designing it from scratch you should probably just focus on the posts themselves in the beginning and try to get them to be as good as you can before adding other things that would clutter the interface and the user experience.</li>
</ol>
<p>I hope this helps. Feel free to pm me if you want some tips on your product. That includes anyone else who might be reading this.</p>]]></description>
    </item>
        <item>
      <title>Blobmaker</title>
      <link>https://gilli.is/notes/blobmaker</link>
      <guid>notes/blobmaker</guid>
      <pubDate>Thu, 10 Jan 2019 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>I stumbled across this cute little blobmaker tool in my RSS feed today. It's a clever little app that helps you create blobs that you download as SVGs. This solves a small problem but it can be surprisingly frustrating to create blobs like that manually so I bet somebody created this to scratch their own itch.</p>]]></description>
    </item>
        <item>
      <title>Contraste app</title>
      <link>https://gilli.is/notes/contraste-app</link>
      <guid>notes/contraste-app</guid>
      <pubDate>Tue, 16 Oct 2018 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>I just stumbled upon this nifty little app that sits on your desktop and let's you quickly and easily test text contrast.</p>]]></description>
    </item>
        <item>
      <title>Web design museum</title>
      <link>https://gilli.is/notes/web-design-museum</link>
      <guid>notes/web-design-museum</guid>
      <pubDate>Tue, 25 Sep 2018 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>I just stumbled across the web design museum. I remember a lot of them but somehow they always looked better in my memory. </p>
<p>Who knows, maybe one day one of my designs will be there! :)</p>]]></description>
    </item>
        <item>
      <title>Nostalgic</title>
      <link>https://gilli.is/projects/nostalgic</link>
      <guid>projects/nostalgic</guid>
      <pubDate>Wed, 19 Sep 2018 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>Nostalgic wanted to transform this experience by vetting the tours it would offer personally and guaranteeing the quality would meet expectations. With very limited selection and proper details about each destination included in the tour along with beautiful photography of the place. </p>
<h3>The greeting</h3>
<p>To give a proper feel for the country and a smooth transition from the intro into the rest of the landing page is this amazing photo by <a href="https://unsplash.com/@andersjilden">Anders Jildén</a></p>
<figure><img src="https://gilli.is/content/3-projects/4-nostalgic/slice1.jpg" alt=""></figure>
<h3>Tour intro</h3>
<p>Since the tours were very limited, we wanted each to be as impactful as possible right from the start. That's how we came up with this image on top of image layout which would make you feel the tour already. In the case of <em>The South Coast tour</em>, where you visit glaciers, waterfalls and dramatic black beaches. You see a large image in the background of a glacier texture with a serenic image on top of a black beach with a basalt rock formation overhanging a man looking out across the ocean. This sets the mood for what you will feel and experience on the tour. </p>
<figure><img src="https://gilli.is/content/3-projects/4-nostalgic/slice2.jpg" alt=""></figure>
<p>After each tour we break things up with a little quote about the place, my favourite quote being the one for the <em>Snæfellsnes</em> peninsula tour where the famous book of Jules Verne, The Journey to the center of the earth took place.</p>
<figure><img src="https://gilli.is/content/3-projects/4-nostalgic/quote.jpg" alt=""></figure>
<h3>The Why</h3>
<p>Since Nostalgic wasn't supposed to be like all the other traditional booking websites in Iceland, we wanted to explain how we are different and why you should choose Nostalgic.</p>
<figure><img src="https://gilli.is/content/3-projects/4-nostalgic/slice4.jpg" alt=""></figure>
<h3>Photography</h3>
<p>Because good photography was so important to setting the feel for the tours we wanted to build a community and encourage our travellers to share their images and experiences with us.</p>
<figure><img src="https://gilli.is/content/3-projects/4-nostalgic/slice5.jpg" alt=""></figure>
<h2>The tours</h2>
<p>The most important pages are where you get all the details and reserve your spot. The reservation front and center in an impactful way. Followed by the main information about the tour. </p>
<figure><img src="https://gilli.is/content/3-projects/4-nostalgic/tour1.jpg" alt=""></figure>
<h3>Highlights</h3>
<p>In order to give people a proper feel for the tour and it's destination we created this collage of text and images labelled with the stop order. </p>
<figure><img src="https://gilli.is/content/3-projects/4-nostalgic/tour2.jpg" alt=""></figure>
<h3>The map</h3>
<p>An interactive map that blends perfectly into the page matching the brand and feel of the site. Zoom in to get as much detail as you want. The plan was to have special icons matching the destination type, like a waterfall, cave, and so on.</p>
<figure><img src="https://gilli.is/content/3-projects/4-nostalgic/tour3.jpg" alt=""></figure>
<h3>Testimonials</h3>
<p>Happy customers is the end goal so displaying our pride was important to us. Right before the bottom booking widget we displayed our customers testimonials and some of their images from the trip along with proper credit of course.</p>
<figure><img src="https://gilli.is/content/3-projects/4-nostalgic/tour4.jpg" alt=""></figure>
<h2>The adventure ended before it began</h2>
<p>Unfortunately not every project becomes a reality and sometimes it's better to move on rather than to force something to birth. This project was close to becoming a reality but ultimately did not quite make it there due to some critical factors falling through. Nevertheless I am proud of the ideas and design which is why I chose to display it on my site anyway. It was great working with the people involved in this project and I hope somebody gets inspired by the work produced. </p>
<p>Here are the two main pages in all their glory:</p>
<figure><img src="https://gilli.is/content/3-projects/4-nostalgic/nostalgic.jpg" alt=""></figure>
<figure><img src="https://gilli.is/content/3-projects/4-nostalgic/tour-full.jpg" alt=""></figure>]]></description>
    </item>
        <item>
      <title>Responsive tables using CSS Grid Layout</title>
      <link>https://gilli.is/journal/responsive-tables-using-css-grid-layout</link>
      <guid>journal/responsive-tables-using-css-grid-layout</guid>
      <pubDate>Sun, 09 Sep 2018 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>Tables can be a big problem on mobile devices. <a href="https://css-tricks.com/responsive-data-tables/">There are a number of articles</a> covering the subject of how to make them responsive all with their own drawbacks.</p>
<p>I realised recently that the new CSS Grid Layout could be used to solve this and make them look like a lot of mobile apps choose to display data like that. At least for tables that are not huge but still too big for mobile devices. I think four to eight columns would be optimal to make this work.  </p>
<p>This idea of using grid to make tables mobile friendly came to me while using my online bank on my phone and getting irritated that it isn’t responsive. Then I thought that my bank probably has a lot of legacy code and didn’t want to make big changes. So my goal in this article is to make minimal changes to show how easy it can be with CSS Grid.</p>
<h2>Minor markup changes before we get started</h2>
<p>The markup I am going to work with in this article is pretty much the same as my banks. However I did add some classes and renamed others. Also in the &quot;Account&quot; column there was no markup separating the account name from the account number so I took the liberty to add tags and classes to them. I could have worked around those things but I wanted to clean it up a bit for this article . Here is the markup I will be working with. A pretty simple table:</p>
<pre><code>&lt;div class="table__wrap"&gt;
  &lt;table class="table"&gt;
    &lt;thead class="table__header"&gt;
      &lt;tr class="table__row"&gt;
        &lt;th class="table__cell u-text-left"&gt;Account&lt;/th&gt;
        &lt;th class="table__cell u-text-right"&gt;Balance&lt;/th&gt;
        &lt;th class="table__cell u-text-right"&gt;Limit&lt;/th&gt;
        &lt;th class="table__cell u-text-right"&gt;Available&lt;/th&gt;
        &lt;th&gt;&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;

    &lt;tbody&gt;

      &lt;tr class="table__row"&gt;
        &lt;td class="table__account table__cell"&gt;
          &lt;a href="#" class="table__account-content table__link table__link"&gt;&lt;span class="table__account-number"&gt;1110-26-000487&lt;/span&gt; &lt;span class="table__account-name"&gt;Checking Account&lt;/span&gt;
          &lt;/a&gt;
        &lt;/td&gt;
        &lt;td class="table__balance table__cell u-text-right u-font-mono"&gt;&lt;span class="num_negative"&gt; -250.000 &lt;/span&gt;&lt;/td&gt;
        &lt;td class="table__limit table__cell u-text-right u-font-mono"&gt;500.000&lt;/td&gt;
        &lt;td class="table__available table__cell u-text-right u-font-mono"&gt;250.000&lt;/td&gt;
        &lt;td class="table__transfer table__cell u-text-center"&gt;&lt;a class="btn" href=""&gt;Transfer&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;

      &lt;tr class="table__row"&gt;
        &lt;td class="table__account table__cell"&gt;
          &lt;a href="#" class="table__account-content table__link"&gt;&lt;span class="table__account-number"&gt;1110-26-000487&lt;/span&gt; &lt;span class="table__account-name"&gt;Savings&lt;/span&gt;&lt;/a&gt;
        &lt;/td&gt;
        &lt;td class="table__balance table__cell u-text-right u-font-mono"&gt;&lt;span class="num_negative"&gt; 1.000.000 &lt;/span&gt;&lt;/td&gt;
        &lt;td class="table__limit table__cell u-text-right u-font-mono"&gt;0&lt;/td&gt;
        &lt;td class="table__available table__cell u-text-right u-font-mono"&gt;1.000.000&lt;/td&gt;
        &lt;td class="table__transfer table__cell u-text-center"&gt;&lt;a class="btn" href=""&gt;Transfer&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;

      &lt;tr class="table__row"&gt;
        &lt;td class="table__account table__cell"&gt;
          &lt;a href="#" class="table__account-content table__link"&gt;&lt;span class="table__account-number"&gt;1110-26-000487&lt;/span&gt; &lt;span class="table__account-name"&gt;Joint Account&lt;/span&gt;&lt;/a&gt;
        &lt;/td&gt;
        &lt;td class="table__balance table__cell u-text-right u-font-mono"&gt;&lt;span class="num_negative"&gt; 150.000 &lt;/span&gt;&lt;/td&gt;
        &lt;td class="table__limit table__cell u-text-right u-font-mono"&gt;0&lt;/td&gt;
        &lt;td class="table__available table__cell u-text-right u-font-mono"&gt;150.000&lt;/td&gt;
        &lt;td class="table__transfer table__cell u-text-center"&gt;&lt;a class="btn" href=""&gt;Transfer&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;

    &lt;/tbody&gt;

    &lt;tfoot&gt;

      &lt;tr class="table__row table__row--last"&gt;
        &lt;td class="table__cell" align="right"&gt;Total (&lt;acronym title="US Dollars"&gt;USD&lt;/acronym&gt;):&lt;/td&gt;
        &lt;td class="table__balance table__cell u-text-right u-font-mono"&gt;900.000&lt;/td&gt;
        &lt;td class="table__limit table__cell u-text-right u-font-mono"&gt;500.000&lt;/td&gt;
        &lt;td class="table__available table__available--total table__cell u-text-right u-font-mono"&gt;1.400.000&lt;/td&gt;
        &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;

    &lt;/tfoot&gt;
  &lt;/table&gt;
&lt;/div&gt;</code></pre>
<h2>Prioritising the content</h2>
<p>First thing I want to do is decide what content is important to a mobile user and what we can let go off. This is just to declutter the interface and set our priorities straight.</p>
<p>The table headers become rather useless to us on mobile since they will not be able to serve their job properly once I change the layout so I will hide them on mobile. For that I use the utility class I created called <code>.u-visually-hidden--mobile</code> that makes sure it's still there for people who use screen readers. </p>
<h2>Rows become grids</h2>
<p>Adding <code>display: grid</code> to the rows changes each row to a grid. I apply it on the rows so I can stack up some of the columns to save horizontal space.</p>
<p>Next I want two grid rows within each table row. To do that I add <code>grid-template-rows: 1fr 1fr;</code> to the table row class. <code>1fr</code> means one fraction of the available space. This way both rows should be equal height and balanced.</p>
<p>My goal is to have only 3 columns so I will create a template for the columns as well. The first two will be the most important ones, while the last one consists of only the transfer button so it doesn’t need as much space. Which is why I’ll add <code>grid-template-columns: 2fr 2fr 1fr;</code>, first two columns get 2 fractions of the available space each and the last one only gets one.</p>
<pre><code>@media only screen and (max-width: 650px) {
  .table__row {
    display: grid;
    grid-template-columns: 2fr 2fr 1fr;
    grid-template-rows: 1fr 1fr;
    grid-column-gap: 1rem;
    align-items: center;
  }
}</code></pre>
<h2>Stacking the columns</h2>
<p>The first column, Account, will stay in its own column. I then stack the account name above the account number and make the account number smaller to emphasise the hierarchy.</p>
<pre><code>@media only screen and (max-width: 650px) {
  .table__account {
    grid-column: 1;
    grid-row: span 2;
    }

  .table__account-content {
    display: flex;
    flex-direction: column;
  }

  .table__account-number {
    order: 2;
    font-size: 12px;
    padding-top: 0.25rem;
  }
}</code></pre>
<p>I want to try to limit the width to two or three columns and since &quot;Limit&quot; is not that important to be present on this screen — And because it mostly shows zeroes — I'll be removing it from display. They would usually be able to see the limit on their account page anyway so it's not a priority for this overview table. I think you can assume that people usually only have a limit on one account and know how much it is.</p>
<p>The &quot;Balance&quot; and &quot;Available&quot; columns are going to get stacked on top of each other with the following code:</p>
<pre><code>@media only screen and (max-width: 650px) {
  .table__balance {
    grid-column: 2;
    grid-row: 2;
    font-size: 0.75rem;
    padding-top: 0.125rem;
  }

  .table__available {
    grid-column: 2;
    grid-row: 1;
    padding-bottom: 0.125rem;
  }
}</code></pre>
<p>They are very related content and stacking them should give you a quick overview. But there is a problem. I got rid of the table headers so there is no indication of what the numbers mean at the moment. To fix that problem I’m adding the following CSS:</p>
<pre><code>@media only screen and (max-width: 650px) {
  .table__balance::before {
    content: "Balance: ";
  }
}</code></pre>
<p>This adds the text “Balance: “ before the balance tag on mobile devices giving a clear distinction between the two values. </p>
<p>Finally I make the transfer button span two rows so it is vertically centered with the other content like so: </p>
<pre><code>@media only screen and (max-width: 650px) {
  .table__transfer {
    grid-column: 3;
    grid-row: span 2;
  }
}</code></pre>
<h2>The results</h2>
<p>It wasn't very complicated but the results are a neat and simple mobile friendly layout that is easy to use and understand. I've added a few cosmetic styles just to make it look a bit better but what I have shown here above are the important parts and the results are here in this pen:</p>
<p data-height="356" data-theme-id="0" data-slug-hash="QVaWGR" data-default-tab="html,result" data-user="gilli" data-pen-title="Responsive tables using CSS Grid Layout" class="codepen">See the Pen <a href="https://codepen.io/gilli/pen/QVaWGR/">Responsive tables using CSS Grid Layout</a> by Gilli Sigurðs (<a href="https://codepen.io/gilli">@gilli</a>) on <a href="https://codepen.io">CodePen</a>.</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>
<h2>Why?</h2>
<p>Now you may be thinking “But Gilli, why do we use tables at all then? Wouldn't it be simpler to just use CSS grid all the time&quot;. Here are some of the reasons to use tables:</p>
<ul>
<li>This is tabular data so using tables makes perfect sense.</li>
<li>For Accessibilities sake since it should be more understandable for screen readers and shouldn't surprise the user.</li>
<li>This approach can be used on an already existing codebase to make it responsive without having to rebuild everything. In fact you could probably get away with only adding CSS and not touching the html.</li>
<li>People are already familiar with tables and expect them. However if the content is much more readable without it then by all means go for it.</li>
</ul>
<h2>Conclusion and caveats</h2>
<p>Overall I think CSS Grid Layout is incredibly powerful to transform content completely and adapt it to whatever scenario you need to. I haven't used this solution in a production environment yet so there might be some more problems that I haven't thought of but mostly I haven't see any big ones so far, <a href="https://caniuse.com/#search=css%20grid%20layout http://">except for browser support of course</a>. However here are a couple of caveats that you should keep in mind before using this:</p>
<ul>
<li>You can't dump any table with any content into it and be good to go. You have to actually think about the content for each table and how it should fit.</li>
<li>It doesn't support huge tables without either creating monster stacks or hiding a lot of the columns.</li>
</ul>]]></description>
    </item>
        <item>
      <title>Using HSL for web development</title>
      <link>https://gilli.is/notes/hex-to-hsl</link>
      <guid>notes/hex-to-hsl</guid>
      <pubDate>Fri, 17 Aug 2018 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>Sara Soueidan goes into detail on how using HSL instead of HEX or RGB simplifies creating matching color sets and how powerful HSL can be.</p>]]></description>
    </item>
        <item>
      <title>Designers and their portfolios</title>
      <link>https://gilli.is/journal/designers-and-their-portfolios</link>
      <guid>journal/designers-and-their-portfolios</guid>
      <pubDate>Sun, 05 Aug 2018 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>I’ve been checking out a lot of designers portfolios lately out of curiosity to see what others are doing and how they present themselves. I decided to write small reviews on some of them and share with you.</p>
<h2><a href="https://laurakalbag.com/">Laura Kalbag</a></h2>
<p>I like that she includes a bit about her in the footer rather than links. This is something I started doing on specific pages myself. She plays with color in an interesting way as well.</p>
<h2><a href="http://bradfrost.com/">Brad Frost</a></h2>
<p>Brad includes a big section on the bottom of every page listing all the services he provides. His hero text “I make great web experiences and help others do the same.&quot; is interesting and caught my attention.</p>
<h2><a href="http://kerem.co/">Kerem Suer</a></h2>
<p>Uses Dribbbles platform to host his portfolio. Which basically just showcases selected work from Dribbble. Which means it’s mostly images.</p>
<h2><a href="http://rog.ie/">Rogie King</a></h2>
<p>This portfolio is lively and clearly communicates his strong illustration talents. It is a one pager so it doesn't go very deep into each project it showcases which is a bit disappointing.</p>
<h2><a href="http://www.nicholasslater.co/">Nick Slater</a></h2>
<p>All the work is presented as an image collage. When you click on  a image opens a slideshow with that image. The images that follow are the other projects. No text describing the projects what so ever.</p>
<h2><a href="http://ryanputn.am/">Ryan Putnam</a></h2>
<p>Describes himself as a <em>designer, illustrator, and potter</em> which is a cool combination. It's interesting to me that his contact form is hidden on his about page. There is an image collage with his design work but only clicking on some of images actually takes you anywhere.</p>
<h2><a href="https://sliday.com/">Stas Kulesh</a></h2>
<p>Strange first page of a map with.. his home marked? Or something like that at least. Which he says, in his intro, is in the heart of middle-earth. Oh after clicking on “Works” and then clicking on “About” it turns out this is an agency that Stas founded. Oh well. I’ll leave this in here anyway as an example of vague intros that don’t really explain what the website is about.</p>
<h2><a href="http://archaleks.com/">Aleksandra Marjanovic</a></h2>
<p>Her loading animation gives me the feeling that she is an architect. But it seems like she does anything creative on or off screen. Her website is rather fitting for that although there is a bit too much going on for my taste.</p>
<h2><a href="https://www.sarahdayan.com/">Sarah Dayan</a></h2>
<p>Straight forward and clear about what she does. She has a blog and a vlog. I like that when viewing a lettering project she walks you through every step from the first sketch to the end result.</p>
<h2><a href="http://tufvesson.work/">Simone Tufvesson</a></h2>
<p>You are greeted by a rapid hand animation covering and uncovering text saying she’s up for freelance. I wasn’t sure if this was a loading animation while the page was loading or not so I waited a while to see if it would change. It didn’t so you just have to scroll a bit. Her projects are well presented with videos, images, color palettes and text. </p>
<h2>Conclusion</h2>
<p>A lot of the designers I wanted to review used Dribbble, Behance or similar as their portfolio so I had to skip quite a lot. Others only list the studios they work at as their website. </p>
<p>Overall it was interesting to see all the different creative directions they chose to take. I like it when they use their portfolio to experiment and surprise. I’m planning to keep on reviewing more portfolios since this is a really fun way to get inspired and learn something new.</p>]]></description>
    </item>
        <item>
      <title>Nice guide for using SVG on the web</title>
      <link>https://gilli.is/notes/nice-guide-for-using-svg-on-the-web</link>
      <guid>notes/nice-guide-for-using-svg-on-the-web</guid>
      <pubDate>Thu, 02 Aug 2018 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>Just came across this while searching the web regarding some SVG issue I was having. It's a nice reference guide to using SVG on the web. I had forgotten that you could use the <code>&lt;object&gt;</code> element for SVGs still be able to manipulate it with CSS and javascript.</p>]]></description>
    </item>
        <item>
      <title>Inspiration: Emergence</title>
      <link>https://gilli.is/notes/inspiration-emergence</link>
      <guid>notes/inspiration-emergence</guid>
      <pubDate>Wed, 25 Jul 2018 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>I'm genuinely inspired and amazed by the design of this website for this investment fund. The portraits, the colors, the layout, everything, simply amazing.</p>]]></description>
    </item>
        <item>
      <title>Webmentions</title>
      <link>https://gilli.is/notes/webmentions</link>
      <guid>notes/webmentions</guid>
      <pubDate>Wed, 25 Jul 2018 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>Sounds like webmentions could possibly enable us to take back and own our identity a bit more on the internet.</p>]]></description>
    </item>
        <item>
      <title>Landing pages and Hugo</title>
      <link>https://gilli.is/journal/generating-tens-of-landing-pages-with-hugo</link>
      <guid>journal/generating-tens-of-landing-pages-with-hugo</guid>
      <pubDate>Wed, 14 Mar 2018 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>A client of mine came to me with a problem. They have multiple partners that use my clients product for their customers and each of those partners needs a landing page to promote and onboard their users. </p>
<p>My client was creating those landing pages by copy-pasting some html code and editing everything manually. Which was obviously getting overwhelming for them since their partners kept growing and growing. They wanted a solution that was simple manage and allowed them to update one or all the websites without too much hassle.</p>
<p>The websites would live on my clients subdomains and be mostly identical but still have many features that would always be different, such as the name of the partner, logo, email, etc. And some features that would <em>sometimes</em> be different, such as the hero text, call to action and various other parts. Some features would mostly be the same though, like some generic signup text and other things.</p>
<h2>The design</h2>
<p>At first I was thinking about using color schemes and design features from each partner but after a little experimentation, and prior experience trying to accommodate for such a wide variety of unknown variables, we came to the conclusion that it would be very difficult to make it consistently good looking. Instead we decided to go with something more like with our own clean design that would be similar with the design of the product itself, so once a user would signup or login they would feel like they are in familiar territory.</p>
<h2>The development</h2>
<p>When it came to actually developing the sites my first thought was that I would be able to use Drupal for it. I have a long history with Drupal so I was confident I could make it pick up the subdomains as variables and use them to completely transform itself for each subdomain name, serving different content from one Drupal instance. I quickly developed a prototype that did exactly that. </p>
<p>After discussing pros and cons of my prototype and possible solutions with my client we decided that a static site generator would fit better into their current ecosystem. It would keep them from the burden of managing one more database that would be vulnerable to an attack that could damage their reputation. </p>
<p>I had never heard of anyone doing something like this using static site generators but I was thirsty for a good challenge so I didn't hesitate and got started doing some research. </p>
<h2>Enter Hugo</h2>
<p><a href="https://gohugo.io/">Hugo</a> was quick to make it to the top of my list. I had heard many people praising it and after digging into their documentation and forum I found out you could specify a different config file with a different publish path that would allow me to create multiple websites from a single source. </p>
<p>This would enable me use one config file for each website I needed to create and just change a couple of variables to create a completely different website with its own url, partner name, logo, subpages, contact email and other things that needed to change, all in a matter of minutes. </p>
<p>The main parts of the config files look something like this:</p>
<pre><code># ****  IMPORTANT!! - START  ****

# Change these variables to be partner-specific.

# The logo should be white and either a SVG or a PNG with a transparent background.
# If it's a PNG the height of the logo should be 128px (Which will then be scaled down to 64px to look crisp on retina screens)

partnerLogo = "/images/partnerlogo.png"

# filesystem path to write files to 
# This is where the partner website will be created and the routing system should be directed to.
publishDir = "public/partnername" # this should be same as public/slugname

[params]
  partnerName = "Example Name"
  partnerSlugName = "example"
  partnerSignupCode = "exampleSignupCode"
  partnerWebsite = "//www.example.com/"
  partnerContactMail = "info@example.com"
  ...

# ****  IMPORTANT!! - END  ****

  # OPTIONALLY EDIT - START

  ## Enable / Disable Sections
  enableDashboardSection = true
  enableVideoSection = false
  enableTestimonialsSection = false
  enablePaymentsSection = true
  enableSignupButton = true
    ... 

  ## Overwrite text
  ## The following text overwrites the default text located in data/text.toml
  ## It's not necessary to edit any of the following variables. Only do so if you want it different specificly for this partner.

  heroHeading = ""
  heroText = ""
  heroButtonText = ""

  introHeading = ""
  introText = ""

  dashboardHeading = ""
  dashboardSubHeading = ""
  dashboardFirstItemHeading = ""
  dashboardFirstItemText = ""
  dashboardSecondItemHeading = ""
  dashboardSecondItemText = ""
  dashboardThirdItemHeading = ""
  dashboardThirdItemText = ""

  testimonialsHeading = ""
  testimonialsSubHeading = ""
  testimonialsFirstQuoteName = ""
  testimonialsFirstQuoteText= ""
  testimonialsSecondQuoteName = ""
  testimonialsSecondQuoteText= ""
  ...</code></pre>
<p>You may have noticed at the end there that all the variables were empty. This is because in most cases we don't want to change that text between individual partner websites. Instead the default text is located in a data file in data/text.toml</p>
<p>Then in the templates there is a conditional that checks whether the variable is empty. If it isn't then it uses the variable inside the partner file rather than the default data text file. </p>
<p>For example:</p>
<pre><code>&lt;h1&gt;
  {{ if .Site.Params.heroHeading }}
    {{ .Site.Params.heroHeading }}
  {{ else }}
    {{ .Site.Data.text.heroHeading }}
  {{ end }}
&lt;/h1&gt;</code></pre>
<p>I was really impressed with Hugo and its flexibility when it comes to bending it to your will like that and use it for something it wasn't really made for. The main drawback with the way I did this is that you can't include inline links in those variables.  </p>
<p>Given the number of partners we needed to create these websites for,we created a little bash script to take care of actually generating and updating all the sites. So if we need to update the design or fix a bug only one command is need to update tens, or perhaps hundreds in the future, of websites in one go.</p>
<p>I'm happy to report that the client was extremely happy with the how things were set up and was quick to set up 15 partner websites right away.</p>]]></description>
    </item>
        <item>
      <title>FOSDEM Open Source Design videos are online</title>
      <link>https://gilli.is/notes/fosdem-open-source-design-videos-are-online</link>
      <guid>notes/fosdem-open-source-design-videos-are-online</guid>
      <pubDate>Wed, 07 Feb 2018 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>The FOSDEM Open Source Design videos are online. The presentation is a bit rough but if you have any interest in design and open source software I recommend checking them out.</p>]]></description>
    </item>
        <item>
      <title>Japan hotel</title>
      <link>https://gilli.is/notes/japan-hotel</link>
      <guid>notes/japan-hotel</guid>
      <pubDate>Wed, 07 Feb 2018 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>My wife and I have been thinking about visiting Japan and this interesting hotel just popped up in my RSS feed.</p>]]></description>
    </item>
        <item>
      <title>Theraputic motorcycle repair videos</title>
      <link>https://gilli.is/notes/motorcycle-repair</link>
      <guid>notes/motorcycle-repair</guid>
      <pubDate>Tue, 06 Feb 2018 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>Maybe it's just me but I find it very relaxing and theraputic to watch someone fix something. I also like fixing things myself and have a great interest in motorcycles. This guy I found on Youtube has a great collection of videos where he is fixing up old bikes and cars. I recommend checking out this playlist of his where he is bringing a 1971 Honda CB 350 back to life.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/3JDqXVn0T-M" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>]]></description>
    </item>
        <item>
      <title>Do's and don'ts for presentation and critique</title>
      <link>https://gilli.is/journal/do-s-and-dont-s-for-presentation-and-critique</link>
      <guid>journal/do-s-and-dont-s-for-presentation-and-critique</guid>
      <pubDate>Sun, 11 Sep 2016 00:00:00 +0000</pubDate>
      <description><![CDATA[<p><em>Design presentation can be a very delicate process, especially the initial presentations for a new project. If handled incorrectly it can cause a lot of stress for both sides, feelings can get hurt, bad morale can build and lack of progress overall.</em></p>
<p><em>I've compiled several do's and don'ts that I have found helped a lot to improve this process in my career. I will continue to refine this document as time passes.</em></p>
<h2>When presenting a design</h2>
<ul>
<li>Do start by clarifying what the goals of the design were.</li>
<li>Do give a quick overview of the design and present your arguments for the decisions you took. If it was based on data then present the data and clarify why you think the design will work with the data. </li>
<li>Do remind the client who the design is for. Its not for them, its for the users. I like to ask them to try to stay away from personal preferences on color and other trivial things. Put yourself in the mindset of an average user and focus on things that would make it easier for them to use the product.</li>
<li>Do make it clear what you still think needs more work, to avoid misunderstandings about the current state of the design. </li>
<li>Do list the items next on your to-do list.</li>
<li>Do specify how you want the comments to be made. For example by making comments on InDesign or as an issues on Github or card in trello or anthing else. Make it clear</li>
<li>Don’t bring up your credentials to win an argument. For example by stating you are a designer so you are more likely to be right. Instead focus on solid arguments preferably backed by some research.</li>
<li>Do make it clear how you believe your designs fit to the goals that were defined in the beginning</li>
</ul>
<h2>When criticising a design</h2>
<ul>
<li>Do think before you comment. Does your comment provide useful information to the designer. Unless something looks exactly like something else and/or like a penis. Then I recommend staying away from polluting the conversation with comments like “The logo reminds me of a road sign because it is circular”.</li>
<li>Do focus on constructive criticism. It is hard to do right and takes a lot of thought and good communication. So don't rush into it.</li>
<li>Do try to focus on making arguments that will improve the experience and stay away from personal preferences on color and other trivial things.</li>
<li>Put yourself in the mindset of an average user and focus on things that would make it easier for them to use the product.</li>
<li>Don't get into arguments with someone whose opinion you don't respect.</li>
<li>Do ask a lot of questions to try and understand the designers rationale if something is not clear.</li>
<li>Don’t use harsh language and say things like “Why didn’t you do..”. Instead offer suggestions for improvement in a friendly way. Design is an iterative process and a designer is not a know-it-all superhuman who is able to design the perfect design in first go.</li>
<li>Don’t claim to be the user. It’s easy to fall into the trap of thinking you are the user because x,y,z but the truth is every user is different and humans tend to be too self-centric.</li>
<li>Don’t bring up your credentials to win an argument. For example by stating you are a designer so you are more likely to be right. Instead focus on solid arguments preferably backed by some research.</li>
</ul>
<p>Overall the key to success in these matters is comminication. Being careful what you say and how you say it no matter on which side you are is my biggest recommendation.</p>
<p><strong>This list is a work in progress so I will update it as I remember more things that can help</strong></p>]]></description>
    </item>
        <item>
      <title>Selecting the last two elements with CSS</title>
      <link>https://gilli.is/journal/selecting-the-last-two-elements-with-css-or-any-child-in-relation-to-last-child</link>
      <guid>journal/selecting-the-last-two-elements-with-css-or-any-child-in-relation-to-last-child</guid>
      <pubDate>Thu, 09 Apr 2015 00:00:00 +0000</pubDate>
      <description><![CDATA[<p><code>nth-child()</code> is a very handy pseudo-selector, but sometimes you need to approach things from the other end, starting from the last item. That's where <code>nth-last-child</code> comes to the rescue.</p>
<p><code>nth-last-child</code> works pretty much the same way as <code>nth-child</code> does except it runs in relation to the last-child. </p>
<p>For instance <code>nth-last-child(odd)</code> selects every odd number starting from the very last number and counting back from there.</p>
<p>Recently however I was in a scenario where I needed to select only the last two items in a list. Thats where I had to get a little creative and came up with this solution: </p>
<p><code>li:nth-last-child(-n+2)</code></p>
<p>The &quot;-n&quot; does the magic here by flipping the counting around. So it counts down from two (which is the &quot;+2&quot; part) and stops after 1, instead of starting at 1 and counting up (and thus selecting every element in the list). </p>
<p>If you are interested in learning more about nth-last-child, <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-last-child">mozilla has some nice documentation</a> and also <a href="https://css-tricks.com/almanac/selectors/n/nth-last-child/">css-tricks.com</a></p>]]></description>
    </item>
        <item>
      <title>Creative energy</title>
      <link>https://gilli.is/journal/creative-energy</link>
      <guid>journal/creative-energy</guid>
      <pubDate>Thu, 12 Feb 2015 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>Creative energy is what you use when you are working on things that require you to use your brain to solve various tasks and problems. If you deplete your creative energy you burn out. Here are some of the things I try to have in mind to keep my creative energy up. </p>
<h2>Rest</h2>
<p>Creativity cannot be force, contradictory to what a lot of managers like to believe. Working 16 hours instead of 8 does not produce twice the results and, more likely than not, will do the opposite. It could mean that the last 8 hours will not only be a waste but also the hours you plan on putting in the day after. Exhaustion will also hinder your creative though and can cause you to be sluggish, grumpy, lazy, unfocused, <a href="#stress">stressed</a> and unproductive.</p>
<p>Rest can be anything, as long as it's not what you do all day at work. Take a break, get away from the keyboard and rest until you are ready to get back to it. Know your limits.</p>
<p>For me this is often the time when I have a great idea relating to some problem I am trying to solve. Even though I try not to think too much about work when I am resting. </p>
<p>But when I am exhausted that never happens. If I push myself too much and deplete my creative energy then I am pretty much done for. I won't have a sudden idea pop into my head and the quality of work I produce is lacking. I make mistakes and I am unfocused.</p>
<p>So put yourself first and go get some rest!</p>
<h2>Focus</h2>
<p>Focus is extremely important in the creative industry and if any manager wants their team to be productive, they should do whatever they can to enable focus for themselves and their team. </p>
<h3>Focus on the goal</h3>
<ul>
<li>Before starting a new project give time to think it over and plan it properly. Don't rush yourself, take the time you need to be confident that you are on the right path. </li>
<li>Do your best to kill bad ideas.</li>
<li>Don't get sidetracked by <a href="http://en.wiktionary.org/wiki/bikeshedding">unimportant details</a>.</li>
<li>Don't be afraid to throw away features that have been developed, if you see that they distract you from the real goal.</li>
<li>Don't attach your ego to your work.</li>
</ul>
<h3>Focus on your task</h3>
<p><strong>Avoid interruptions</strong>. Interruptions really hinder productivity. It takes a lot of time to get back that focus you lose when you are interrupted. Be it by a person, a device or anything else. Losing focus eats away at your creative energy.</p>
<p><strong>Stop multitasking</strong>. People have come to believe that if you are not doing 10 things at once then you can't possibly be productive. It's true that many things happen but it is very unlikely they are of much quality and most definitely don't happen in less time. <a href="http://www.developertea.com/episodes/6528">this podcast</a> has a really good experiment to demonstrate how multitasking takes longer, I suggest you give it a listen.</p>
<p>Instead of multitasking try <a href="http://focusmanifesto.com/single-tasking/">single tasking</a>. By single tasking your way through one thing at a time you are able to focus and be extremely effective. Your results will be of better quality because you're able to see everything more clearly and notice problems earlier.</p>
<p><strong>Noise</strong> is a lot <a href="http://blog.ted.com/2013/04/24/9-ways-that-sound-affects-our-health-wellbeing-and-productivity/">more damaging</a> than most people think. To be truly able to focus you need to be able to control your environment in a way that reduces any background noise and conversations happening around you. </p>
<h2>Think</h2>
<p>Put away your tools, find yourself a quiet place and give yourself time to simply think. This can often look to others and even yourself like you are not being productive, because you are not sitting by your computer and hammering away at your keyboard. But believe me it is one of the most productive things you can do. Her are a few things you can think about:</p>
<ul>
<li>All the assumptions you made and if there might be a better way.</li>
<li>If you are using your time in an effective way.</li>
<li>If you can somehow improve the flow of information between you and your team so that everybody will be on the same page. </li>
<li>And countless other things that help you to be more effective.</li>
</ul>
<p><strong>Learn from your mistakes.</strong> After a project make time to think what could have gone better.</p>
<ul>
<li>Did you waste too much time pondering minor details.</li>
<li>Were things not planned or designed well enough before starting </li>
<li>Were you lacking essential tools needed for the project? </li>
</ul>
<h2>Stress</h2>
<p>It can be hard to produce great results when you are under a lot of stress. Often stress is caused by unnecessary factors relating to the things I have mentioned in this post, like bad morale, lack of focus, exhaustion and also <a href="http://www.extremeprogramming.org/rules/overtime.html">unsustainable pace</a>. To reduce stress:</p>
<ul>
<li>Put yourself and your family first. Family emergency trumps company emergency.</li>
<li><a href="#rest">Rest</a>.</li>
<li><a href="#focus">Focus</a>.</li>
<li><a href="#morale">Keep up good morale</a>.</li>
<li>Plan ahead.</li>
<li>Be realistic about deadlines, don't promise what you can't deliver. Personally I double my assumptions to make room for error.</li>
</ul>
<h2>Morale</h2>
<p>Without good morale you and your team are likely to end up frustrating each other and depleting each others creative energy. Working with people you like and get along with is probably one of the biggest boosts in productivity you can find. I don't think this can be said enough. Here are some tips to help it improve:</p>
<ul>
<li>Give constructive criticism and be ready to accept it.</li>
<li>Put yourself in others shoes.</li>
<li>Show <a href="http://rocketsalad.net/appreciation-is-not-a-rocket-science-2/">appreciation</a></li>
<li>Listen well before speaking out.</li>
<li>Don't be passive aggressive.</li>
</ul>
<p>The key to good morale is good communication. </p>
<p>These are the tips I can think of right now to keep up your creative energy and overall productivity. I decided to write them all down so that I can look them over once in a while and see if I am doing everything I can to keep my creative energy up. I will be editing this post later on when I remember and learn more.</p>]]></description>
    </item>
        <item>
      <title>Sarpurinn</title>
      <link>https://gilli.is/projects/sarpurinn</link>
      <guid>projects/sarpurinn</guid>
      <pubDate>Thu, 29 Jan 2015 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>Like I mentioned in that study the usage of Sarpurinn follows our linear tv and radio broadcasts closely. Users want to catch-up on shows they missed while on air. However the main difference between this and the website is that live streams are also are obvious and easily accessible in the app, while on the website the each station got their own brand pages where the live streams reside.</p>
<figure><img src="https://gilli.is/content/3-projects/6-sarpurinn/sarpurinn-example-1-main.jpg" alt=""></figure>
<h2>Beautifully simple to use</h2>
<p>When opening the app you are fronted with a list of all the channels RÚV has to offer split into two buttons for each. The left one directing you to the tv-schedule where you can find shows in the order they were broadcasted. And on the right side a button to go straight to the live streams for each channel. You will also find a special kids section at the bottom as well as the play queue and favorites.</p>
<figure><img src="https://gilli.is/content/3-projects/6-sarpurinn/Sarps-app-Forsida-Tablet-3-2.jpg" alt=""></figure>
<p>Once on the tv-schedule page you can easily switch days at the top or scroll down to search for your show. Easy access and simplicity were at the forefront when designing the app. Let the user get to his content the quickest way possible and stay out of his way.</p>
<figure><img src="https://gilli.is/content/3-projects/6-sarpurinn/sarpurinn-example-2-schedule.jpg" alt=""></figure>
<h2>Krakkasarpurinn - A lockable section for kids</h2>
<figure><img src="https://gilli.is/content/3-projects/6-sarpurinn/Sarpurinn-example-3-krakkasarpurinn.jpg" alt=""></figure>
<p>We also made a special kids section called &quot;Krakkasarpurinn&quot; which can be locked, in case you only use the app for your kid and don't want him to wander around the app and potentially see some content not meant for kids. The dark look was also switched out for a brighter more kid friendly look. We wanted to serve the kids especially since they are the power users of iPads these days. In Krakkasarpurinn the shows are categorized by each series instead of dates so that they can go straight to their favorite show and watch &quot;ALL OF IT&quot; for hours on end (<em>Note:</em> this actually has not been implemented yet but will be soon).</p>
<h2>Play queue and Favorites</h2>
<p>Any episode can be added to a special play queue in order to build a list of things to watch later or binge watch, without having to find each episode after the other.</p>
<p>For quick access you can also add shows to favorites and easily find them again, in case you only follow a certain shows that you repeatedly come back for.</p>
<h2>Great demands met</h2>
<p>There had been a great demand for us to make an app, after all RÚV is the largest broadcaster in Iceland, and so far the receptions have been very good. The major complaints we have received are regarding Chromecast support, which is planned for the next release. It was even nominated as the <a href="http://www.svef.is/frett/item4901/Vefir_%C3%AD_%C3%BArslitum_vefver%C3%B0launanna/">best app of Iceland</a> in 2014</p>]]></description>
    </item>
        <item>
      <title>remoteStorage</title>
      <link>https://gilli.is/projects/remotestorage</link>
      <guid>projects/remotestorage</guid>
      <pubDate>Wed, 21 Jan 2015 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>I was approached by Sebastian from <a href="https://5apps.com">5apps</a> to redesign a widget for RemoteStorage that was in need of an overhaul.</p>
<p>The widget can be added to apps that want to give users the ability to connect to their own RemoteStorage. The user simply enters their special RemoteStorage address which looks like an e-mail address and syncs up.</p>
<p>They were in the process of enabling Dropbox and Google Drive integration so users didn't necessarily have to connect to a RemoteStorage backend. Thus making it more easily usable to those who already have Dropbox and Google Drive.</p>
<p>But the old design of the widget couldn't easily accommodate these changes so 5apps decided to sponsor an redesign and improve the UX.</p>
<h2>Results</h2>
<p>This project was smaller and more specific than my usual projects. But fun and demanding nonetheless.</p>
<p>I went through a lot of sketches and iterations through the process trying to make it as smooth and frictionless as possible. I'm happy with the results and, better yet, the <a href="https://github.com/remotestorage/remotestorage.js/issues/795#issuecomment-93741581">client was very happy</a> with it as well.</p>
<p>At first the widget looks like this. Simple call to action in one of the corners.</p>
<figure><img src="https://gilli.is/content/3-projects/8-remotestorage/1-connect-remote-storage.png" alt=""></figure>
<p>Click on it and you are greeted with a short introduction and a link to read more. Below that are your storage options, <em>RemoteStorage</em>, <em>Dropbox</em> and <em>Google Drive</em>.</p>
<figure><img src="https://gilli.is/content/3-projects/8-remotestorage/2-choose-storage.png" alt=""></figure>
<p>If you click on the <em>RemoteStorage</em> option you are given a login screen where you enter your <em>storage address</em>. The other options require you to authenticate through those providers.</p>
<figure><img src="https://gilli.is/content/3-projects/8-remotestorage/3-sign-in.png" alt=""></figure>
<p>After connecting to your remote storage, you have your address displayed along with a timestamp from the last time your data was synced. And then two buttons, one to sync and one to logout. (I later changed that logout button to a power button)</p>
<figure><img src="https://gilli.is/content/3-projects/8-remotestorage/4-connected-via-rs.png" alt=""></figure>
<p>Once you get back to working on your app the bubble disappears and only a little RemoteStorage icon sits behind. <em>Sidenote: that <a href="https://github.com/remotestorage/design/issues/3">logo has been redesigned</a> as well.</em></p>
<figure><img src="https://gilli.is/content/3-projects/8-remotestorage/6-logo-only.png" alt=""></figure>
<p>Finally here is a little gif to showcase the interaction with the app.</p>
<figure><img src="https://gilli.is/content/3-projects/8-remotestorage/rs-interaction-5.gif" alt=""></figure>
<p>It was a pleasure working on <a href="http://axe.is/syncthing">another open source</a> project. Overall I think we are seeing an increasing demand for design in open source projects. Project owners are waking up and designers are forming groups.</p>
<p><a href="http://opensourcedesign.net">Open Source Design</a> is one of those groups who I am a proud member of. I met Sebastian there and got the lead for this project. I encourage any designers interested in open source to join us and help contribute to a more open world.</p>]]></description>
    </item>
        <item>
      <title>R&#218;V</title>
      <link>https://gilli.is/projects/ruv</link>
      <guid>projects/ruv</guid>
      <pubDate>Wed, 21 Jan 2015 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>The website <a href="http://ruv.is">ruv.is</a> was in need of a major overhaul. The design was dated, slow, not responsive and people had difficulty finding what they were after. Since we were planning a redesign we decided to do a complete rebuild as well because it was running on Drupal 6 and support would soon end for it. It would give us a chance to reorganize things and make it simpler to maintain for the small team running it.</p>
<h2>Research, discovery and design</h2>
<p>Once I got acquainted with the company and team I started to get to know our users by using analytics and speaking to them in person. I wanted to find out how they were currently using our site and what problems they were faced with. I found out that majority of our users think of RÚV as their own, since it is publicly owned, and feel very passionately about it. But most of all I found out that they came to ruv.is with a very specific goal in mind, majority of which split into three groups:</p>
<ul>
<li>Check the headlines and read the latest news.</li>
<li>Watch and listen to live streams for our tv and radio channels.</li>
<li>Watch and listen to recordings from our tv and radio channels in Sarpurinn, our media portal.</li>
</ul>
<p>It was abundantly clear that if they came with one of these three goals in mind they were usually not very interested in any of the other ones.</p>
<p>It was also clear that we needed to do more to show our users relevant content to keep them engaged the site. Our bounce rate was quite high, around 50%, although this is not unusual for a big news website like this.</p>
<p>But most of all we needed to make the user experience simpler and the interface more consistent. We also needed make it easier to maintain for the small team working on it. This meant creating a style guide and a more modular approach to how it was all built.</p>
<h2>The news</h2>
<p>Vast majority of the users come to the front page looking for news. Once there they check a couple of articles and leave. Our user testing told us that people felt that the front page was updated rarely and the same articles lingered there all day. This was something we already suspected so it confirmed our assumptions. The main headlines didn't get much space and the rest of the page only showed a couple of articles from each category of the site, some of which were not actively updated. So even though there were hundreds of articles being published each day it didn't feel like it to the user.</p>
<p>We decided to give the main headlines a lot of space on top with a big collage consisting of 9 of the latest headlines that our news reported wanted to feature.</p>
<figure><img src="https://gilli.is/content/3-projects/5-ruv/ruv-example-1-hladbord.jpg" alt=""></figure>
<p>And below it a continuous scroll of all the latest news, similar to <a href="http://qz.com/">Quartz</a> and Facebook. This would allow the user to see the latest news as soon as they were available and then scroll down as long as they were interested. They could also filter this feed based on their interests. Here is how it looks like.</p>
<figure><img src="https://gilli.is/content/3-projects/5-ruv/ruv-example-2-newsfeed.jpg" alt=""></figure>
<p>There it is in all its glory with advertisements for our own content, since it is illegal for us to put commercial advertisements on our web, and real content from various stakeholders and departments.</p>
<figure><img src="https://gilli.is/content/3-projects/5-ruv/ruv-example-4-article.jpg" alt=""></figure>
<p>Clicking on any of the articles opens them in place. Allowing the user to quickly read it and then continue down the stream to find other interesting articles.</p>
<h2>Sarpurinn, the media portal</h2>
<p>For those of you who know the BBC iPlayer, Sarpurinn serves the same purpose. It is a internet tv and radio service that makes the shows previously broadcasted on our tv and radio channels available online, only a few minutes after the shows broadcast ends.</p>
<figure><img src="https://gilli.is/content/3-projects/5-ruv/ruv-example-3-sarpurinn-front.jpg" alt=""></figure>
<p>We did a lot of research for it and found out that most users who came to Sarpurinn would end up going out of it to our tv-schedule page and follow the links there back to a specific show in Sarpurinn. This was because they already knew what they wanted to watch, something that had already been on tv earlier that day or the day before. Rarely would they ever just come there to find &quot;something&quot;. With this in mind it was clear that we should focus on making the linear tv and radio schedules available right at the start once you arrive in Sarpurinn. So we came up with this:</p>
<p>The linear schedule is the first thing you see on the left, making it easy to find your show according in the schedule without having to leave the front page of Sarpurinn.</p>
<p>Right next to it is the latest content that just became available, in case you are there for the show you just missed on tv.</p>
<p>Below it we added a powerful search feature where you can either simply type the name of the show you are after. Or click on the first letter that the show begins with. But by default it continues to show the user more of the latest episodes.</p>
<p>I also designed the apps for <a href="/sarpurinn">iOS and Android</a> based on this research, although slightly simpler in usage and focus entirely on the tv-schedule.</p>
<h2>Building a framework for Drupal is not easy</h2>
<p>I created a modular CSS &quot;framework&quot; that enables us, who were building the web, to quickly style the features we are building, one element at a time. For example to make a white box with a gray border you would simply add the classes &quot;.fill-white&quot; and &quot;.border&quot;. Pretty straight forward. However since it's built with Drupal that means you don't necessarily have access to place classes on all the elements that you would want. For example, we use Panels and a pane is output like this:</p>
<figure><img src="https://gilli.is/content/3-projects/5-ruv/ruv-example-5-code.jpg" alt=""></figure>
<p>In the settings I can only set classes on the &quot;section&quot; tag. Which means the modular CSS had to account for this and kind of ruined the whole modular approach in a way. Because I had to account for every instance where we would not have direct access to every tag we wanted. This complicated things a lot but since we had simplification and reusable elements in mind when designing the website, I still managed to account for most of these cases pretty nicely, but I would have loved more control over the HTML.</p>
<p>Building a modular front end for Drupal is no simple task and I often wonder if this is the best way to do it when it comes to Drupal.</p>
<h2>Conclusion</h2>
<p>Overall this was a very exciting project from which I learned a great deal about users, Drupal and working with the same team for years. Our preliminary results, based on our <a href="http://beta.ruv.is">open beta</a>, indicate good things, although there are a lot of things yet to be fine tuned and tested.</p>]]></description>
    </item>
        <item>
      <title>My problem with responsive images</title>
      <link>https://gilli.is/journal/my-problem-with-responsive-images-and-an-idea-to-improve-them</link>
      <guid>journal/my-problem-with-responsive-images-and-an-idea-to-improve-them</guid>
      <pubDate>Wed, 15 Jan 2014 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>Currently responsive images work by checking the window width and giving you the corresponding image based on that width. Which is fine when you have an image that fills out the widest width possible, like those big hero images, but that's not always the case.</p>
<p>In my experience I often need a larger image when the window size is smaller. For example if you have four images side by side across the screen, it would look something like this: </p>
<figure><img src="https://gilli.is/content/4-journal/11-my-problem-with-responsive-images-and-an-idea-to-improve-them/1x4.jpg" alt="images in a 1x4 layout"></figure>
<p>But as you reduce the screen size the images might get to small to be side by side like that. So you decide to change the layout of them to 2x2, like this:</p>
<figure><img src="https://gilli.is/content/4-journal/11-my-problem-with-responsive-images-and-an-idea-to-improve-them/2x2.jpg" alt="Images in a 2x2 layout"></figure>
<p>Notice how the images are actually a quite bigger than they were in the beginning.</p>
<h2>My idea on how to improve it</h2>
<p>I think it would be optimal if the browser would simply check the size of the image container (the tag wrapped around the image). If the image container is small then get a small image. If the image container is big then get a big image. All you had to do would be to supply the different image sizes and make the browser aware of where to get them. </p>
<p>This would make it trivial to add images anywhere without having to think about how the window size will affect the image, whether it will get bigger or smaller, for each and every one. And also if you suddenly decide to change the layout, you don't have to specify the sizes of the images all over again.</p>
<p>After all, images account for <a href="http://httparchive.org/interesting.php#bytesperpage">sixty two percent</a> of the data we send over to the clients and I just want to send the smallest possible amount of data whenever I can, no matter if the client is using a desktop, tablet or mobile.</p>
<p>However the problem with my solution is that we can't exactly expect the browsers to delay choosing the images until the HTML, CSS and Javascript has all finished loading can we? We could possibly though load the smallest one by default and then lazyload the rest.</p>]]></description>
    </item>
        <item>
      <title>Out-of-stock badge for Drupal Commerce</title>
      <link>https://gilli.is/journal/how-to-create-an-out-of-stock-badge-for-drupal-commerce</link>
      <guid>journal/how-to-create-an-out-of-stock-badge-for-drupal-commerce</guid>
      <pubDate>Thu, 10 Jan 2013 00:00:00 +0000</pubDate>
      <description><![CDATA[<p><strong><em>In this tutorial I will show how to create an out of stock badge for Drupal Commerce (Or Commerce Kickstart to be specific) using a simple rule, the add to cart form and some CSS. If you are currently using the add to cart form in the product list this tutorial might not work for you.</em></strong></p>
<figure><img src="https://gilli.is/content/4-journal/10-how-to-create-an-out-of-stock-badge-for-drupal-commerce/sold-out-1.jpg" alt="Sold out"></figure>
<p>I remember setting up a clothing store using Ubercart a couple of years ago, and the most frustrating thing about it for me was that there was no way to show an out of stock badge for products with attributes. You had to click on the product and choose the attribute you wanted, only to find out that the product was out of stock. This seems like a really bad user experience and would probably cause the user to become frustrated and leave, causing you to lose a potential customer.</p>
<p>Now I am working on another clothing store and decided to go with Drupal Commerce, unfortunately I faced with the same problem again and couldn't find any way to display an out of stock badge for products with attributes. However this time I managed to create my own out of stock badge due to the enormous flexibility of Drupal Commerce using Rules and a little bit of CSS hacking.</p>
<h2>Getting started</h2>
<p>First of all you are going to need the following:</p>
<ul>
<li><a href="https://www.drupal.org/project/commerce">Drupal Commerce</a></li>
<li><a href="https://www.drupal.org/project/commerce_stock">Commerce Stock</a></li>
<li><a href="https://www.drupal.org/project/rules">Rules</a></li>
</ul>
<p>Once you have made sure you have these requirements we can continue. I am using Commerce Kickstart in order to give me a good starting point so there might be some requirements that I am forgetting, but basically I think these 3 modules are all you need.</p>
<p>The key ingredient</p>
<p>Here is the magic rule that you will have to import (admin/config/workflow/rules/reaction/import):</p>
<pre><code>{ "rules_out_of_stock" : {
    "LABEL" : "Out of Stock",
    "PLUGIN" : "reaction rule",
    "REQUIRES" : [ "rules", "entity" ],
    "ON" : [ "commerce_product_presave" ],
    "IF" : [
      { "entity_is_of_type" : { "entity" : [ "commerce-product" ], "type" : "commerce_product" } },
      { "data_is" : { "data" : [ "commerce-product:commerce-stock" ], "value" : "0" } }
    ],
    "DO" : [
      { "data_set" : { "data" : [ "commerce-product:status" ], "value" : 0 } }
    ]
  }
}

</code></pre>
<p>This rule is the courtesy of akalata and was found <a href="http://drupal.org/node/1689458#comment-6619434">here</a></p>
<p>When enabled, this rule will disable product variations that are out of stock. So let's say you have a sweater with 3 different sizes: &quot;Small&quot;, &quot;Medium&quot; and &quot;Large&quot;. Once one of them reaches 0 in stock, the rule will disable that variation leaving only Medium and Large to choose from. So when the last available size runs out of stock the add to cart button will say: &quot;Product not available&quot;</p>
<p>Another rule found on the same page and created by <a href="https://www.drupal.org/node/1689458#comment-6761182">kirie</a> is also pretty useful alongside this one since it enables the variation again once it is back in stock. Just in case you forget to enable it when adding more stock:</p>
<pre><code> { "rules_stock_enable_product_when_back_in_stock" : {
    "LABEL" : "Stock: enable product when back in stock",
    "PLUGIN" : "reaction rule",
    "TAGS" : [ "Emoda" ],
    "REQUIRES" : [ "rules", "entity" ],
    "ON" : [ "commerce_product_presave" ],
    "IF" : [
      { "entity_is_of_type" : { "entity" : [ "commerce-product" ], "type" : "commerce_product" } },
      { "data_is" : {
          "data" : [ "commerce-product:commerce-stock" ], "op" : "\u003E", "value" : "0"
        }
      }
    ],
    "DO" : [
      { "data_set" : { "data" : [ "commerce-product:status" ], "value" : 1 } }
    ]
  }
}
</code></pre>
<h2>The Add to cart form</h2>
<p>In it's current form the rule is already providing better UX because it causes the variations that are out of stock to disappear from the select list so users don't have to select it on it only to find out that it is out of stock, because it simply isn't there anymore.</p>
<p>So now that we have the rule implemented it is time to make the add to cart badge show up on the product list's so that we can implement the CSS hack and manipulate it to serve as a out of stock badge.</p>
<p>Start by going to &quot;admin/structure/types&quot; and click &quot;Manage Display&quot; for the variation type you want to create the badge for. Next click on &quot;Product list&quot; and find either &quot;Product&quot; or &quot;Product variations&quot; in the list and click on the select list for it's format and choose &quot;Add to Cart form&quot;. Finally move the field so that it is positioned right below the product image.</p>
<p>Now save and check your product list. The add to cart form should now be visible below the product image like in the example image here to the right, although most likely it doesn't look very pretty.</p>
<figure><img src="https://gilli.is/content/4-journal/10-how-to-create-an-out-of-stock-badge-for-drupal-commerce/add-to-cart.jpg" alt="Image saying &quot;products not available"></figure>
<h2>The CSS Trickery</h2>
<p>Now that we have the add to cart form there we can begin hacking it to serve as a out of stock badge. You will have to add some CSS into your theme in order to hide the add-to-cart form when the product is in stock and only display it when out of stock.</p>
<p>Add the following code to the bottom of your themes stylesheet: (NOTE: If you are not using Commerce Kickstart the following code might not work for you, however you should be able to figure out what is going on and implement it yourself, given that you know some CSS)</p>
<pre><code>.view-collection-products .field-type-commerce-product-reference {
padding: 0;
margin: 0;
}
.view-collection-products .field-type-commerce-product-reference form.commerce-add-to-cart .form-submit.form-button-disabled {
margin: 0;
margin-top: -120px;
background: #FF4747;
text-align: center;
width: 100%;
padding: 10px 0 10px 0;
-moz-border-radius: 0;
-webkit-border-radius: 0;
-khtml-border-radius: 0;
border-radius: 0;
}
.view-collection-products .field-type-commerce-product-reference form.commerce-add-to-cart {
padding: 0;
height: 1px;
}
.view-collection-products .commerce-add-to-cart.in-stock {
display: none;
}
</code></pre>
<figure><img src="https://gilli.is/content/4-journal/10-how-to-create-an-out-of-stock-badge-for-drupal-commerce/complete.jpg" alt="Image showing a product that is sold out"></figure>
<p>That's it! Now your products in the product list should look something like the image here to the right. However the text still says &quot;Product not available&quot;. So all you have to do is change that to &quot;Out of stock&quot; or something like that, which I did it quickly using the Locale module since the website I was working on was in Icelandic anyway.</p>
<p>Now if you are using Commerce Kickstart you might want to use these styles as well since it will create the badge on the &quot;All Products&quot; page as well.</p>
<pre><code>.page-products .field-type-commerce-product-reference {
padding: 0;
margin: 0;
}
.page-products .field-type-commerce-product-reference form.commerce-add-to-cart .form-submit.form-button-disabled {
margin: 0;
margin-top: -120px;
background: #FF4747;
text-align: center;
width: 100%;
padding: 10px 0 10px 0;
-moz-border-radius: 0;
-webkit-border-radius: 0;
-khtml-border-radius: 0;
border-radius: 0;
}
.page-products .field-type-commerce-product-reference form.commerce-add-to-cart {
padding: 0;
height: 1px;
}
.page-products .commerce-add-to-cart.in-stock {
display: none;
}
</code></pre>
<p>This is the first tutorial I create so I would love some feedback and stories from people who try this out. Shoot me a message on <a href="http://twitter.com/gillisig">twitter</a> if you have any.</p>]]></description>
    </item>
        <item>
      <title>Syncthing</title>
      <link>https://gilli.is/projects/syncthing</link>
      <guid>projects/syncthing</guid>
      <pubDate></pubDate>
      <description><![CDATA[<p><a href="http://syncthing.net">Syncthing</a> is an open source tool that syncs your data directly between your devices, without needing to go through any third party.</p>
<h2>Getting started</h2>
<p>When I first started using Syncthing I got rather confused. It is fundamentally a simple product, each of your devices has a unique ID that you use to connect them. Then you create folders and share them with the other devices. Simple.</p>
<p>But some usability issues caused it to be rather unfriendly to new users, there was a lot of information and settings to adjust. I like to call information overload like that &quot;nerd-porn&quot;. It consist of showing a lot of information and settings that only nerds like and consider useful.</p>
<p>But for a normal user it is the opposite of useful.  It gets in their way and confuses them because it requires them to get intimately familiar with the product before being able to use it. And as a result deters them from using the product, because most people, myself included, simply don't have the time for that.</p>
<p>But in this case I stuck around and found it to be a very powerful product.</p>
<figure><img src="https://gilli.is/content/3-projects/7-syncthing/Syncthing-example-1.jpg" alt=""></figure>
<h2>Problems</h2>
<p>One of the main problems for a new user was knowing where to start. There was no clear indication how you go about connecting to other devices and starting to sync your files. After all most people just want to set it and forget it.</p>
<p>The folders and devices also looked exactly the same. There was no clear differentiation between the two, so you were forced to read, figure it out, and then remember it. This was something I kept forgetting myself so I had to spend some time to remind myself which side was which, especially when I hadn't opened up the UI for a while.</p>
<p>Information overload was another problem like I mentioned earlier. For a normal user all this information is not required when you just want a quick overview of your setup. Extra information like <em>Folder Path</em>, <em>IP address</em>, <em>Version</em>, <em>Last File received</em>, etc.., belongs on its own page after you specifically ask for it.</p>
<p>These problems got me excited to get started in simplifying it all so I headed off and started sketching out some ideas in my notebook.</p>
<h2>The initial design</h2>
<figure><img src="https://gilli.is/content/3-projects/7-syncthing/Syncthing-main-1.png" alt=""></figure>
<p>What I came up with looked like this. With information relating to the local device up top, consisting of the name, traffic, RAM and CPU usage (which probably won't be relevant as the product matures) and the number of connected <em>Global Discovery</em> servers, which help you find your other devices. And then right next to it notifications and settings buttons.</p>
<p>Below the area was split up into two parts. On the right side, folders along with useful information. And on the left side connected devices along with only the up and down traffic.</p>
<h3>Folders</h3>
<p>I thought it would make sense to have the folder represent the way you are used to viewing folders. In a kind of a table. Making a clear differentiation between folders and devices. I stripped away a lot of the information relating to each folder. And left only what would help the user get a brief overview of the status. The columns consisted of <em>Name</em>, <em>Size</em>, <em>Status</em>, <em>Devices</em> and <em>Actions</em></p>
<figure><img src="https://gilli.is/content/3-projects/7-syncthing/Syncthing-folders.png" alt=""></figure>
<h4>Name</h4>
<p>Because folders need names ;)</p>
<h4>Size and Status</h4>
<p>Before there was a <em>Global state</em> and <em>Local State</em> each followed by the count of items in the folder and the size of the folders. I felt that this was mostly nerd-porn and would confuse most users.</p>
<p>So I reduced it to <em>Size</em> which represents size of the folder on the current device. That allows you to quickly see the size of the folder, and combined with the <em>Status</em> column shows you whether it is in sync with the rest of the devices.</p>
<p>However if you want to see the Global size, you can hover over the size column and a popup will appear with the global size.</p>
<figure><img src="https://gilli.is/content/3-projects/7-syncthing/Syncthing-size-hover.png" alt=""></figure>
<h4>Devices</h4>
<p>The devices column consist of the <a href="https://en.wikipedia.org/wiki/Identicon">identicons</a> that were already in use in the old design. Combined with a color representing the syncing state of that device. <em>Green</em> means that the device is in sync. <em>Yellow</em> means that the device is syncing. And <em>Red</em> means the device is offline. Finally, hovering over the icon reveals the device name.</p>
<p>I never felt fully convinced that this way was the best way to represent devices and I think most likely it will be revisited in the future. The problem is that requiring a hover to see the name is not optimal. But then again in most cases you probably just want to know whether all devices are up to sync or if some of them are syncing. I think getting it out there and letting people use it is the best way to find out if that is the case or not.</p>
<h4>Actions</h4>
<p>Finally the <em>Actions</em> column has a button to rescan the folder and thus force it to update itself if needed. And an edit button which allows you to make changes to the folder settings.</p>
<figure><img src="https://gilli.is/content/3-projects/7-syncthing/Syncthing-folder-edit.png" alt=""></figure>
<h3>Devices</h3>
<p>I wanted the devices to be simple and easy to understand. Just add a device link it with a folder. Initially they were next to the folders with a colored identicon representing their state and up and down traffic displayed right beneath them.</p>
<p>However it then occurred to me that we could simplify it even further since the state is already displayed in the folder section and the traffic is not actually that useful. So I took it a step further and removed the devices section. But added a button to add devices in the <em>Actions</em> column.</p>
<figure><img src="https://gilli.is/content/3-projects/7-syncthing/Syncthing-main-alternative.png" alt=""></figure>
<figure><img src="https://gilli.is/content/3-projects/7-syncthing/Syncthing-alternative-add-device.png" alt=""></figure>
<h2>More work to be done</h2>
<p>There is still <a href="https://github.com/syncthing/syncthing/pull/2425">a lot of work</a> left to be done. If you want to get involved and help out with the project. Reach out and get started.</p>
<p><strong>Stay tuned for more articles where I will cover working with the community, iterations and development.</strong></p>]]></description>
    </item>
    
  </channel>
</rss>