<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[TMW Interactive - Medium]]></title>
        <description><![CDATA[News &amp; thought leadership from TMW Unlimited’s Interactive team - Medium]]></description>
        <link>https://medium.com/tmw-interactive?source=rss----61f581092240---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>TMW Interactive - Medium</title>
            <link>https://medium.com/tmw-interactive?source=rss----61f581092240---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 07:18:31 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/tmw-interactive" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Don’t make users work for it]]></title>
            <link>https://medium.com/tmw-interactive/dont-make-users-work-for-it-676159745cd2?source=rss----61f581092240---4</link>
            <guid isPermaLink="false">https://medium.com/p/676159745cd2</guid>
            <category><![CDATA[onboarding]]></category>
            <category><![CDATA[user-experience]]></category>
            <category><![CDATA[ux]]></category>
            <dc:creator><![CDATA[Alex Harrold]]></dc:creator>
            <pubDate>Wed, 31 May 2017 13:33:28 GMT</pubDate>
            <atom:updated>2017-05-31T13:33:27.788Z</atom:updated>
            <content:encoded><![CDATA[<p>The summer holiday planning season is upon us and whilst I love a good break, I’m one of the 76% of the population that finds searching for one extremely stressful(1).</p><p>So, after visiting a number of websites I found one in particular that had an array of affordable and suitable holidays. There were so many options I actually felt the need to bookmark the best looking ones for future reference.</p><p>Now obviously there are many ways to do this but my eye was drawn to this site’s Airbnb style ‘favourite’ functionality. As I hovered over the icon I imagined what was to come but still held out hope that I was wrong.</p><p>Click…</p><blockquote><strong><em>YOU NEED TO BE REGISTERED TO USE THIS FEATURE SO PLEASE TELL US YOUR ALL THE USUAL CRAP INCLUDING FULL ADDRESS PLUS ALL THE THINGS YOU LIKE MOST COS WE’RE ALREADY ASSUMING YOU’RE GONNA LET US EMAIL YOU STUFF*</em></strong></blockquote><blockquote><strong>*I might have ad-libbed a little</strong></blockquote><p>At which point, I thought “are you kidding me? I want to use a tool that should bring me closer to purchasing and you’re going to make me work my arse off for it?”</p><p>Now of course I understand that to truly remember information an exchange of data must take place but, how about phrasing it to put the emphasis on helping the visitor…</p><blockquote><strong><em>That’s been added to your favourites!</em></strong></blockquote><blockquote><strong><em>We should remember your list next time you visit us on the same device but to be sure we recommend you quickly join us.</em></strong></blockquote><blockquote><strong><em>You can join via your social accounts or by giving an email and password.</em></strong></blockquote><p>The above basically translates as “we’ve done what you asked” which is the first thing a user wants to know. But it then explains that to get the full benefit of their actions they need to do a <strong>LITTLE</strong> more. This provides a simple onboarding process for those that are willing.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*js5DD5ZPoqsPMuYY2oontA.jpeg" /><figcaption>Make your onboarding invite welcoming, simple and where possible optional (Image by Mabel Amber)</figcaption></figure><h3><strong>5 other bad examples of making users work for it</strong></h3><p><strong>Making them choose before they’re ready or able:</strong> During my recent holiday hunt I was amazed how many sites made me choose a destination. The destination was actually what I came to figure out based on the experiences I required (beach, all-inclusive, crèche) which also fit within my budget.</p><h4><strong>Forcing them to download an app</strong></h4><p>If a brand’s marketing and data strategy is spot on then targeting users with messages to explore the features of their product(s) is a no brainer. But, making them download an app first to do so isn’t. If you want to impress consumers don’t make them jump through hoops.</p><p><strong>Force them to register: </strong>Some stakeholders struggle to comprehend why a guest checkout option is needed when the work required from the user is often near identical. And in many ways, this is a logical argument… except we’re not always logical creatures! Forced registration could count for around 23% of a site’s basket abandonment(2). It’s all about personal choices.</p><p><strong>Make them change device:</strong> The motor industry and its many variations of car configurators and 3D walkthroughs can regularly be guilty of this. Being told that “to get the full experience view on a laptop or computer” can make the brand seem lazy and cause frustration.</p><p><strong>The hidden navigation: </strong>Hamburger menus are a much-debated topic which I could talk/rant about for thousands of words. On smaller screens they are usually a necessity (although sites like the BBC show there are other solutions). But using a hamburger on larger screens is inexcusable. Scanning the primary navigation helps a user understand what you have to offer and what their options are, so why make users look for it?</p><p>Studies have shown that using hamburgers reduces the discoverability of content and increases task completion time(3). Yes, it’s one click but by hiding the options you reduce the potential for a user’s subconscious to drive further exploration.</p><p>Making users do unnecessary work is a guaranteed way of damaging conversion rates. So take a look at your digital assets and ask yourself the question - ‘<strong>Are we making users work for it?</strong>’</p><p><em>1. Source Expedia </em><a href="http://inside.expedia.co.uk/pressreleases/time-for-a-break-brits-left-stressed-over-holiday-bookings-1319817"><em>http://inside.expedia.co.uk/pressreleases/time-for-a-break-brits-left-stressed-over-holiday-bookings-1319817</em></a></p><p><em>2. Source Formismo — </em><a href="https://www.formisimo.com/blog/7-best-ways-to-decrease-your-form-abandonment-rate/"><em>https://www.formisimo.com/blog/7-best-ways-to-decrease-your-form-abandonment-rate/</em></a></p><p><em>3. Source Nielson — </em><a href="https://www.nngroup.com/articles/hamburger-menus/"><em>https://www.nngroup.com/articles/hamburger-menus/</em></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=676159745cd2" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tmw-interactive/dont-make-users-work-for-it-676159745cd2">Don’t make users work for it</a> was originally published in <a href="https://medium.com/tmw-interactive">TMW Interactive</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Meteor JS with a hint of React]]></title>
            <link>https://medium.com/tmw-interactive/meteor-js-with-a-hint-of-react-b5111cffc634?source=rss----61f581092240---4</link>
            <guid isPermaLink="false">https://medium.com/p/b5111cffc634</guid>
            <category><![CDATA[meteor]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[nodejs]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[react]]></category>
            <dc:creator><![CDATA[Denzel Brade]]></dc:creator>
            <pubDate>Thu, 16 Mar 2017 11:42:05 GMT</pubDate>
            <atom:updated>2017-03-16T11:42:05.221Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*hDvM1RBXwR_grAHk7LqOOg.jpeg" /></figure><p>If you haven’t heard of Meteor JS already, let me give you a brief overview of what it can do and why I think it is so powerful, especially when teamed with React. I will then share some code snippets to provide further insight.</p><h3><strong>What is it?</strong></h3><p>Meteor JS is a full-stack real time web application framework. From front-end to back-end you only need to concern yourself with one programming language:<strong> Javascript</strong>. Its primary purpose is for the user to be able to create applications &amp; websites with less code.</p><p>Meteor allows you to build for any device, Web, IOS and Android, while utilising technologies you are already familiar with. This could arguably be a topic all on its own, and is a little outside the scope of what this post is focused on. You can read up on this <a href="https://guide.meteor.com/mobile.html#running-on-ios">here</a>.</p><h3><strong>Why Meteor?</strong></h3><p>This is the fun part. The stand out consensus is that Meteor is incredibly easy to learn, &amp; while every mammoth like framework likes to boast their ‘simplicity’, Meteor actually delivers on this promise.</p><p>Don’t believe me? take just an hour out of your day to complete this <a href="https://www.meteor.com/tutorials/blaze/creating-an-app">tutorial</a>, the result… Not just a UI to-do list, but a functional client-server to-do list with basic authentication (user login).</p><p>The Meteor team’s focus on simplicity is refreshing.</p><p>Meteor JS comes shipped with Mongo DB as its de-facto Database and three view-engines are currently supported: React and Angular (the two giants) and Meteor’s very capable Blaze.</p><h3><strong>What about Dev-ops</strong>?</h3><p>Meteor’s mission to keep development as painless as possible throughout extends with their build system.</p><p>It’s worth mentioning that Build tools such as Gulp &amp; Grunt are not required, reducing additional overhead &amp; project set up time. Thanks to Meteor’s built in ‘Hot Code Push’ your HTML, CSS &amp; Javascript changes are seamlessly compiled and your site updates without a manual reload.</p><p>I hear you already asking “What about SASS/LESS I’m way too cool to use regular CSS”. Worry not, Sass, Less &amp; Stylus are all supported by grabbing them from Meteor’s native package repository ( Meteor’s version of NPM ).</p><p>PostCSS and Auto-prefixing? Have at it. In fact whatever you are keen on, build-systems related, they have in depth <a href="https://guide.meteor.com/build-tool.html">documentation</a> for you to get your head around. Speaking of NPM, you can totally still use this as you usually would.</p><h3><strong>Meteor With React JS</strong></h3><p>So enough of what Meteor JS is, if you need a more in depth evaluation to decide if it can cater to your needs, check their <a href="https://www.meteor.com/developers">developer guide</a>.</p><p>I want to show you a small demo clip using Meteor Js with React JS as the view engine. This example is a demo employee directory see below:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/480/1*aBHhfmRVfSVa27X6A78X7Q.gif" /></figure><p>We are using Meteors pub/sub formula here, which stands for publish and subscribe. How does it work? So as you know we are using React JS for our UI / View. React is just in charge of handling the data it is given and rendering it to the page, for example the image, employee name &amp; details.</p><p>The data is actually stored in Meteor’s back end. We are using fake data currently, for example purposes. Check out <a href="https://github.com/Marak/faker.js">Faker JS</a> great for generating loads of test data.</p><p>Back to the topic at hand, we need React JS to talk Meteor’s Database to request the data… this is called a <strong>Subscription</strong>.</p><p>Let’s put this in human terms for the sake of understanding, It is as simple as React saying “<strong><em>Hey meteor I know you are storing all those employees. I would like you to send me the first 21</em></strong>”.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DJ2euDCrd2lNIpa1DtzLpA.png" /><figcaption>Directory - client / components / employee_list.js</figcaption></figure><p>We set up our container which, continuously watches our subscriptions, and if any data changes, it will update and pass this down via props, re-rendering the components. Our ‘<strong>per_page</strong>’ variable is set to 21 so that’s all Meteor will send back to us.</p><p>Meteor will then Respond like so <strong>“<em>No problem, here is the first 21 you asked for</em>”. </strong>This method is called<strong> Publish.</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Qc5c_oOOxrW4XeY8gXIOmQ.png" /><figcaption>Directory - server / main.js</figcaption></figure><p>The limit makes sure, it only supplies the client exactly what it needs. Super easy, right? There is only one extra step that needs addressing: Collections. We understand the pub / sub method now, but how do we actually reference the data inside Mongo DB? At its core Collections are a set of related data within Mongo DB.</p><p>For example purposes, below is how we set up a collection for our Employee directory with comments.</p><p>Part 1: Declaring our collection and making it available to run on the server by exporting</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/584/1*Rscxvgo8cQdXlYFALGAjhQ.png" /><figcaption>Directory - import / collections / employee.js</figcaption></figure><p>Part 2: Generating some fake data and adding it to the employee collection, which will be stored in our database.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/840/1*W_YtmB6McAxO_CnxfCisGQ.png" /><figcaption>Directory — server / main.js</figcaption></figure><p>As you can see above, we are generating 5000 Employees with fake data. However, if you remember we are only requesting 21 Employees from our database on initial load.</p><p>Collections can be used also on the client side &amp; locally. See more on Collections <a href="https://guide.meteor.com/collections.html">here</a>.</p><p>Now of course<strong> </strong>I don’t believe any framework should be used for all cases, you should always choose the appropriate tools to get the job done, I touch on this in my previous blog post ‘<a href="https://medium.com/@denz_brade/front-end-dev-running-before-you-can-walk-d78a528915b#.218rnxbli">Front end dev -running before you can walk</a>’. I hope this helped demystify what Meteor JS is and enlightened you to a very small set of its capabilities.</p><h3>👋</h3><p>I hope you enjoyed this post, feel free to check out my previous posts on <a href="https://medium.com/front-end-hacking/react-js-learning-to-swim-f0be5828d703#.sqyfu5qni">learning React</a>, and for all things creative tech head on over to <a href="https://medium.com/tmw-interactive/tagged/creative-technology">TMW Interactive</a>.</p><p>P.S. Thanks for reading this far! If you found value in this, I’d really appreciate it if you recommend this post (by clicking the 💚 button) so other people can see it!. Don’t forget to follow the Interactive team on <a href="https://medium.com/tmw-interactive"><em>Medium</em></a> and on Twitter (<a href="https://twitter.com/TMWInteractive">@TMWInteractive</a>).</p><p><em>Quick Side-note: Check out Stephen Grider’s course on Meteor JS &amp; React from Udemy, his understanding and mini projects are a great entry point into this stack. (Naturally wait till Udemy do a flash sale </em>😃<em> )</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b5111cffc634" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tmw-interactive/meteor-js-with-a-hint-of-react-b5111cffc634">Meteor JS with a hint of React</a> was originally published in <a href="https://medium.com/tmw-interactive">TMW Interactive</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The art of conversation]]></title>
            <link>https://medium.com/tmw-interactive/the-art-of-conversation-f770934cb92a?source=rss----61f581092240---4</link>
            <guid isPermaLink="false">https://medium.com/p/f770934cb92a</guid>
            <category><![CDATA[email-marketing]]></category>
            <category><![CDATA[marketing]]></category>
            <category><![CDATA[customer-experience]]></category>
            <category><![CDATA[user-experience]]></category>
            <category><![CDATA[experience]]></category>
            <dc:creator><![CDATA[Alex Harrold]]></dc:creator>
            <pubDate>Thu, 02 Mar 2017 09:48:35 GMT</pubDate>
            <atom:updated>2017-03-07T12:37:56.293Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Qx60z2w1GPbljqooO0jxqA.jpeg" /></figure><p>Remember the glory years of play.com when it rivalled Amazon? Well I do and I used to rather enjoy our mini conversations together over email.</p><p>They’d typically start with an email asking if I’d like to see ‘The deal of the day’. My answer to this was 99 out of 100 times yes so I’d dutifully open the email to reveal what it was.</p><p>Quite often the deal was not for me but that was ok. I’d invested very little of my time so it was a perfectly good (if brief) conversation. When I did find the deal irresistible all I had to do was respond yes to the offer to ‘add to basket’ and off I went.</p><p>One quick conversation and one more sale converted.</p><p>But, it all started to go wrong. All of a sudden I was asked multiple questions in my emails. Did I want to check out the deals for DVD’s, books, electronics, fun gadgets, t-shirts, etc.</p><p>Well, I was never really sure. There were montages of covers to hint at what was in the deal and now I was told it was ‘up to 50% off’. So If I wanted to know, I’d have to ask play.com to show me more.</p><p>Doesn’t sound too bad right? It needn’t have been but often you had to dig for the montaged products and the deal for them was negligible. To make it even worse the same deals seem to be repeated every week.</p><p>Our conversations had become convoluted, taxing and at times felt misleading. So I (and it seems many other people) stopped having them.</p><h3><strong>Anatomy of a digital conversation</strong></h3><p>As marketers we start conversations all the time via channels such as email, social posts, search, notifications, etc. Our goal is to continue these conversations until their conclusion which typically means a conversion (sales, sign up, share, etc).</p><p>Typically these can broken down into sequences of:</p><p><strong>A Recommendation - </strong>Discover this / watch / learn about /</p><p><strong>A Response - </strong>The users click</p><p><strong>A Reveal - </strong>The content</p><h3><strong>What makes a bad conversation?</strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/865/1*zDwO3eCBWClq_TgBnTafbA.png" /><figcaption>Comic still from <a href="http://maximumble.com/">Maximumble.com</a></figcaption></figure><p>It’s never a good idea to offer a <strong>Recommendation</strong> to a complete stranger out of context. If they don’t know you and you’ve not bothered to introduce yourself, why would they trust what your saying?</p><p>Equally a badly timed conversation will likely result in failure. As much as their dedication should be admired, a charity worker is going to struggle trying to engage a scowling (it’s just my resting face) London commuter walking at full pace towards the station.</p><p>But the most common conversation (and therefore conversion) killers are misguided <strong>Reveals, </strong>which can typically be categorised into five types.</p><p>The ‘we’d rather talk to you about this’ <strong>Reveal</strong>. Hooking the user in with a promise to talk about one thing when secretly you want to talk about another may do wonders for CTA’s but it won’t help conversions.</p><p>The ‘Enough about that, how about this’ <strong>Reveal</strong>. Similarly if you try and change the conversation too quickly the user may feel confused or even misled.</p><p>The ‘find it if you can’ <strong>Reveal</strong>. My play.com bug bear. If you’ve highlighted certain items as part of a collection then make sure these are one of the first things seen on the reveal.</p><p>The ‘before we go any further give us stuff’ <strong>Reveal</strong>. Unless it’s absolutely required to deliver the content (EG your postcode to find your closest store) you cannot ask for personal data to continue the early stages of a conversation.</p><p>The ‘what is this’ <strong>Reveal</strong>. Quite often Paid search can the be culprit of this. The paid ad <strong>recommends</strong> itself to answer the original query but the <strong>Reveal</strong> (link) can often be to a homepage or something entirely irrelevant.</p><h3><strong>Good conversations</strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*nkKbHqj8CNeI_2zHaZGktQ.jpeg" /></figure><p>The best conversations are the ones that are most relevant and/or interesting to you. Brands that invest in data planning, marketing automation and contextual content tools are most likely to have the best conversations with their consumers.</p><p>Why? Because they know what makes their consumers tick, when to contact them and exactly what to recommend to them. And as long as they <strong>Reveal </strong>the content that matches or exceeds the expectations set by the <strong>Recommendation</strong> they’ll enjoy the best <strong>conversions</strong>.</p><p>Often a good SEO strategy (coupled with good UX) can often provide solid conversations. How? If a brand’s content genuinely answers a user’s query, they can start to build brand equity. This, combined with an appropriate Recommendation can lead to successful conversations.</p><p>So review your user journeys from end to end and ask yourself…<strong>is this a good conversation</strong>?</p><h3>👋</h3><p>P.S. Thanks for reading this far! If you found value in this, I’d really appreciate it if you recommend this post (by clicking the 💚 button) so other people can see it!. Don’t forget to follow the Interactive team on <a href="https://medium.com/tmw-interactive"><em>Medium</em></a> and on Twitter (<a href="https://twitter.com/TMWInteractive">@TMWInteractive</a>).</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f770934cb92a" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tmw-interactive/the-art-of-conversation-f770934cb92a">The art of conversation</a> was originally published in <a href="https://medium.com/tmw-interactive">TMW Interactive</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Interactive Email: The Future of Email Marketing?]]></title>
            <link>https://medium.com/tmw-interactive/interactive-email-the-future-of-email-marketing-5aca38374f8?source=rss----61f581092240---4</link>
            <guid isPermaLink="false">https://medium.com/p/5aca38374f8</guid>
            <category><![CDATA[email]]></category>
            <category><![CDATA[email-marketing]]></category>
            <dc:creator><![CDATA[Ryan Hickling]]></dc:creator>
            <pubDate>Tue, 28 Feb 2017 12:19:39 GMT</pubDate>
            <atom:updated>2017-02-28T12:20:50.711Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qizbRzrQ43rXNh5HCB1qRA.jpeg" /></figure><p>Interactive elements within an email can allow for fun new experiences and increase engagement with your message but when and where should you invest in them?</p><p>When trying to push the limits of what can be accomplished within Email many marketers are gradually starting to include interactive elements within their campaigns. If you’re new to interactive emails, this is your guide to what defines them, what can be accomplished by its use and how you can introduce interactivity to your existing emails.</p><h4><strong>What do we mean by interactive?</strong></h4><p>At TMW Unlimited we define interactivity within email as anything that allows us to alter content or provide animations within an email based upon a user clicking an element within the design. Crucially this all happens within the email itself and not off on a landing page.</p><p>Broadly this can include anything from carousels, accordion menus, popup content, conversational design elements, in email shopping baskets or any other type of interface that presents the user with a simple click option to cause an effect.</p><h4><strong>Check out the below examples of some recent interactive emails:</strong></h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/322/1*EvCLgHyXIR06npmRV5sBqA.png" /></figure><p><a href="https://litmus.com/builder/1db3ba7">Halloween proof of concept <br>for Vodafone</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/303/1*xUiApUWOOm8LlOoB0zUAPQ.png" /></figure><p><a href="https://litmus.com/builder/5b3d6fd">Nissan GB Carousel</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/416/1*H9-4qnZoRGWlvXIKGbOKZQ.png" /></figure><p><a href="http://codepen.io/TMWEmail/full/RRRJLg/">Conversational Design Experiment</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/356/1*bknd-FKkn4rEoTSdCYvqwA.png" /></figure><p><a href="https://litmus.com/builder/cf42063">Infiniti — Mobile Colour Changer</a></p><h4><strong>The Potential</strong></h4><p>All of this interactivity within email is possible due to the capabilities of CSS and modern platforms. CSS is the code used within emails to apply styling to elements like text and images. However, CSS is capable of much more and because of greater support offered by mobiles like iPhones and Android devices we can now use advanced features on these devices.</p><p>This means that any device or email client that supports modern CSS standards can potentially display and initiate animation effects usually reserved for web browsers. For other platforms (mainly desktop clients) we will need to support alternative options.</p><p>Anything we can style within an email (e.g. Text and Images) can effectively be transitioned between two different states. As a very simple example, we could create a button to toggle the visibility of an image within an email. We can then setup an animation effect for the transition between the two states e.g. fading or zooming etc. that can then be triggered by the user clicking the defined button.</p><p>In the examples above we’re effectively changing the on screen visibility of elements in order to show and hide content creating the effect of carousels, accordions and other user interfaces.</p><p>You can then get even more detailed by effectively tracking multiple clicks / states at the same time and using them to increment and decrement counters. This allows you to embed even more functionality like shopping baskets or games within the email itself.</p><h4><strong>Interactivity — Best Practice</strong></h4><p>Currently we see interactive elements as primarily mobile enhancements. This is due to the fact that there is still limited support for interactivity on desktop and web based email clients. When designing new campaigns it is important to review both your objective and available content in order to assess how interactivity could be creatively applied.</p><p>Wherever possible it is important to use this functionality to enhance user engagement rather than just aiding in the display of more content on a smaller screen.</p><p><strong>Ensure your message is clear and relevant to the user before hand. </strong>Never add interactivity just for the sake of aiding poor content. Use it to enhance your proposition to the user.</p><p>It is also important to keep in mind the additional development and testing time required for these campaigns. Naturally this makes interactivity more suited to one off emails than a regular feature within your email templates.</p><p>You will also need to make sure to <strong>implement fallback versions</strong> of your design for the desktop and anywhere else the interactivity is not supported. In the carousel examples linked above we generally stack the different slide content on top of one another or design a completely different desktop version. Alternatively you can choose to completely hide the interactive content and present static alternatives.</p><p>Emails no longer have to look the same on every device.</p><p>There is also no need to worry about interactivity affecting the deliverability of your campaigns as the code required is nothing more than standard HTML and CSS. If you already have good deliverability and sender reputation then this should not impact you*.</p><p>Do keep an eye on the amount of code used within your email though as the extra weight caused by the interactivity could cause some email clients to clip or trim your content and break your design.</p><p><strong>As with everything in email marketing make sure to QA thoroughly and A/B test your results.</strong></p><h4>In Summary</h4><p>Is interactivity the future of email marketing? Possibly but first it needs much greater support particularly with desktop email clients. Right now it should be an option you explore for use within your campaigns but only to enhance the message and improve user engagement.</p><p>I would recommend prioritizing its use in email only where you want to attract attention to a unique program e.g. product launch or announcement email.</p><p>Due to the time and cost involved in development and testing we would not normally recommend it’s use in regular communications.</p><p>P.S. Thanks for reading this far! If you found value in this, I’d really appreciate it if you recommend this post (by clicking the 💚 button) so other people can see it! Don’t forget to follow the Interactive team on <a href="https://medium.com/tmw-interactive"><em>Medium</em></a> and on Twitter (<a href="https://twitter.com/TMWInteractive">@TMWInteractive</a>). Also feel free to contact me directly on Twitter <a href="https://twitter.com/hickling"><em>@hickling</em></a> for more advice.</p><p><em>* Content filters that refuse to like large amounts of code could be an exception so make sure to test!</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5aca38374f8" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tmw-interactive/interactive-email-the-future-of-email-marketing-5aca38374f8">Interactive Email: The Future of Email Marketing?</a> was originally published in <a href="https://medium.com/tmw-interactive">TMW Interactive</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Creating dynamic layouts with Jekyll]]></title>
            <link>https://medium.com/tmw-interactive/creating-dynamic-layouts-with-jekyll-3bbb7fc57d1f?source=rss----61f581092240---4</link>
            <guid isPermaLink="false">https://medium.com/p/3bbb7fc57d1f</guid>
            <category><![CDATA[jekyll]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[static-site]]></category>
            <category><![CDATA[front-end-development]]></category>
            <dc:creator><![CDATA[Zander Martineau]]></dc:creator>
            <pubDate>Thu, 02 Feb 2017 16:02:22 GMT</pubDate>
            <atom:updated>2017-02-07T01:14:21.341Z</atom:updated>
            <content:encoded><![CDATA[<h4>How we used YAML front-matter to massively change the layout for different posts on our agency’s new website</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rS4n3wyRac82CtdSpi3Mpg.jpeg" /><figcaption>Taken from our <a href="http://www.tmwunlimited.com/work/canon-unleashprint/"><strong>Canon #unleashprint campaign</strong></a></figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/498/1*mmeE0OerkD16qZcOgEzKow.png" /></figure><p><a href="http://jekyllrb.com/">Jekyll</a>-created websites are typically simple and their layouts, predictable. I want to show you how I created a pseudo-dynamic layout for case-studies, on <a href="http://www.tmwunlimited.com/">TMW&#39;s new website</a>, using some YAML front-matter and a little magic..*</p><p>At TMW, the work we do comes in all shapes and sizes. Traditional templates would not suffice, because the work we do is extremely varied and the layouts needed to reflect that. We decided, at a very early stage, that each case study should change based on the project and particular type of content. This presented an interesting challenge for me because Jekyll does not cater for that functionality, so I had to get a little creative…</p><h3>YAML front-matter, a for-loop and lots of modules</h3><p>After a few iterations, I settled on a robust, if unorthodox solution that used YAML front-matter (in each case study’s markdown), a simple for-loop (in the case study layout) and lots of modules for each section of the case study page.</p><h4>YAML front-matter</h4><p>Amongst other things, the partials YAML array was added to the YAML front-matter for each case study (you can see it at the bottom of the embed below). Each item in that array had to specify a name, this name corresponded to the name of the partial/module that was going to be used.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/46a086cb38a6433914c7a89e8b2d47c1/href">https://medium.com/media/46a086cb38a6433914c7a89e8b2d47c1/href</a></iframe><h4>The for-loop</h4><p>The loop in question was added to the work layout file in the _layouts directory. It might look a bit nuts — and it is — but please bear with me.. The nature of how Jekyll compiles it’s files meant I had to account for all possible properties for each module that was used in the YAML.</p><p>The loop iterated through the partials array, used the name property to include a <em>different</em> module, like so: include {{item.name}}.html. These were then passed to the included module using the subsequent parameters on the include tag. Even if the property was not needed in that module, it still needed to be passed down.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/28d7ccc0dc4a76cefdf7935d705a187d/href">https://medium.com/media/28d7ccc0dc4a76cefdf7935d705a187d/href</a></iframe><p>Very quickly, I discovered that the properties of the partials array needed to share the same properties so that my for-loop didn’t get totally out of control.</p><h4>The modules</h4><p>Creating modules for this page was nothing out of the ordinary, below you can see one of them. You should also be able to tell that some of the values are optional (e.g {% if include.spaced %}), this meant that I was able to customise the modules even further by adding/removing classes and content and giving the page even more of a unique feel. Examples of this was the optional addition to contain images in the section-image module to a thin column equal to the width of .l-container or a slightly wider version using .l-container--wide. This was used to great effect on the <a href="http://www.tmwunlimited.com/work/unilever-lynx-bigger-issues/">Lynx Bigger Issues case study</a>.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/2fde3379cf6d6ac1619375f782da60fa/href">https://medium.com/media/2fde3379cf6d6ac1619375f782da60fa/href</a></iframe><h4>Colour schemes</h4><p>Another aspect to the case studies, was that they each have their own colour scheme. This is usually governed by the assets or brand for that particular case study and was controlled by some more YAML front-matter.</p><p>The YAML set primary, secondary and text colours that were then added to a small inline &lt;style&gt; block that changed styles for some aspects of the page.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/2dbe82c45a8f852124a1a38d7007799b/href">https://medium.com/media/2dbe82c45a8f852124a1a38d7007799b/href</a></iframe><p>All of this allowed for massive customisation on our new website, see a selection of case studies below:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*UVZ-0lHLA702VVWUGAAmTA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rmRNs1tb1D7vCOr_eRBO5Q.png" /><figcaption><a href="http://www.tmwunlimited.com/work/">http://www.tmwunlimited.com/work/</a></figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Q8RQduFxoRUMSJauZ0ED-Q.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*M5f4_au8Xo05A8CyRRdmYQ.png" /></figure><h3>👋</h3><p>As you can see, there are some incredible things that can be done with Jekyll. If you have any comments or feedback, please let me know.</p><p>P.S. Thanks for reading this far! If you found value in this, I’d really appreciate it if you recommend this post (by clicking the 💚 button) so other people can see it!. Don’t forget to follow the Interactive team on <a href="https://medium.com/tmw-interactive"><em>Medium</em></a> and on Twitter (<a href="https://twitter.com/TMWInteractive">@TMWInteractive</a>).</p><p><em>*No magic was used.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3bbb7fc57d1f" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tmw-interactive/creating-dynamic-layouts-with-jekyll-3bbb7fc57d1f">Creating dynamic layouts with Jekyll</a> was originally published in <a href="https://medium.com/tmw-interactive">TMW Interactive</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Creative Technology Monthly: Disappearing interface]]></title>
            <link>https://medium.com/tmw-interactive/creative-technology-monthly-disappearing-interface-4161d262ba23?source=rss----61f581092240---4</link>
            <guid isPermaLink="false">https://medium.com/p/4161d262ba23</guid>
            <category><![CDATA[amazon-echo]]></category>
            <category><![CDATA[user-interface]]></category>
            <category><![CDATA[creative-technology]]></category>
            <category><![CDATA[ux]]></category>
            <category><![CDATA[creative-tech-monthly]]></category>
            <dc:creator><![CDATA[Zander Martineau]]></dc:creator>
            <pubDate>Fri, 27 Jan 2017 12:07:55 GMT</pubDate>
            <atom:updated>2017-02-03T06:33:04.195Z</atom:updated>
            <content:encoded><![CDATA[<h4>Issue 03: Disappearing interface<em> by </em><a href="https://medium.com/u/e44d32de29c5"><em>Marc Curtis</em></a><em> &amp; </em><a href="https://medium.com/u/329d4612b5fe"><em>Zander Martineau</em></a><em> </em>— <em>January 2017</em></h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*uE8Qwq0qP_DqcDZvEnxaqA.jpeg" /><figcaption>From the <a href="https://unsplash.com/@nasa?photo=Yj1M5riCKk4"><strong>NASA collection</strong></a> on <a href="https://medium.com/u/2053395ac335">Unsplash</a></figcaption></figure><h3>Disappearing interface</h3><p><em>by </em><a href="https://medium.com/u/e44d32de29c5"><em>Marc Curtis</em></a></p><h4>Invisible is the new black</h4><p>Here’s a term you’re going to hear more of in the coming months. It’s not a new term, UX luminaries such as <a href="http://www.jnd.org/">Don Norman</a> have been writing about the challenges of designing natural interfaces for years. So what is it?</p><p>Put simply, since the dawn of computing we’ve employed various visual displays to impart and interact with the information and functionality afforded by the device.</p><p>In the earliest days of computing dials and lights displayed the results of computations. This became VDUs (I bet that’s a term you’ve not heard in a while), and soon — with the coupling of the GUI (Graphical user interface) and the mouse (invented by Xerox and made popular by Apple) — we all learned how to interact with our machines by pointing and clicking.</p><p>Mobile devices have evolved this with the development of gestural interaction (touch, swipe, pinch etc), but the basic idea remains the same. We use a screen to interact with our computers.</p><h4><strong>Earl grey, hot</strong></h4><p>During the relatively short evolution of GUI interaction, technologists have tried at various points to catch up with the dream of a voice interface as promised to us by popular sci-fi like Star Trek.</p><p>As far back as the mid 90’s software such as Dragon Naturally Speaking enabled users to execute simple commands on their PCs (albeit with varying degrees of success).</p><p>In recent times, giants such as Google and Apple have worked hard to perfect voice recognition to the point that we can now reliably talk to our devices with every expectation of being understood. However the interactions are still validated and enable by screen based devices.</p><h4><strong>Alexa, play music </strong>🔊</h4><p>Now, this is all set to change. Amazon Echo is one of the first of a new breed of devices that does not have any kind of display. All interaction is handled using voice commands. Crucially these commands should use language that sounds as natural as possible, delivered in a range of accents by users of all ages.</p><blockquote>In effect we are entering an age of the Disappearing interface.</blockquote><p>This raises a number of challenges for designers, UX professionals and developers (imagine trying to deliver a recipe and instructions for a user with no visual reference points) as well as a range of challenges for users, who may have to learn new ways of interacting with these systems</p><p>Don Norman would point towards his long held belief that poor user experience is due to poor design. So these challenges really centre on our ability to understand how users need to interact and build invisible interfaces that seamlessly provide that interaction.</p><h3>🔥 Showcase</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/636/1*N_C4Ts57F8R4VF1q6-KawQ.gif" /><figcaption><a href="http://imgur.com/a/wUAcl"><strong>How some cool silent film effects were done</strong></a>, creative technology in a different era</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yqfj9Hb4rTN4C4-xFVdqbQ.png" /></figure><p><a href="http://beta.wind-and-words.com/"><em>Wind and Words</em></a> is an interactive Game of Thrones data visualisation. Using data collected from script dialogue and other sources, this experiment analyses and visualises characters’ words and interactions from the first six seasons of HBO’s Game of Thrones.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fplayer.vimeo.com%2Fvideo%2F194697431%3Fapp_id%3D122963&amp;dntp=1&amp;url=https%3A%2F%2Fvimeo.com%2F194697431&amp;image=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F606723806_640.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=vimeo" width="640" height="360" frameborder="0" scrolling="no"><a href="https://medium.com/media/2f7243ef861fbf159021f28f4c7a6b66/href">https://medium.com/media/2f7243ef861fbf159021f28f4c7a6b66/href</a></iframe><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fcodepen.io%2Fjakealbaugh%2Fembed%2Fpreview%2FqNrZyw%3Fheight%3D600%26amp%3Bslug-hash%3DqNrZyw%26amp%3Bdefault-tabs%3Djs%2Cresult%26amp%3Bhost%3Dhttp%253A%252F%252Fcodepen.io%26amp%3Bembed-version%3D2&amp;url=https%3A%2F%2Fcodepen.io%2Fjakealbaugh%2Ffull%2FqNrZyw&amp;image=https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fi.cdpn.io%2F111863.qNrZyw.small.75644bf3-8f40-42ca-a908-7f42f01db700.png&amp;key=d04bfffea46d4aeda930ec88cc64b87c&amp;type=text%2Fhtml&amp;schema=codepen" width="800" height="600" frameborder="0" scrolling="no"><a href="https://medium.com/media/ab369d06cdfa8bcc05fad34bab78c99d/href">https://medium.com/media/ab369d06cdfa8bcc05fad34bab78c99d/href</a></iframe><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*v1oqwrusapjDpzOnK2ELZw.jpeg" /><figcaption><a href="https://www.hpsoundincolor.com/"><strong><em>HP’s Sound in Colour</em></strong></a> is a beautiful microsite for one of their laptops. It records sounds that you create and transforms them into a piece of artwork. Mine is above 🎨</figcaption></figure><p><a href="http://astronaut.io/"><em>Astronaut.io</em></a> is really cool. It presents seemingly random Youtube videos, these videos have almost zero previous views. They are unnamed, unedited, and unseen by anyone but YOU.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/898/1*sHVvqmlL6vTP78T2x9ie2A.png" /></figure><p><a href="https://mysterysear.ch/"><em>Mystery Search</em></a> is a potentially NSFW site for Google searches that gives you the search results for what the person before you searched for.. Sounds confusing, I know. But give it a whirl if you dare..</p><h3>📖 Reading / Link list</h3><p><a href="https://uxdesign.cc/designing-for-brand-interaction-95556c013782#.a6smxzwag"><em>Designing for Brand Interaction</em></a> by <a href="https://medium.com/u/432d057192a">Rebecca Ussai Henderson</a> relates to <a href="https://medium.com/tmw-interactive/creative-technology-monthly-motion-and-animation-7216199c3dd2#.to5az71jv">last month’s CTM</a> by showing how a branded experiences can be created👌</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/940/1*SgLpbJ4IXvVoHCgsX0oqsw.jpeg" /></figure><p><a href="http://www.tmwunlimited.com/latest/2017/01/19/welcome-the-internet-superfluous-things/"><em>Welcome to the internet of superfluous things</em></a> by, our very own, <a href="https://medium.com/u/e44d32de29c5">Marc Curtis</a> talks about some of the useless things that are being created these days.</p><blockquote>For the love of all that is holy do we need Edwin the Smart Rubber Duck? I’m calling it: we’ve reached peak internet of things.</blockquote><p>On a similar note, <a href="https://twitter.com/i/moments/817537697535250432"><em>The CES of Shit</em></a> is a brilliant, curated Twitter Moment from the <a href="https://twitter.com/theinternetofshit">@theinternetofshit</a> showcasing all the awful things at CES this year. Do we really need smart underwear? Why do some people even bother?!!</p><p><a href="https://github.com/luruke/awesome-casestudy"><em>Awesome-casestudy</em></a> is a curated list of technical case studies about front-end development.</p><h3>⚒ Code</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*r-JSqzYvGpeeT0rfkSpThQ.jpeg" /></figure><p>🎉 <em>Webpack 2</em> (or more appropriately, v2.2.0) has finally been released, read about <a href="https://medium.com/webpack/webpack-2-2-the-final-release-76c3d43bf144#.fqwrj0cqh">it here</a>. There’s even a brand new website for the project too: <a href="https://webpack.js.org/">webpack.js.org</a></p><p><a href="http://p5js.org/"><em>p5.js</em></a> is a JavaScript library that starts with the original goal of <a href="http://processing.org/">Processing</a>, to make coding accessible for artists, designers, educators, and beginners, and reinterprets this for today’s web. Follow an interactive introduction at <a href="http://hello.p5js.org/">hello.p5js.org</a></p><p><a href="https://dixonandmoe.com/rellax/"><em>Rellax</em></a> is a buttery smooth, super lightweight (1021bytes gzipped), vanilla javascript parallax library that also works on mobile.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*oVgFnfcR61Q9MNsI5lXOBg.png" /></figure><p><a href="http://incheon.gg/"><em>Incheon</em></a><em> </em>is a real-time multiplayer game server based on Node.js. I can definitely see this coming in use soon..</p><p><a href="http://satyr.io/"><em>Satyr.io</em></a> is a useful dummy image generation service. They have all the usual features plus a bunch more, like network delays, logos for various well-known brands, and even flags of the world!</p><h3>📱 Apps</h3><p><a href="http://antipersona.co/"><em>Antipersona</em></a> is an app which lets you experience what it’s like to use Twitter as someone else for a day.</p><p><a href="https://medium.com/agorapulse-stories/the-31-tools-we-use-to-make-our-semi-remote-saas-team-work-efficiently-fd1e785492b9#.2osr6uyvd"><em>The 31 tools we use to make our “semi remote” SaaS team work efficiently</em></a> by <a href="https://medium.com/u/e0f17af6f860">Emeric Ernoult</a> lists many useful app that may help you and your team work.</p><p><a href="https://www.kitestring.io/"><em>Kitestring</em></a> checks up on you when you’re out and alerts your friends if you don’t respond. Best of all, the service is completely free but its SMS-based, so it isn’t strictly an app.. This is somewhat similar to the <a href="https://boybyebot.com/">Boy Bye Bot</a> for when you want to give a fake number ‘<em>for real fuckbois’.</em></p><h3>🍗 Interactive Team Activity</h3><p>You might have noticed that we are not the ‘Tech team’ any longer, this is because there has been a bit of a reshuffle at TMW. We are now the Interactive team. More on this soon. 😄</p><p>🗣 Vijay gave a brilliant #brunch&amp;learn talk about Docker. It will improve development and release workflow, and reduces costs that we can pass on to our clients. Look out for his post on Docker soon. 📦</p><p>💻 Dee has been creating an Amazon Alexa skill 🗣 prototype for one of our clients; it has already sparked a lot of interest from around the business and we look forward to trying out new skills in this exciting area.</p><p>💻 <a href="https://medium.com/u/a6cf81c6fa33">Ciaran </a>&amp; <a href="https://medium.com/u/4a12ef3de9fc">JP</a> have nearly completed a React app for an international bank. Watch this space for a write-up.</p><p>📖 <a href="https://medium.com/u/d983e3c81c52">Denzel</a> wrote an inspiring article about just getting out there and going for it; read it <a href="https://medium.com/@denz_brade/nobody-cares-so-just-do-you-92519f872710#.wl20c0dsr">here</a>. 👍</p><p>⚽ <a href="https://github.com/TryKickoff/kickoff">Kickoff</a> v8 is very close to being finished. The last bits to be added are for Statix and the Yeoman generator. The docs have been massively improved as well, you can sneak a peak at <a href="https://trykickoff.now.sh/"><em>trykickoff.now.sh</em></a>.</p><h3>👋</h3><p>If you have any comments or feedback, please let us know. If you have any suggestions for next month’s issue, please send a tweet to <a href="https://twitter.com/TMWInteractive">@TMWInteractive</a>.</p><p>P.S. Thanks for reading this far! If you found value in this, I’d really appreciate it if you recommend this post (by clicking the 💚 button) so other people can see it!. Don’t forget to follow the Interactive team on <a href="https://medium.com/tmw-interactive"><em>Medium</em></a> and on Twitter (<a href="https://twitter.com/TMWInteractive">@TMWInteractive</a>).</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4161d262ba23" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tmw-interactive/creative-technology-monthly-disappearing-interface-4161d262ba23">Creative Technology Monthly: Disappearing interface</a> was originally published in <a href="https://medium.com/tmw-interactive">TMW Interactive</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Canon — Immersive digital experience]]></title>
            <link>https://medium.com/tmw-interactive/canon-immersive-digital-experience-a3ee55ae37e4?source=rss----61f581092240---4</link>
            <guid isPermaLink="false">https://medium.com/p/a3ee55ae37e4</guid>
            <category><![CDATA[projects]]></category>
            <category><![CDATA[front-end-development]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[creative-technology]]></category>
            <dc:creator><![CDATA[Ciaran Park]]></dc:creator>
            <pubDate>Fri, 20 Jan 2017 17:18:21 GMT</pubDate>
            <atom:updated>2017-01-27T12:25:32.200Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/500/0*G89s-P1IJXFlGY6T." /></figure><p><strong>TMW Unlimited and Dalziel &amp; Pow created a bespoke solution that used the power of projection mapping to truly immerse consumers in beautiful 4k photography, demonstrating the abilities of Canon products.</strong></p><p>An installation to surprise and delight anyone whilst being straight forward enough for all to use and navigate, we wanted to create something for all levels of photographer and hobbyist.</p><p>Currently live in Stuttgart and Finland, with Moscow and Dubai launching soon, the team are releasing a CMS version which will allow all stores to choose specific products from the Canon Tridion CMS platform to show localised in their stores.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fplayer.vimeo.com%2Fvideo%2F148480662&amp;url=https%3A%2F%2Fvimeo.com%2F148480662&amp;image=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F547432549_1280.jpg&amp;key=d04bfffea46d4aeda930ec88cc64b87c&amp;type=text%2Fhtml&amp;schema=vimeo" width="1920" height="1080" frameborder="0" scrolling="no"><a href="https://medium.com/media/df32130e769c3baed55284aafc4238e1/href">https://medium.com/media/df32130e769c3baed55284aafc4238e1/href</a></iframe><p>Working with Dalziel &amp; Pow I lead the team in creating a new, interactive retail experience for a distinguished multinational client — Canon. With an increase in smartphone photography, the concept allows consumers to explore the benefits of Canon’s superior image quality and its product’s technical features.</p><p>Acting technical lead and creative consultant, I guided the development as well as being hands on from choosing platforms and implementation through to working with Canon’s CMS and content team.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/1*6k2UOODwy0yYdlIg_8KYPQ.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/1*9Et5o6iKAuUJr7knfila9w.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/1*hjkx-s_WZaJIQkfsf2SLYg.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/1*gz85HyM1mPRfO9HBTC1teQ.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/1*dPvQwvBJj4N2uflx8coNQA.jpeg" /></figure><p>Using a 4k screen, surrounding digital projections and a touchscreen, the app allows consumers to browse through Canon’s extensive camera range, read up on key features and project photography that has been taken with that particular camera. It’s an exciting concept that inspires the customer by demonstrating the capability of its cameras.</p><p>Utilising a wide range of technologies from projection mapping to the latest in javascript frameworks, the team built a system that is always listening and reacting to user input. Due to its modular design, the system allows an infinite amount of views or connections to enjoy the experience. Whether on tablet or using the core touchscreen, content was the focus whilst providing speed and quick responses across the entire system, this allowed each store (global markets) complete control for bespoke screen and device arrangement.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fplayer.vimeo.com%2Fvideo%2F184426744&amp;url=https%3A%2F%2Fvimeo.com%2F184426744&amp;image=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F593872469_1280.jpg&amp;key=d04bfffea46d4aeda930ec88cc64b87c&amp;type=text%2Fhtml&amp;schema=vimeo" width="1920" height="1080" frameborder="0" scrolling="no"><a href="https://medium.com/media/9ad5c9f9e7c6e65a151b37ddd775dcdc/href">https://medium.com/media/9ad5c9f9e7c6e65a151b37ddd775dcdc/href</a></iframe><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/1*aKVJjULkIajQfJYTSnTVEg.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/1*xbFI839n_gR-0usLdPO0GQ.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/1*vPl4XkQIi50a-zrEzrljtQ.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/1*1QfTFwtMJ65pPd0S8GM8MA.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/1*7Ri9osv5zr1WxMWBCtKZ8A.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/1*c_R1jqNtWy9SD3W_J01awg.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/1*AsG92Jal3TuEai6eWio3Kw.jpeg" /></figure><h3>Tech Stack</h3><ul><li>HTML5/CSS3</li><li>Javascript/Nodejs/Angular</li><li>Socket.io</li><li>ES6/Babel/Eslint</li><li>Grunt/SASS</li><li>Local Storage</li><li>Custom Metrics</li><li>Projection mapping</li><li>Canvas</li><li>4k Image/video delivery</li><li>GPU optimised rendering/animations</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a3ee55ae37e4" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tmw-interactive/canon-immersive-digital-experience-a3ee55ae37e4">Canon — Immersive digital experience</a> was originally published in <a href="https://medium.com/tmw-interactive">TMW Interactive</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to painlessly move Kickoff’s assets directory]]></title>
            <link>https://medium.com/tmw-interactive/how-to-painlessly-move-kickoff-s-assets-directory-7c8e0fc1d353?source=rss----61f581092240---4</link>
            <guid isPermaLink="false">https://medium.com/p/7c8e0fc1d353</guid>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[front-end-development]]></category>
            <category><![CDATA[kickoff]]></category>
            <category><![CDATA[web-development]]></category>
            <dc:creator><![CDATA[Zander Martineau]]></dc:creator>
            <pubDate>Fri, 20 Jan 2017 17:16:26 GMT</pubDate>
            <atom:updated>2016-11-16T12:37:30.007Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*t3WP3S5-2yt6WEmLkmevJg.jpeg" /></figure><p>Kickoff’s assets directory resides in the root of the repo, it contains the framework’s source and compiled files. What if you needed the assets directory, not to be served from there but from another location? For example, a Wordpress theme would ideally serve assets from within the <strong>wp-content/themes/</strong> directory. Wouldn’t trying such a thing be a massive pain in the arse? Normally I’d agree, but in Kickoff’s case its simple because we have a global config that allows developer to changes these kinds of things with extreme ease.</p><h4>Here’s what you do</h4><p>Apart from manually moving the directory, you need to edit 3 lines of Kickoff’s global Grunt config, in <a href="https://github.com/TryKickoff/kickoff/blob/master/_grunt-configs/config.js#L9-L11"><strong>_grunt-configs/config.js</strong></a> to be exact. <strong>Change the values on lines 9–11 to point to the new location</strong>, for example:</p><pre>srcDir  : ‘wp-content/themes/your-theme/assets/src’,<br>distDir : ‘wp-content/themes/your-theme/assets/dist’,<br>tempDir : ‘wp-content/themes/your-theme/assets/temp’,</pre><h4>And that’s it. But there’s more…</h4><p>As a bonus, you could separate the locations for <strong>assets/src</strong> and <strong>assets/dist</strong> as there’s no reason why they need to be together.</p><h4>#tipsForKickoff</h4><p>To find more tips like this for Kickoff, lookout for the <a href="https://twitter.com/hashtag/tipsForKickoff?f=tweets">#tipsForKickoff</a> hashtag</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7c8e0fc1d353" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tmw-interactive/how-to-painlessly-move-kickoff-s-assets-directory-7c8e0fc1d353">How to painlessly move Kickoff’s assets directory</a> was originally published in <a href="https://medium.com/tmw-interactive">TMW Interactive</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Improve website event tracking with trak.js]]></title>
            <link>https://medium.com/tmw-interactive/improve-website-event-tracking-with-trak-js-502f10763ead?source=rss----61f581092240---4</link>
            <guid isPermaLink="false">https://medium.com/p/502f10763ead</guid>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[npm]]></category>
            <category><![CDATA[google-analytics]]></category>
            <category><![CDATA[google-tag-manager]]></category>
            <category><![CDATA[front-end-development]]></category>
            <dc:creator><![CDATA[Zander Martineau]]></dc:creator>
            <pubDate>Fri, 20 Jan 2017 17:16:12 GMT</pubDate>
            <atom:updated>2016-11-16T12:36:07.026Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2AAEFIHAGhYIgPHgM_sOGA.jpeg" /></figure><p>Whether you use Google Analytics or another provider, adding tracking events to a site is often a painful experience. Events usually have to be defined in javascript which can make it tricky to dynamically change parameters based on certain criteria. Wouldn’t it be nice to define events within the markup so that hundreds of click events can be left free from your javascript code? Trak.js does just that.</p><p>Put simply, trak.js is a wrapper for any analytics API. By default it uses Google Universal Analytics but you can override this with the older ga.js or Google Tag Manager if you wish, or you can even add custom event trackers as well, instead of Google Analytics.</p><h3>Using trak.js</h3><p>There are two main ways to use trak.js, as <strong>data-trak</strong> attributes in your markup or in your javascript code.</p><h4>data-trak attr implementation:</h4><pre>&lt;a href=&quot;#pagehref&quot; data-trak=&#39;{&quot;category&quot;:&quot;Test category&quot;,&quot;action&quot;:&quot;Test action&quot;,&quot;label&quot;:&quot;Test label&quot;}&#39; title=&quot;1 title&quot;&gt;link&lt;/a&gt;</pre><h4>Custom trigger type (new as of v0.4.0)</h4><p>data-trak attrs can also define a custom trigger type instead of click. Now mouseover, touchstart, focus, blur or any other valid event can be used to trigger a trak event. Just add “trigger”: “eventName”to the options object. See below for an example of this using the focusevent:</p><pre><em>&lt;!-- Triggered on focus --&gt;</em><br>&lt;a data-trak=&#39;{&quot;trigger&quot;:&quot;focus&quot;,&quot;category&quot;:&quot;Test category&quot;,&quot;action&quot;:&quot;Test action&quot;,&quot;label&quot;:&quot;Test label&quot;}&#39; href=&quot;#pagehref&quot;&gt;Custom trigger type&lt;/a&gt;</pre><h4>Javascript implementation</h4><pre>trak.event({<br>    category<strong>:</strong> &#39;engagement&#39;,<br>    action<strong>:</strong> &#39;signpost&#39;,<br>    label<strong>:</strong> &#39;page.href&#39;<br>});</pre><pre>trak.event({<br>    category<strong>:</strong> &#39;engagement&#39;,<br>    action<strong>:</strong> &#39;signpost&#39;,<br>    label<strong>:</strong> &#39;page.href&#39;,<br>    value<strong>:</strong> 10,<br>    nonInteraction<strong>:</strong> <strong>true</strong>,<br>    eventName<strong>:</strong> &#39;This is a Google Tag Manager event name&#39;<br>});</pre><h3>API Reference</h3><h4>Arguments object: (these are all optional)</h4><p><strong>category:</strong> A string value of the category value to set<br><strong>action:</strong> A string value of the action value to set<br><strong>label:</strong> A string value of the label value to set<br><strong>value:</strong> An integer<br><strong>trigger:</strong> A string value of a valid event name: <em>click</em>, <em>focus</em>, <em>mouseover</em> etc<br><strong>nonInteraction:</strong> An integer<br><strong>eventName:</strong> A string value used only with Google Tag Manager. Define your GTM event name here</p><p>If any property is left <em>undefined</em>, the browser’s default value will be used instead.</p><h3>Wildcards</h3><p>trak.js introduces the concept of wildcards when working with your events, this makes it extremely easy to use more complex values in your events. There are a number of wildcards available for both the data-trakattr and js implentation. These can be used to specify certain options like the page title, the url, the current anchor’s href value and a few others.</p><ul><li><strong>page.href</strong> wildcard uses window.location.href as the value.</li><li><strong>page.title</strong> wildcard uses document.title as the value.</li><li><strong>link.href</strong> wildcard uses this.href as the value.</li><li><strong>link.title</strong> wildcard uses this.title as the value.</li><li><strong>referrer</strong> uses document.referrer as the value</li></ul><pre><em>&lt;!-- page.href wildcard --&gt;</em><br>&lt;a href=&quot;#&quot; data-trak=&#39;{&quot;category&quot;:&quot;Rating&quot;,&quot;action&quot;:&quot;page.href&quot;,&quot;label&quot;:&quot;Up&quot;}&#39;&gt;link&lt;/a&gt;</pre><pre><em>&lt;!-- page.title wildcard --&gt;</em><br>&lt;a href=&quot;#&quot; data-trak=&#39;{&quot;category&quot;:&quot;Rating&quot;,&quot;action&quot;:&quot;page.title&quot;,&quot;label&quot;:&quot;Up&quot;}&#39;&gt;link&lt;/a&gt;</pre><pre><em>&lt;!-- link.href wildcard --&gt;</em><br>&lt;a href=&quot;#&quot; data-trak=&#39;{&quot;category&quot;:&quot;Rating&quot;,&quot;action&quot;:&quot;link.href&quot;,&quot;label&quot;:&quot;Up&quot;}&#39;&gt;link&lt;/a&gt;</pre><pre><em>&lt;!-- link.title wildcard --&gt;</em><br>&lt;a href=&quot;#&quot; data-trak=&#39;{&quot;category&quot;:&quot;Rating&quot;,&quot;action&quot;:&quot;link.title&quot;,&quot;label&quot;:&quot;Up&quot;}&#39;&gt;link&lt;/a&gt;</pre><pre><em>&lt;!-- referrer wildcard --&gt;</em><br>&lt;a href=&quot;#&quot; data-trak=&#39;{&quot;category&quot;:&quot;Rating&quot;,&quot;action&quot;:&quot;document.referrer&quot;,&quot;label&quot;:&quot;Up&quot;}&#39;&gt;link&lt;/a&gt;</pre><h3>Getting the Library</h3><h4>Direct downloads</h4><ul><li><a href="https://cdn.rawgit.com/mrmartineau/trak.js/master/dist/trak.min.js">Minified</a> (~481 B gzipped)</li><li><a href="https://cdn.rawgit.com/mrmartineau/trak.js/master/dist/trak.js">Unminified</a> (~1.7 KB gzipped)</li></ul><h4>Bower</h4><p><strong>bower install trak</strong></p><h4>NPM</h4><p><strong>npm install trak.js -S</strong></p><h3>More information</h3><p>More information and the full documentation can be found at our repository on <a href="https://github.com/mrmartineau/trak.js">Github</a>. Also, options can be overridden; there’s a debug mode; and most importantly, almost any other analytics APIs can be used.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=502f10763ead" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tmw-interactive/improve-website-event-tracking-with-trak-js-502f10763ead">Improve website event tracking with trak.js</a> was originally published in <a href="https://medium.com/tmw-interactive">TMW Interactive</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Using animated GIFs in Email]]></title>
            <link>https://medium.com/tmw-interactive/using-animated-gifs-in-email-4dee1b5a4b93?source=rss----61f581092240---4</link>
            <guid isPermaLink="false">https://medium.com/p/4dee1b5a4b93</guid>
            <category><![CDATA[gif]]></category>
            <category><![CDATA[email]]></category>
            <category><![CDATA[marketing]]></category>
            <dc:creator><![CDATA[Ryan Hickling]]></dc:creator>
            <pubDate>Fri, 20 Jan 2017 17:15:09 GMT</pubDate>
            <atom:updated>2017-01-20T17:15:33.138Z</atom:updated>
            <content:encoded><![CDATA[<p>Using animation within your email campaigns can be an effective way to bring attention to your message. They are commonly used to make your call to action stand out or just add a little fun to your email.</p><p>People often ask me about best practices when it comes to using GIFs within email. These include technical considerations, size limits and how best to use them. Fortunately there are some really simple steps you can follow to ensure your animation rocks.</p><h4>Simple GIF guidance:</h4><ul><li>Keep your GIF file size as small as possible whilst maintaining quality</li><li>Make sure the first frame of the animation is something you wish users to see should their email client not support it (e.g. Outlook on the desktop)</li><li>Be subtle with your animation (this is an email so we’re not trying to include an entire movie scene here)</li><li>GIFs are suited to animate illustrations not necessarily photo realism</li></ul><p>I know you&#39;ve all been waiting for them… So here are a few examples I&#39;ve spotted in the wild by various brands:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/320/1*NUe40fipdAIruQQ5NuEo7Q.gif" /><figcaption>HSBC rolling out their new mobile authentication app.</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/245/1*IWM61wOcO87u9U6G56fwBg.gif" /><figcaption>Subtle animation used to highlight a call to action.</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/642/1*vTqP3aGkjpqpk2xtHtqIWQ.gif" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/614/1*mgExKsQSrcibzO_c1MQL9w.gif" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/600/1*clxYJnFMC2lPsWM9Rd8s-Q.gif" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/768/1*DhLNEm57wwXM_PFImEyw6A.gif" /><figcaption>Credit for GIFs below</figcaption></figure><p>The above GIFs obviously had a lot of time and effort put into them. Three of these can be described as cinemagraphs. This is where a single frame on it’s own would make for a good photograph yet part of the image is subject to movement or animation.</p><p>When using Cinemagraphs you will want to be careful with file sizes as they can quite easily become too large and take forever to download on a slow mobile connection. They’re so heavy that they even took a while to load on Medium over my work connection.</p><p><a href="http://www.reddit.com/r/cinemagraphs">Check here</a> for more cinemagraph inspiration on Reddit.</p><p>Here are some final examples then I promise that’s it. No more GIF spam.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/600/1*YxkiSe4qwHJycoxmEUpMUg.gif" /></figure><p>Here we have a GIF from Campaign Monitor. Useful for explaining new system features.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/670/1*1dsno9nbipOoVwPkT5wFeA.gif" /></figure><p>The subtle use of movement on the present above adds a little intrigue to this customer offer email.</p><p>Time for a little expanding on my simple guidance list above.</p><h4>How large should my GIF file size be?</h4><p>So you want to make an awesome looking GIF but you’re not sure on the file size you should be aiming for. I&#39;m often asked what the maximum size of the file should be but I’ll never give you an exact answer.</p><p>When creating your GIF the answer will depend on:</p><ul><li>The design of your GIF</li><li>What you intend to accomplish</li><li>A little common sense when it comes to knowing your target audience</li></ul><p>You’ll know that the more data a user has to download the longer it will take to display. You also need to keep in mind that many users will be opening your emails on mobile devices which means they could be on slower connections and a data usage tariff. As such it’s probably unreasonable to hit them with anything large in size.</p><p>To give you an indication of download speeds available over mobile here in the UK <a href="http://stakeholders.ofcom.org.uk/binaries/research/broadband-research/mbb-nov14.pdf">this report</a> from Ofcom states that the average 3G connection speed in several major cities is currently 6.1Mbps.</p><p>This is by no means a highly accurate representation of the entire country.</p><p>Taking the average 3G connection speed of 6.1Mbps if you were to create a 500KB animated GIF, in theory, this would take 0.65 seconds to download. You can easily get results for yourself by typing something like this into Google:</p><p><strong><em>500 kb over 6.1mbps</em></strong></p><p>It’s up to you to decide if that’s acceptable for your users. Why not test it? Also keep in mind the total weight of your email. Not just the animated GIF.</p><p>Some email broadcasters will also limit the file size of images they broadcast. This is a defensive measure on their part to help prevent accidental emailing of large files to potentially millions of people. That 500KB GIF you have sent to a million people, even if hosted on a server, is a lot of bandwidth. Make sure to check with your email broadcaster on size limits.</p><h4>Final Thoughts</h4><p>The nature of the GIF file format is optimised for use with solid colours rather than gradients. This is down to the compression algorithms used within the format being more efficient at storing areas of solid colours than say the constantly changing shades of colours found within photos or gradient effects.</p><p>This means GIFs in general lend themselves to more illustrative purposes rather than photo realism. Obviously, just like the cinemagraphs above, as long as you are careful there are exceptions.</p><p>GIFs become animated by adding additional frames to the file. Therefore the longer your animation runs the larger your file size will be. This is primarily the reason why you should be aiming to keep your animation as short and as subtle as possible. Perhaps aim to make it look great whilst looping rather than animating something once and stopping.</p><p>Hopefully after reading all of this you now have enough information in order to know when you should and should not use GIFs within your campaigns. Also how to make them as effective as possible when using within emails.</p><p><strong>Now go get creative!</strong></p><p><em>For further reading and credit to people whose GIF’s I may have re-used above check out these great posts on the same subject:</em></p><p><a href="https://litmus.com/blog/a-guide-to-animated-gifs-in-email"><em>https://litmus.com/blog/a-guide-to-animated-gifs-in-email</em></a><em><br></em><a href="https://www.campaignmonitor.com/blog/post/3682/animated-gif-support-in-email/"><em>https://www.campaignmonitor.com/blog/post/3682/animated-gif-support-in-email/</em></a><em><br></em><a href="http://www.adestra.com/using-animated-gifs-emails/"><em>http://www.adestra.com/using-animated-gifs-emails/</em></a><em><br></em><a href="http://blog.raventools.com/animated-gifs-in-emails/"><em>http://blog.raventools.com/animated-gifs-in-emails/</em></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4dee1b5a4b93" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tmw-interactive/using-animated-gifs-in-email-4dee1b5a4b93">Using animated GIFs in Email</a> was originally published in <a href="https://medium.com/tmw-interactive">TMW Interactive</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>