<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ interaction design - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ interaction design - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sat, 23 May 2026 22:21:25 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/tag/interaction-design/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ A Spacial Model for Lossless Web Navigation ]]>
                </title>
                <description>
                    <![CDATA[ By Patryk Adaś In my last post I described the concept of navigation trails as an evolution of the standard tabbed browsing model. As a part of the Browser.html project, I’m working on a spatial model through various user interactions and animations.... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/lossless-web-navigation-spatial-model-37f83438201d/</link>
                <guid isPermaLink="false">66c35ab339357f94469765dd</guid>
                
                    <category>
                        <![CDATA[ Design ]]>
                    </category>
                
                    <category>
                        <![CDATA[ interaction design ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Product Design ]]>
                    </category>
                
                    <category>
                        <![CDATA[ UX ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Design ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Wed, 29 Mar 2017 20:07:23 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*o68S8d3Ui0YaNEftvhqGcg.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Patryk Adaś</p>
<p>In <a target="_blank" href="https://medium.freecodecamp.com/lossless-web-navigation-with-trails-9cd48c0abb56">my last post</a> I described the concept of navigation trails as an evolution of the standard tabbed browsing model.</p>
<p>As a part of the <a target="_blank" href="https://github.com/browserhtml">Browser.html</a> project, I’m working on a spatial model through various user interactions and animations. This should help users better understand what’s going on and how to navigate the web most effectively.</p>
<p><strong>Users have developed certain behaviors and expectations we want to build upon. Instead of replacing existing workflows, we want to enhance them.</strong></p>
<h3 id="heading-horizontal-movement-going-back-forward">Horizontal movement — going back / forward</h3>
<p><img src="https://cdn-media-1.freecodecamp.org/images/3ESNwAoCmMrfM0qpFBakdOXbVguqT1EcZT9Z" alt="Image" width="700" height="436" loading="lazy"></p>
<p>When you rewinding a cassette or use a video editing tool, one common interaction model is horizontal movement along a timeline. Browsers use this approach to allow users to go back in their navigation history. But this only allows going backward a single history entry at a time. Shortcuts exist, but they don’t allow <em>previewing</em> past pages.</p>
<p>Even with conventionally lossy navigation history, it’s common to have multiple entries to go backward or forward. Introducing trails will only increase the number of entries.</p>
<p><strong>We want users to select an arbitrary point in the timeline using familiar interactions.</strong></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/AZ6wT4exYyrD-Q2hHnj3va1k7MybmOEjIgpW" alt="Image" width="800" height="600" loading="lazy">
_[Youtube](https://youtu.be/reMbtUWeias" rel="noopener" target="<em>blank" title=")</em></p>
<p>In our design, a light pull (swipe) from the left allows the user to take a peek at the last history entry. Pulling further unfolds the full trail and reveals the entire history, allowing the user to return to an arbitrary point by releasing on a site.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/BCVBeORK3UEPK6dA4jGaublELpGNagsjmzZt" alt="Image" width="800" height="600" loading="lazy">
_[Youtube](https://youtu.be/6e0cGYHJoDQ" rel="noopener" target="<em>blank" title=")</em></p>
<p>Pulling past all of the entries switches to a trails overview, as we assume the user wanted to switch to a different website.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/QfsKjte08TArlZjzpYnPNvCBH87cHwRJH3IL" alt="Image" width="800" height="600" loading="lazy">
_[Youtube](https://youtu.be/uVRWfjceDDg" rel="noopener" target="<em>blank" title=")</em></p>
<p><strong>We want to provide visual clues at the earliest stage of building a trail.</strong> A new website will push the current page to the left, becoming the first in line.</p>
<h3 id="heading-vertical-movement-switching-trail">Vertical movement — switching trail</h3>
<p><img src="https://cdn-media-1.freecodecamp.org/images/2Puh8Ovp-yFr8PjmeRIy1-U25sZ41VpMNfZ4" alt="Image" width="700" height="388" loading="lazy"></p>
<p>Mainstream desktop browsers end up overloading the horizontal axis as a way of switching tabs. In contrast, mobile browsers use vertical space for this purpose.</p>
<p>This aligns with long-standing use of vertical ordering in catalogues and as a natural way of arranging todo items.</p>
<p>The average person tends to have either less than eight tabs open, or to add tabs without organization until declaring “tab bankruptcy” and starting fresh.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/LxH8tZ2WpsdMwp8LdJU3mBvEuO35KEE0CurF" alt="Image" width="800" height="600" loading="lazy">
_[Youtube](https://youtu.be/QH1sOQXvH-k" rel="noopener" target="<em>blank" title=")</em></p>
<p>Opening link in the background creates a trail that slides below the currently featured page, once again providing a clue of where new trails end up spatially.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/ZAHOVFdw3s-FdRczvRoFtCFEIg1OtTtO1AQz" alt="Image" width="800" height="600" loading="lazy">
_[Youtube](https://youtu.be/3NxlriMTNnY" rel="noopener" target="<em>blank" title=")</em></p>
<p>The bottom of a page is a natural place to provide easy access to the next trail, which is conveniently accessed by scrolling past the end of the page.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/Cq-Xk3IPFrRl9WMjB-IIAmBxXRXKt3jZwYqt" alt="Image" width="800" height="600" loading="lazy">
_[Youtube](https://youtu.be/AWpbnV41zUE" rel="noopener" target="<em>blank" title=")</em></p>
<p>In order for the mental model to work it needs to be applied to all views. The trails overview allows navigation within trails using the same horizontal gestures shown earlier and switching trails using vertical gestures. It provides a navigational map with access to all trails taken while pursuing a specific topic.</p>
<h3 id="heading-join-us">Join us!</h3>
<p>We’re currently working on building our first working prototype. If this sounds like fun to you, please check out the <a target="_blank" href="https://github.com/browserhtml/browserhtml">Browser.html</a> project! You can find our list of <a target="_blank" href="https://github.com/browserhtml/browserhtml/issues">open issues</a> on GitHub, or come chat with us on our <a target="_blank" href="https://browserhtml-slackin.herokuapp.com/">Slack</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Lossless Web Navigation with Trails ]]>
                </title>
                <description>
                    <![CDATA[ By Patryk Adaś Since the early 2000’s, the desktop metaphor of tabbed browsing has dominated the way we navigate the web. With Browser.html, a Mozilla Research project aimed at building a browser user interface built in HTML for nightly builds of Ser... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/lossless-web-navigation-with-trails-9cd48c0abb56/</link>
                <guid isPermaLink="false">66c35ab6c7095d76345eafca</guid>
                
                    <category>
                        <![CDATA[ Browsers ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Design ]]>
                    </category>
                
                    <category>
                        <![CDATA[ interaction design ]]>
                    </category>
                
                    <category>
                        <![CDATA[ internet ]]>
                    </category>
                
                    <category>
                        <![CDATA[ UX ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Tue, 24 Jan 2017 17:29:26 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*a2HidWVvbaqVlct9OORVhw.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Patryk Adaś</p>
<p>Since the early 2000’s, the desktop metaphor of tabbed browsing has dominated the way we navigate the web. With <a target="_blank" href="https://github.com/browserhtml/browserhtml">Browser.html</a>, a Mozilla Research project aimed at building a browser user interface built in HTML for nightly builds of <a target="_blank" href="https://servo.org/">Servo</a>, we are experimenting with <strong>evolving the standard tabbed browser towards a model based on <em>trails</em>.</strong></p>
<p>The goal of trails is to construct <strong>not only a window into web content but a narrative of user activity.</strong> Our hope is that our work might help advance the state of browsing closer to the ideal of a tool that <em>enhances</em> our cognitive process, rather than increasing our cognitive load.</p>
<p>To illustrate the kind of scenario we’re thinking about, we’ll introduce you to our friend Nala.</p>
<h3 id="heading-the-search-for-the-perfect-pizza">The search for the perfect pizza</h3>
<p>Nala’s scouting out pizza joints. In her traditional, tabbed browser, she sets off with a search <em>(1)</em> that takes her to a page of search results <em>(2)</em>.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*7qOw8C6wzXJi6ieHobEKTw.png" alt="Image" width="700" height="121" loading="lazy"></p>
<p>She follows a link to a list of restaurants on Yelp <em>(3)</em>, and checks out a promising pizza joint <em>(4)</em>.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*404g1U_jYU4pYrO1292hsg.png" alt="Image" width="700" height="128" loading="lazy"></p>
<p>External links on Yelp open in separate tabs, so when Nala clicks a link to a restaurant’s website, it starts a new tab <em>(5)</em>.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*mhoj_P3uphTdyGKvK2o6QQ.png" alt="Image" width="700" height="365" loading="lazy"></p>
<p>The new tab doesn’t have any history, or any connection to the first tab. <strong>All history about how Nala got to the restaurant’s website is lost!</strong></p>
<p>The browser’s amnesia compounds as she goes to look at more options: switching back to the first tab <em>(6)</em> and navigating back to the Yelp results <em>(7)</em>, she looks for another restaurant.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*cZMNV-d5kA_zPBV0gPQkBA.png" alt="Image" width="700" height="191" loading="lazy"></p>
<p>Now when she selects a new restaurant <em>(8)</em>, <strong>part of the current tab’s navigation history is lost as well:</strong></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*JTpAAWHBlwIZ0YMZPDsCJw.png" alt="Image" width="700" height="203" loading="lazy"></p>
<p>Clicking an external link to the next restaurant’s website again opens a new tab <em>(9)</em>, and again severs the connection from the history that preceded it.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*tW9QQd7vXGJ1inuAt13O2Q.png" alt="Image" width="700" height="296" loading="lazy"></p>
<p>To look at the results of her initial search results again, Nala goes back a few steps in the history of the first tab and opens another pizza venue directly from there <em>(10)</em>.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*dWHcc6uSwXJFUv3NTaEVAw.png" alt="Image" width="700" height="291" loading="lazy"></p>
<p>In this example of a common search scenario, more than a third of the history is lost!</p>
<p>Of course, browsers typically provide tools like history views and “recent tabs” menus, <a target="_blank" href="http://medium.freecodecamp.com/browserhistory-2abad38022b1">but none of these presents a narrative that matches the actual course Nala followed.</a></p>
<h3 id="heading-from-tabs-to-trails">From tabs to trails</h3>
<p>With Browser.html we are prototyping a user interface that tells not just the fragments of Nala’s history that a tabbed browser preserves <em>(Version 1)</em>, but all of it <em>(Version 2)</em>:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*Z1Ue9kAxXyt0xS2ZiGa1yQ.png" alt="Image" width="700" height="286" loading="lazy"></p>
<p>But these trees can easily get intricate. What we think matters most is not where each exploration diverged, but the complete path leading to a result. So that’s what we display to the user <em>(Version 3)</em>:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*Q46vM6br-gi0eTPhT5SBPg.png" alt="Image" width="700" height="289" loading="lazy"></p>
<p>Each row represents a trail from the root of the navigation tree to a result. The benefit is that a trail tells a self-contained story from left to right. On the other hand, duplicates lead to a lot of distracting visual noise. Luckily, that can be removed by focusing on a single trail while folding the others.</p>
<p>This is what Nala would have actually seen:</p>
<h3 id="heading-tabs-and-trails-the-same-but-different">Tabs and trails: the same, but different.</h3>
<p>If you ignore the paths leading up to each explored topic, trails are no different from conventional tabs. This is intentional: our goal is to enhance existing user experiences, not to replace them. Users can continue using browsers as they always have. And yet <strong>each navigation trail is a tab that tells a complete story from start to finish.</strong> This provides us with opportunities to explore further enhancements to the user experience. Here are a few we’re considering:</p>
<ul>
<li>Sharing not just URLs but entire trails.</li>
<li>Fading trails as they become irrelevant and eventually moving them off the grid.</li>
<li>Persisting trails in a form as they were during the visit, so that they can be revisited (offline).</li>
<li>Allowing annotation of trails so users can record their thoughts while researching a topic.</li>
<li>Collaborative topic research.</li>
<li>Optionally opening pages in a new trail.</li>
</ul>
<h3 id="heading-the-path-to-trails">The Path To Trails</h3>
<p>The idea of visualizing a user’s journey through the web as a trail is by no means a new one. Even seventy years ago, in his landmark <a target="_blank" href="http://www.theatlantic.com/magazine/archive/1945/07/as-we-may-think/303881/">As We May Think</a> essay popularizing the idea of hyperlinked data, <a target="_blank" href="https://en.wikipedia.org/wiki/Vannevar_Bush">Vannevar Bush</a> described a “memex machine.” He envisioned this machine would help us collect and share data through a personal library that would help us leave a trail through our research process.</p>
<p>Since then, there have been several attempts to create such a tool, beginning with <a target="_blank" href="https://www.youtube.com/watch?v=ofArVKb58-Q&amp;t=1s">Trailmeme</a> by <a target="_blank" href="http://adsabs.harvard.edu/abs/2010SPIE.7540E..07R">Xerox Trails</a>. This concept was continued by <a target="_blank" href="https://www-s.acm.illinois.edu/macwarriors/projects/trailblazer/">Trailblazer</a> by <a target="_blank" href="https://www-s.acm.illinois.edu/macwarriors/">MacWarriors</a> in 2004, currently followed by <a target="_blank" href="http://www.trailblazer.io">Trailblazer.io</a>. It’s our hope that by connecting the ideas of trails to familiar tabbed idioms, we’ll build on existing workflows and make the idea broadly appealing. And Browser.html serves as a great test-bed for these ideas.</p>
<h3 id="heading-a-spacial-model">A Spacial Model</h3>
<p>I’m working on a spacial model through various user interactions and animations. This should help users better understand what’s going on and how to navigate the web most effectively.</p>
<p><a target="_blank" href="https://medium.freecodecamp.com/lossless-web-navigation-spatial-model-37f83438201d">You can read more about this here.</a></p>
<h3 id="heading-join-us">Join us!</h3>
<p>We’re currently working on building our first working prototype. If this sounds like fun to you, please come check out the <a target="_blank" href="https://github.com/browserhtml/browserhtml">Browser.html</a> project! You can find our list of <a target="_blank" href="https://github.com/browserhtml/browserhtml/issues">open issues</a> on GitHub, or come chat with us on our <a target="_blank" href="https://browserhtml-slackin.herokuapp.com">Slack</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
