<?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[Stories by David Leuliette on Medium]]></title>
        <description><![CDATA[Stories by David Leuliette on Medium]]></description>
        <link>https://medium.com/@flexbox?source=rss-cc5b33b54088------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/2*hTEmnV-auZyOvq_Wi8kJTw.jpeg</url>
            <title>Stories by David Leuliette on Medium</title>
            <link>https://medium.com/@flexbox?source=rss-cc5b33b54088------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 06 Jun 2026 13:07:17 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@flexbox/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[5 simple steps to use pricmic.io with Nx and Next.js]]></title>
            <link>https://flexbox.medium.com/5-simple-steps-to-use-pricmic-io-with-nx-and-next-js-c8051facbf54?source=rss-cc5b33b54088------2</link>
            <guid isPermaLink="false">https://medium.com/p/c8051facbf54</guid>
            <category><![CDATA[vercel]]></category>
            <category><![CDATA[react]]></category>
            <category><![CDATA[development]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[productivity]]></category>
            <dc:creator><![CDATA[David Leuliette]]></dc:creator>
            <pubDate>Thu, 13 Oct 2022 20:10:14 GMT</pubDate>
            <atom:updated>2022-10-13T20:26:20.656Z</atom:updated>
            <content:encoded><![CDATA[<p>For my <a href="https://weshipit.today/">brand new website</a> I wanted to use prismic as I do on my <a href="https://davidl.fr/blog">personal website</a>. Both are Next.js project, the prismic documentation is pretty neat, so what could go wrong?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*njsn4MFA_XzM4wbMCKWw5Q.jpeg" /><figcaption>A rare picture of a monorepo by <a href="http://twitter.com/clembazard">@clembazard</a> on Unsplash</figcaption></figure><p><strong>The problem</strong> I am using Nx — <em>an awesome tool for handling monorepo complexity</em> — and the folders architecture is not really what expect the new slicemachine feature from prismic.</p><pre># What I have<br><br>./apps/weshipit/next-*.files<br>./node_modules/<br>./package.json</pre><pre># What slicemachine want<br><br>./next-*.files<br>./node_modules/<br>./package.json</pre><p>Here are 5 simple steps to solve this problem.</p><h4>Create manually the types on Prismic</h4><p>As I said using slicemachine is tricky in a monorepo. I am not the only one who <a href="https://community.prismic.io/t/slicemachine-in-monorepo/10579">is struggling with that</a>.</p><p>If I use npm run slicemachine —after the setup— at the root level. I encountered issues.</p><p>If I use npm run slicemachine —after the setup— at project level. I encountered issues.</p><p>So I decided to…</p><p>🥁</p><p>Create new repository with “another framework” — because slicemachine does not plays well with Nx architecture.</p><figure><img alt="add a framework on prismic.io" src="https://cdn-images-1.medium.com/proxy/1*33fqAPnLyn0bch4rPErPnw.png" /><figcaption>add a framework on prismic.io</figcaption></figure><p>And choose plain React.</p><p>Don’t panic we are going to use SRR feature from Next.js later in this article.</p><figure><img alt="Select React.js" src="https://cdn-images-1.medium.com/proxy/1*OktrUiIGX1C6n1gGp-FSIA.png" /><figcaption>Select React.js</figcaption></figure><p>Finally, manually create your new type.</p><figure><img alt="" src="https://cdn-images-1.medium.com/proxy/1*NUU_1H0kOQHBEZ1vD6rLKw.png" /></figure><h4>Install Prismic to your Nx monorepo</h4><p>Run this command in your terminal to install the Prismic React integration and client library</p><pre>yarn add @prismicio/react @prismicio/client</pre><p>Create your API client</p><pre>// ./apps/weshipit/pages/api/prismic.ts<br><br>import * as prismic from &#39;@prismicio/client&#39;;<br><br>// Fill in your repository name<br>export const repositoryName = &#39;weshipit&#39;;<br><br>export const client = prismic.createClient(repositoryName, {<br>  routes: [<br>    {<br>      type: &#39;client&#39;,<br>      path: &#39;/&#39;,<br>    },<br>  ],<br>});</pre><p>We want to have the PrismicProvider component available in our entire project by updating _app.tsx</p><pre>// ./apps/weshipit/pages/_app.tsx <br><br>import { AppProps } from &#39;next/app&#39;;<br>import Head from &#39;next/head&#39;;<br><br>import { PrismicProvider } from &#39;@prismicio/react&#39;;<br>import { client } from &#39;../prismic&#39;;<br><br>function CustomApp({ Component, pageProps }: AppProps) {<br>  return (<br>    &lt;PrismicProvider client={client}&gt;     &lt;------- add this<br>      &lt;Head&gt;<br>        &lt;title&gt;weshipit.today — React Native Experts&lt;/title&gt;<br>      &lt;/Head&gt;<br>      &lt;main&gt;<br>        &lt;Component {...pageProps} /&gt;<br>      &lt;/main&gt;<br>    &lt;/PrismicProvider&gt;<br>  );<br>}<br><br>export default CustomApp;</pre><h4>Create a local /api</h4><p>Following Next.js the documentation</p><blockquote>Any file inside the folder pages/api is mapped to /api/ and will be treated as an API endpoint instead of a page.</blockquote><p>That’s what I created to get my data to render the list of my clients.</p><pre>// apps/weshipit/pages/api/client.ts<br><br>import { client as prismicClient } from &#39;./prismic&#39;;<br><br>export async function getAllClients() {<br>  try {<br>    const clients = await prismicClient.getAllByType(&#39;client&#39;);<br><br>    return {<br>      clients: clients ? clients : [],<br>    };<br>  } catch (error) {<br>    console.error(&#39;getAllClients -&gt; error&#39;, error);<br>    return error;<br>  }<br>}</pre><h4>getInitialProps and render data to your page</h4><p>I can pull the data to render <a href="https://weshipit.today/clients">my clients page</a>.</p><pre>// apps/weshipit/pages/clients.ts<br><br>export default function ClientsPage({ clients }: clientsPageProps) {<br>  return (<br>    &lt;div&gt;<br>      {clients.map((client) =&gt; (<br>        &lt;div key={client.id}&gt;<br>          &lt;Text&gt;{client.data.name}&lt;/Text&gt;<br>        &lt;/div&gt;<br>      ))}<br>    &lt;/div&gt;<br>  );<br>}<br><br>ClientsPage.getInitialProps = async function () {<br>  const clients = await getAllClients();<br>  return clients;<br>};</pre><h4>Release to prod</h4><p>The last step is releasing to production. Using vercel on the project settings page you will need to override build settings.</p><p>Build command</p><pre>npx nx build weshipit --prod</pre><p>Output directory</p><pre>dist/apps/weshipit/.next</pre><figure><img alt="" src="https://cdn-images-1.medium.com/proxy/1*wsPM0srbvqBpbNj940tEFg.png" /></figure><p>This is not perfect, but it’s working and <a href="https://weshipit.today/">weshipit.today</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c8051facbf54" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How I wrote and published The Road to React Native book]]></title>
            <link>https://flexbox.medium.com/how-i-wrote-and-published-the-road-to-react-native-book-7ca80fa2fd88?source=rss-cc5b33b54088------2</link>
            <guid isPermaLink="false">https://medium.com/p/7ca80fa2fd88</guid>
            <category><![CDATA[indie]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[gumroad]]></category>
            <category><![CDATA[react-native]]></category>
            <category><![CDATA[reading]]></category>
            <dc:creator><![CDATA[David Leuliette]]></dc:creator>
            <pubDate>Tue, 12 Jan 2021 17:59:13 GMT</pubDate>
            <atom:updated>2021-04-25T14:56:14.586Z</atom:updated>
            <content:encoded><![CDATA[<h4>You may ask yourself, what are the different steps to create and publish a book?</h4><p>In this article, I will show you the different tools I used, to write my book and grow my audience to get my first 30 sales.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Kehj5kBycO0Z7iGG1ZUULQ.jpeg" /></figure><p><a href="https://zoom.us/meeting/register/tJ0rdeqtqT8rGdfq8w4O2BiRwo3bgfVMysXo">Feel free to join our official launch on Zoom</a></p><p><strong>Requirements</strong> (<em>you will need to have an account on different tools</em>)</p><ul><li><a href="https://go.setapp.com/invite/ibubjrhl">Ulysses App</a></li><li>Figma</li><li><a href="https://gumroad.com/signup?referrer=flexbox">Gumroad</a></li><li>Zapier</li><li>Slack</li><li><a href="https://airtable.com/invite/r/C9rp2zWJ">Airtable</a></li></ul><h3>Writing</h3><p>I think I tried all the writing applications available. <strong>Ulysses app is just the best one.</strong></p><p>I am writing this article on Ulysses, when it’s done I can just publish it on Medium. If I change my mind, I can export the content to .markdown, .pdf, or even .epub. This gives me the opportunity to be &quot;platform agnostic&quot; and quickly iterate on the content with a single source of truth.</p><p>From a pure content perspective, my <a href="https://davidl.fr/road-to-react-native">React Native Book</a> is about my experience as a coach during workshops and as a freelance engineer.</p><blockquote>I started out naïve in 2016 and made all the little mistakes you could make.</blockquote><p>It’s not a book about pure coding examples. O’reilly Books are already doing a really good job if you want to learn an entire entire programming language. My content is around the ecosystem, my experience as a coach and how I connected all the small dots to create and release mobile applications.</p><p>That’s my targeted niche, writing a pure technology book doesn’t make sense because all the API’s are changing every day in the JavaScript ecosystem.</p><p>My approach here is to have <a href="https://www.wordstream.com/blog/ws/2012/10/16/guide-to-evergreen-content-marketing">evergreen content</a>. It’s a win-win situation because: I can share the book after/before my workshops, I can sell it as a stand-alone content, or eventually, it could give me new leads as a <a href="https://davidl.fr">React Native freelancer</a>.</p><figure><img alt="For examples, I choose &quot;The Lord of The Ring&quot; ones" src="https://cdn-images-1.medium.com/proxy/1*oByKTwIYhjRmD10zifzhRQ.png" /><figcaption>For examples, I choose “The Lord of The Ring” ones</figcaption></figure><p>Ulysse is a paid app and <a href="https://go.setapp.com/invite/ibubjrhl">I am using setapp andhave access to tons of utilities</a> like this to get faster on my daily job.</p><p>The writing experience is nice and clean. I used only one file and I was focus on one thing: write as fast as possible and spend more time on client acquisition, and get back on content after.</p><p>I spent almost 10 minutes writing down this summary:</p><ul><li>JavaScript syntax</li><li>React syntax</li><li>JavaScript Language</li><li>Data Structures</li><li>General APIs</li><li>Other Features</li><li>TypeScript</li><li>Front-end Frameworks</li><li>Data Layer</li><li>Back-end Frameworks</li><li>Testing</li><li>Build tools</li><li>Other tools</li><li>Resources</li></ul><p>When I was frustrated with the quality of the content — I knew I could have spent more time on the writing phase — I started the next step: design and client acquisition.</p><blockquote>There is no point to continue working on the content if nobody is interested.</blockquote><p>We can write entire books on each topic, but that’s not the point. My mission is to summarize everything in a quick to read and comprehensive book.</p><h3>Design</h3><p>You are going to need a bunch of assets for marketing purposes, I decided to jump on Figma — a collaborative web-based vector editor and UX design tool.</p><p>I love <a href="https://www.figma.com/@flexbox">Figma</a> because all the Images, icons and theme for my website are created there. I already have all the font styles and colors to keep some consistency.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gMzdgWZ24PbGUs3K43SpwA.gif" /><figcaption>Creating your first image on Figma</figcaption></figure><ul><li>F: create a new frame</li><li>T: add a text</li></ul><p>I started creating the cover page of my book about React Native with this title:</p><blockquote>The Roadmap to Become a React Native Developer</blockquote><p>After my first design, I immediately shared it on slack and one of my friends <a href="https://medium.com/u/443d2407d034">M&#39;Hamed Larbi</a> said</p><figure><img alt="" src="https://cdn-images-1.medium.com/proxy/1*clMODgoCQyDAMhJR8_Rm5Q.png" /></figure><blockquote>You should rename it, Road to React — like Naruto</blockquote><p>Well that makes sense, keep your name simple is good advice but I already started my design and content around Lord Of The Ring. <br><br>Let’s ship it with: <strong>Road to React Native</strong>.</p><figure><img alt="On our way to Mordor" src="https://cdn-images-1.medium.com/proxy/1*QNiKvBmaa0K3Qe-VaFbq6Q.png" /><figcaption>On our way to Mordor</figcaption></figure><p>If you want to have a reference for the next design resources used you can have a look at the Figma file.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.figma.com%2Fembed%3Fembed_host%3Doembed%26url%3Dhttps%3A%2F%2Fwww.figma.com%2Ffile%2F0hlIFXP2WPVeFUGXMYFlvN%2Fnew.davidl.fr%3Fnode-id%3D555%253A95&amp;display_name=Figma&amp;url=https%3A%2F%2Fwww.figma.com%2Ffile%2F0hlIFXP2WPVeFUGXMYFlvN%2Fnew.davidl.fr%3Fnode-id%3D555%253A95&amp;image=https%3A%2F%2Fapi-cdn.figma.com%2Fresize%2Fthumbnails%2Fc28e7b2b-2dcb-45a8-a580-2b3c6fb18c98%3Fheight%3D413%26bucket%3Dfigma-alpha&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=figma" width="800" height="450" frameborder="0" scrolling="no"><a href="https://medium.com/media/2d862e0322c0fe3b3f08e16dc355225c/href">https://medium.com/media/2d862e0322c0fe3b3f08e16dc355225c/href</a></iframe><h3>Distribution</h3><p>In every kind of business, distribution is one of the most important things. It can become complex quickly with payments, refunds, analytics…</p><p>To solve this problem, it’s really simple, here is what you need to do:</p><ol><li>Create a <a href="https://gumroad.com/signup?referrer=flexbox">new product on Gumroad</a>.</li><li>Export the content from Ulysses as a .pdf and .epub and import the files.</li><li>Add a nice cover from Figma</li><li>Define your pricing</li></ol><figure><img alt="Community, Bronze, Iron and Gold Tiers" src="https://cdn-images-1.medium.com/proxy/1*fsiioYRRm1_pijIcTEJvxQ.png" /><figcaption>Community, Bronze, Iron and Gold Tiers</figcaption></figure><p>With my product distribution hosted on <a href="https://gumroad.com/signup?referrer=flexbox">Gumroad</a>, I have a piece of mind in terms of sales. I can focus on customer acquisition and connect some integrations to automate my job with Zapier.</p><h4>Landing page</h4><p>You can use Gumroad to have a landing page with an URL like this</p><p><a href="https://gum.co/road-react-native">https://gum.co/road-react-native</a></p><p>or create a custom one like me <a href="https://davidl.fr/road-to-react-native">https://davidl.fr/road-to-react-native</a></p><p>I decided to create a <a href="https://davidl.fr/road-to-react-native">custom landing page for my book</a> because it’s my job as a developer and it’s more flexible. I added a terrible video, made with Loom just in 5 minutes, because I wanted to quickly ship the page.</p><h4>Definition of success</h4><p>One my my top 3 question I am asking during client interview is “What is your definition of success”. Answers can vary a lot, depending on the project and the team. With my book, my definition of success is making people happy and make 100 sales in less than 6 months.</p><p><strong>That’s why I need KPI.</strong></p><p>Key Performance Indicators are important. You need to measure if your actions have an impact. To gain momentum and keep a simple overview of my sales in one single place, I decided to centralize everything on Slack.<br><br>You can add <a href="https://zapier.com/apps/gumroad/integrations/slack">Gumroad notification to slack with Zapier</a>.</p><figure><img alt="Connect Zapier and Gumroad" src="https://cdn-images-1.medium.com/proxy/1*t4tqWk6KDJdLdta1HStjYg.png" /><figcaption>Connect Zapier and Gumroad</figcaption></figure><figure><img alt="Get real time updates on your sales" src="https://cdn-images-1.medium.com/proxy/1*XcTqV5ofPHZZDt2Eb_dvAQ.png" /><figcaption>Get real time updates on your sales</figcaption></figure><p>With this system in place, I know if I have an impact on my sales when I share the link of my landing page somewhere.</p><h3>Growth</h3><p>From my perspective, this part is the more complex one because you never know where to start.</p><p>I silently launched the book in this order, on differents platforms</p><ul><li>Friends on Whatsapp — basically chasing 1 by 1 some olds coworkers</li><li>Friends on Slack — “spamming” all channels but without using @channel</li><li>Facebook group about React Native</li><li><a href="https://www.indiehackers.com/product/road-to-react-native">Indiehackers</a> — where I blog about the milestones</li><li><a href="https://www.reddit.com/r/reactnative/comments/kr1jpe/the_roadmap_to_become_a_react_native_developer/">Reddit</a>— <a href="https://medium.com/u/82fd0c0cac4c">Xavier</a> advised me this one and the results were great!</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*5oFw0cfNtx2PRQCpQLFplQ.png" /><figcaption>I saw your post on Reddit and I contacted you on LinkedIn 🚀</figcaption></figure><h3>Feedback</h3><p>In the IT industry, iterations are part of the process to deliver quality software. That’s why we need a system to get constants feedback in order to improve our product.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/400/1*pwLKjRQ20kMiWH7IWrZyjQ.png" /><figcaption>I track my new sales AND message sent</figcaption></figure><p>When I am writing this article this step is manual. I can create an automated <a href="https://help.gumroad.com/article/131-using-workflows-to-send-automated-updates">workflow on Gumroad</a> or a <a href="https://mailchimp.com/andco/resources/issue-05-automating-potential-leads/">nurturing on mailchimp</a> if I have too many sales.</p><p>If you download the book, I am going to send you this message 48h later.</p><blockquote>Hey!</blockquote><blockquote>Thank you for pre-ordering a copy of The Road to React Native.</blockquote><blockquote>The response has been good and has made me even more excited to add more content. Until the book is launched officially, I’m going to update it with your feedback.<br>In order to improve the quality, can you take 3:14 min (on average) to complete this form?</blockquote><blockquote><a href="https://airtable.com/shryhiyeYRG2Xh5Ey">https://airtable.com/shryhiyeYRG2Xh5Ey</a></blockquote><blockquote>Or simply answer this email but please be brutally honest, I love having feedback — even bad ones — because it allows me to create better content for everyone.</blockquote><p>That’s my second KPI. Asking to fill a simple form with a <a href="https://www.netpromoter.com/know/">NPS score</a>.</p><p>I use <a href="https://medium.com/u/40fe149223fd">Airtable</a>, because all my data about <a href="https://davidl.fr/blog/freelance-airtable-autopilot">my freelance customers are there</a>. Think of it as an excel spreadsheet on steroids. A really useful feature is how you can create a simple form to collect pieces of information.</p><ol><li>Create a <strong>new empty table</strong> with these <strong>fields</strong></li></ol><ul><li><strong>Email:</strong> type email</li><li><strong>Rating: </strong>type rating</li><li><strong>Why?: </strong>type longtext</li><li><strong>Make it better: </strong>type longtext</li><li><strong>Misc: </strong>type longtext</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/974/1*1OSeDhEcbSskC6Bljpb-Og.png" /></figure><p>2. Create a new <strong>form view </strong>and 💥 you have a nice form</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/659/1*Jq8Gbz2J86ILkjUJRaqE6Q.png" /></figure><p>I added a Slack notification for each new record on the Airtable database.</p><figure><img alt="Add slack notifications" src="https://cdn-images-1.medium.com/proxy/1*52wsbot4zg3kgCx31_6B_Q.png" /><figcaption>Add slack notifications</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/proxy/1*8G_ZApfurmHWqYF3H-JjmA.png" /><figcaption>Instant feedback from Airtable to Slack</figcaption></figure><p>Thank you for this feedback, I know since day one I should write an introduction but this customer confirmed my assumption.</p><h3>Next steps</h3><p>From an NPS perspective, my notes are between 2 and 8.</p><p>That’s a good news, some people like the content and found it useful and some people don’t. That means I have 2 solutions: improve the content OR target another niche of people.</p><p>My next steps are updating the content according to feedbacks I had and continue my work on the growth:</p><ul><li>Write an email to my mailing list</li><li><a href="https://gumroad.com/a/568587379%20">Promote my book with SpreadTheWorld</a> — a database of 400+ hand-curated places.</li><li>Prepare a launch on Product Hunt after my 5 paid sales.</li></ul><p>If you liked this article, check out:</p><ul><li><a href="https://davidl.fr/road-to-react-native">The ebook landing page</a></li><li><a href="https://medium.com/react-finland/what-i-learned-at-react-finland-workshop-with-nik-graf-99c37dc1d8c1">What did I learned during workshops at React Finland</a></li></ul><p>If you want to learn more and improve your skills, you can <a href="https://twitter.com/flexbox_"><strong>follow me on Twitter</strong></a> as I continue to document my journey.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7ca80fa2fd88" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[My Growth Hack Checklist for Spotify]]></title>
            <link>https://flexbox.medium.com/how-i-got-more-than-4000-followers-on-spotify-ae4bcb6d6e73?source=rss-cc5b33b54088------2</link>
            <guid isPermaLink="false">https://medium.com/p/ae4bcb6d6e73</guid>
            <category><![CDATA[seo]]></category>
            <category><![CDATA[growth-hacking]]></category>
            <category><![CDATA[music]]></category>
            <category><![CDATA[growth]]></category>
            <category><![CDATA[spotify]]></category>
            <dc:creator><![CDATA[David Leuliette]]></dc:creator>
            <pubDate>Mon, 27 Apr 2020 08:29:49 GMT</pubDate>
            <atom:updated>2021-04-25T14:40:52.975Z</atom:updated>
            <content:encoded><![CDATA[<h3>How to get 4000+ followers on Spotify</h3><p>If you know me personally, you may have noticed that I have a passion for music. I am always keen on going to music festivals to see live gigs.</p><p>That’s why I am a paid Spotify user since day one.</p><p>When I am working, I am always listening to some music for<strong> getting into the zone</strong>.</p><p>I started to create some playlist for focusing on my work during my coding sessions. During the process, I followed a growth strategy based on SEO.</p><p>Nowadays, I am contacted by artists themselves to add some music, <a href="https://davidl.fr/featured">was interview</a> on specialized websites and even getting paid to promote artists on my playlists.</p><h4>My SEO Growth Hack Checklist for Spotify</h4><ol><li>I choose a keyword: <strong>Mixtape</strong></li><li>Second keyword: <strong>coding</strong></li><li>When you hit 50 sounds, create a new playlist by adding a new keyword.</li></ol><p>On my case I have:</p><ul><li>Mixtape for coding</li><li>Rock Mixtape for coding</li><li>Movies Mixtape for coding</li><li>Electro Mixtape for coding</li><li>…</li></ul><p>Simple right?</p><p>All my playlists are available on my website.</p><p><a href="https://davidl.fr/music">David Leuliette</a></p><h4>Design template for your playlists</h4><p>Famous Youtubers spend hours to create the thumbnails of their videos.</p><p>In my case, I used Figma with nice colored gradients.</p><figure><img alt="" src="https://cdn-images-1.medium.com/proxy/1*uzNwtUQB31GOc7nezIMdmw.png" /></figure><p>Here is the Figma Template. If you want to use it, feel free to duplicate</p><p><a href="https://www.figma.com/community/file/831886749337476100/Spotify-Playlists-Template">Figma - Spotify Playlists Template | ## Grow your presence as a music curator on Spotify Welcome to my Spotify Playlists Template. Th...</a></p><p>—</p><p>That’s it for today.<br>Don’t forget to send me your playlists, I am always looking for new sounds.</p><p>If you liked this article, check out:</p><ul><li><a href="https://blog.usejournal.com/tinder-hack-b004037128c">In short, I hacked Tinder</a></li><li><a href="https://flexbox.medium.com/project-management-for-hackers-3bdcaf03dece">Project management for Hackers</a></li></ul><p>If you want to learn more and improve your skills, you can <a href="https://twitter.com/flexbox_"><strong>follow me on Twitter</strong></a> as I continue to document my journey.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ae4bcb6d6e73" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to build DIY ergonomic desk for less than 99€]]></title>
            <link>https://flexbox.medium.com/how-to-build-diy-ergonomic-desk-for-less-than-99-82fa51a0d98e?source=rss-cc5b33b54088------2</link>
            <guid isPermaLink="false">https://medium.com/p/82fa51a0d98e</guid>
            <category><![CDATA[freelancing]]></category>
            <category><![CDATA[life]]></category>
            <category><![CDATA[productivity]]></category>
            <category><![CDATA[remote-working]]></category>
            <category><![CDATA[health]]></category>
            <dc:creator><![CDATA[David Leuliette]]></dc:creator>
            <pubDate>Sun, 05 Jan 2020 14:16:45 GMT</pubDate>
            <atom:updated>2021-04-25T15:01:20.227Z</atom:updated>
            <content:encoded><![CDATA[<h3>How I built my DIY ergonomic desk for less than 99€</h3><h4>Improve productivity and health.</h4><p>As a <a href="https://davidl.fr/">freelance React Native developer</a>, My weekly routine is working 4 days per week for a client based in London, and one day per week — on-site — in for a French client. Since I am <strong>working remotely mostly from home</strong>, I needed to have a decent office.</p><blockquote>You can design your perfect productive environment</blockquote><p>I had 2 constraints: <em>budget</em> and <em>space</em>. There is tons of <a href="https://www.opendesk.cc/">affordable desk available</a> on the internet but they are not working on my case because:</p><ol><li>I am super tall <em>(1m98)</em></li><li>I just moved back to France into my girlfriend’s flat and I don’t have a dedicated room to work.</li><li>I need to fix my desk on one wall.</li></ol><h4>Step 1: Collect materials</h4><p>If you want to make your own DIY desk, just start by taking the measurement for the woods boards. In my case, <strong>space is a big requirement</strong>, so I choose to have only one big metal adjustable foot. I <a href="https://www.ikea.com/fr/fr/p/gerton-pied-reglable-chrome-60261626/">found the GERTON one on IKEA</a>.</p><p>I cheated a little bit at this point, because my parents are living in the countryside. They helped me with the painting and cutting the wood boards. And they have all the tools whereas in my flat in the city I don’t have a garage.</p><figure><img alt="Painting in progress" src="https://cdn-images-1.medium.com/proxy/1*k8vAcF_rid0t3BKF12MSmQ.jpeg" /><figcaption>Painting in progress</figcaption></figure><p>As a design Engineer, I didn’t forget to add an Apple-style curve to one of the edges. Back home, I had everything ready to fix on the wall.</p><figure><img alt="Need to find the prefect wall for this" src="https://cdn-images-1.medium.com/proxy/1*rZrGdCkxf3rvoqQLqqpdBQ.png" /><figcaption>Need to find the prefect wall for this</figcaption></figure><p><em>Recap:</em></p><ul><li>2 wood boards</li><li>2 wood rails</li><li>2 metal</li><li>8 ankles for plaster</li><li>1 adjustable metal foot</li><li>(optional) White painting</li></ul><p>All theses materials should cost less than 99€, my biggest expense was the ajustable metal foot 39€.</p><h4>Step 2: Ergonomic metrics</h4><p>Do you know there are rules for ergonomics desks? I worked for ages in different companies in an open space where <strong>these rules are simply ignored</strong>. I understand that at scale, people in charge of furniture are using excels spreadsheets to calculate budgets. And they often choose the less expensive solution who’s going to work for most of the people.</p><p>According to <a href="https://www.blitzresults.com/en/ergonomic/">this ergonomic calculator</a> website, with a height of 198cm, my desk should be 80cm high, and my chair should be 53cm high (distance from the floor to seat).</p><ul><li>Desk height: 80cm</li><li>Height of chair: 53cm</li></ul><figure><img alt="Just found the perfect wall" src="https://cdn-images-1.medium.com/proxy/1*UafCpy1wkhYFJg_Ni228Ew.jpeg" /><figcaption>Just found the perfect wall</figcaption></figure><p>After fixing the ankles and the 2 wood rails you are ready for the last step: fixing the adjustable foot.</p><figure><img alt="Et voila" src="https://cdn-images-1.medium.com/proxy/1*q1VcCBiCorYryEhI9SwI-g.jpeg" /><figcaption>Et voila</figcaption></figure><p><strong>Pro-tip </strong>: Don’t forget to cut one edge for the cables when you have all the tools available.</p><figure><img alt="Always have a swiss army knife at home" src="https://cdn-images-1.medium.com/proxy/1*OEwabGk6-Ud5xXZypuvO1g.jpeg" /><figcaption>Always have a swiss army knife at home</figcaption></figure><h4>Step 3: Add a Giant Screen <em>(not included in the price)</em></h4><p>You are now ready to work, just add a giant screen, a timer and some cables.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*R2zRuZ9bzfOt4MUZXQaUsA.jpeg" /><figcaption>32 inches screen fits almost perfectly</figcaption></figure><h4>Bonus Step: Find the perfect chair</h4><p>This article is for people who don’t want to spend a lot of money <strong>BUT</strong> you need a decent chair because you are going to spend a lot of time in front of your screen.</p><figure><img alt="" src="https://cdn-images-1.medium.com/proxy/1*rd8LEl3i_MG6alyLbaVO2w.png" /></figure><p>I spend some time searching for chairs on eBay and <a href="https://www.ebay.fr/itm/Chaise-de-bureau-sport-fauteuil-gamer-ergonomique-simili-cuir-F1/223535070897">I found the perfect one</a>.</p><p><strong>It costed me 120 €</strong></p><p>One of the things I like being a freelance working remote is that you can design your perfect productive environment.</p><p>For my next office, I will definitely invest in a standing/walking desk if I have space. Working remotely is great because you don’t lose your time on commuting but you are living like a kind of a hermit. Don’t forget to go out for some exercice or even better go to the gym.</p><blockquote>Your health is more important than your job.</blockquote><p>If you liked this article, check out:</p><p>- <a href="https://flexbox.medium.com/how-i-wrote-and-published-the-road-to-react-native-book-7ca80fa2fd88">How I wrote my first book as a indie hacker</a></p><p>If you want to learn more and improve your skills, you can <a href="https://twitter.com/flexbox_"><strong>follow me on Twitter</strong></a> as I continue to document my journey.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=82fa51a0d98e" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[What I learned at React Finland Workshop with Nik Graf]]></title>
            <link>https://medium.com/react-finland/what-i-learned-at-react-finland-workshop-with-nik-graf-99c37dc1d8c1?source=rss-cc5b33b54088------2</link>
            <guid isPermaLink="false">https://medium.com/p/99c37dc1d8c1</guid>
            <category><![CDATA[innovation]]></category>
            <category><![CDATA[workshop]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[hooks]]></category>
            <category><![CDATA[react]]></category>
            <dc:creator><![CDATA[David Leuliette]]></dc:creator>
            <pubDate>Wed, 08 May 2019 09:50:01 GMT</pubDate>
            <atom:updated>2019-05-28T08:27:49.553Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bT6jmte7_xz_IjPnTeTWmg.jpeg" /><figcaption>Is that a hook we are looking at? (<a href="http://nicktulinen.com">Nick Tulinen</a>)</figcaption></figure><h3>What David learned at React Finland Workshop with <a href="https://medium.com/u/ff3f225e7f5c">Nik Graf</a></h3><p><em>Advanced React — Suspense, Time Slicing, Hooks, and more</em></p><p>If you are not yet familiar with <a href="https://react-finland.fi">React Finland</a>, you should. Let me tell why: It’s like a summer camp. Each year, you can see familiar faces who are really excited to share their knowledge with the community. I like the format: one workshop day and two days of conference on a single track.</p><p>In this article, I am going to cover the workshop of Nik Graf: <strong>Advanced React with all the new buzzwords</strong>!</p><h4>React — Reinvented</h4><p>In the last months, React has changed a lot with some new features (not all are in a public release yet):</p><ul><li>New lifecycle methods</li><li>Suspense and Time Slicing — Upcoming feature</li><li>Hooks</li><li>And more</li></ul><p>In this context, <a href="https://medium.com/u/ff3f225e7f5c">Nik Graf</a> ran a workshop for intermediate and experienced React developers.</p><blockquote>All the materials can be downloaded on the <a href="https://github.com/nikgraf/2019-react-finland-workshop">GitHub repo 2019-react-finland-workshop</a>.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/proxy/1*uSjSv-_UCTWkJfK64_UZbw.jpeg" /><figcaption>Sketchnote with React Hooks and Performance in React (<a href="https://davidl.fr">David Leuliette</a>)</figcaption></figure><h4>React Hooks</h4><p>Hooks are everywhere. Since React 16.8 was released, it’s a hot topic in the react community. Things like <em>class component</em> and <em>functional component</em> are a thing from the past, long live <strong>function based components</strong>.</p><p>There are literally <a href="https://www.youtube.com/watch?v=G-aO5hzo1aw">millions content available</a> on the internet to introduce react hooks. During this day <a href="https://github.com/flexbox/2019-react-finland-workshop/commit/543a040c37c1a97171fa3f8ddea8e93b86b1d087">this is what I learned</a>:</p><ul><li>useEffect can have 2 arguments. The first one is a function that contains imperative. The second can take an array of values that the effect depends on.</li><li>You can create <a href="https://github.com/flexbox/2019-react-finland-workshop/commit/fc0df85d734a37d618f53696254e1e9956076b1f">custom hooks to share code</a>, but try to follow a convention like useMyhook to be explicit.</li><li>useLayoutEffect for synchronous operations, but use it with caution because it’s blocking rendering and expensive operations can lead to a bad experience.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/445/1*aUegfx5bsqZic-JOFFrvwQ.gif" /><figcaption><em>useLayoutEffect is perfect for auto-height textarea</em></figcaption></figure><blockquote>⚠️ <strong>Pro tip:</strong> Don’t put hooks in loops or if…else. To avoid mistakes there is <a href="https://www.npmjs.com/package/eslint-plugin-react-hooks">eslint-plugin-react-hooks</a> for that.</blockquote><p>If you want to dig on custom hooks <a href="https://medium.com/u/ff3f225e7f5c">Nik Graf</a> built this cool website to collect all of them:</p><p><a href="https://nikgraf.github.io/react-hooks/">Collection of React Hooks</a></p><h4>Performance</h4><p>As in video games, we want a slick experience with 60 frames per seconds and 15 ms delay. When I am writing this article the react-devtool profiler is not the best for that. The Google Chrome profiler (<em>console</em> &gt; <em>performance</em>) is better in this scenario.</p><figure><img alt="" src="https://cdn-images-1.medium.com/proxy/1*L41HwaDJC1yDSZoXdlaY4A.png" /></figure><p>In this example, we found our performance enemy: the function sometimesSlowCalculation.</p><blockquote>⚠️ <strong>Pro tip:</strong> When you start to dig on performance start your journey by measuring what you are doing.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/proxy/1*N_98xbNXO-iuzWJLGiv8uw.jpeg" /><figcaption>Sketchnote with Time Slicing, Suspense, and Context</figcaption></figure><h4>Async React</h4><p>In the second part of the workshop, we played with some unstable API. If you want to follow this path, repeat after me 3 times the next sentence:</p><blockquote>I will not use time slicing in production<br>— First rule of the React Club</blockquote><h4>Time Slicing</h4><figure><img alt="" src="https://cdn-images-1.medium.com/proxy/1*08fYfKRwrGCUutnuDfY_rg.png" /><figcaption>Awesome react markdown preview application</figcaption></figure><p>Imagine you need to create a CMS application. 2 column layout and you want a nice writing experience with real-time feedback for the user.</p><p>On the left, you can edit markdown content and on the right, we have the preview in real time. For the &lt;TextArea&gt; we need to have a fast experience. On the other hand, we can delay the preview because it’s gonna be slow with huge content.</p><p>First, we need to create a new function <strong>deferredPreviewUpdate</strong></p><pre>&lt;TextArea<br>  value={text}<br>  onChange={value =&gt; {<br>    setText(value);<br>    <strong>deferredPreviewUpdate(value);</strong><br>  }}<br>/&gt;</pre><p>Calling the function with unstable_LowPriority allows the rendering part to have a small delay. Just remember, this code is experimental for now, but it was a great introduction to the concept of time slicing.</p><pre>function deferredPreviewUpdate(text) {<br><strong>  unstable_runWithPriority(unstable_LowPriority, function() {</strong><br><strong>    unstable_scheduleCallback(unstable_LowPriority, function() {</strong><br>      const content = markdownToReact(text);<br>      setPreview(content);<br><strong>    });<br>  });</strong><br>}</pre><p>Check the full example in part <a href="https://github.com/nikgraf/2019-react-finland-workshop/blob/master/5-time-slicing/solution/src/App.js">5-time-slicing</a>.</p><p>If you want to dig more on how scheduling in User Interfaces, I recommend this article by <a href="https://medium.com/u/7b3a1e6bc118">Philipp Spiess</a>:</p><p><a href="https://philippspiess.com/scheduling-in-react/">Scheduling in React</a></p><h4>React.lazy and React.Suspense</h4><p>The Suspense API allows components to “wait” for something before rendering. When I am writing this article Suspense works only with one scenario: <a href="https://reactjs.org/docs/code-splitting.html#reactlazy">loading components dynamically with </a><a href="https://reactjs.org/docs/code-splitting.html#reactlazy">React.lazy</a>.</p><p><em>In the future, Suspense will support other use cases like data fetching.</em></p><p>On this exercise, I used react-apollo-hooks and it looks promising. Instead of using this classic loading state pattern to display a loader like this:</p><pre>if (loading) {<br>  return &lt;div&gt;Loading …&lt;/div&gt;;<br>}</pre><p>You need to do 2 things. First, add another param to you GraphQL query:</p><pre>const { data, error } = useQuery(profileQuery<strong>, { suspend: true }</strong>);</pre><p>Second, add a fallback loading component:</p><pre>&lt;React.Suspense <strong>fallback={&lt;div&gt;Loading...&lt;/div&gt;}</strong>&gt;<br>  &lt;Profile /&gt;<br>&lt;/React.Suspense&gt;</pre><p>You can check the diff on the exercise on GitHub:</p><p><a href="https://github.com/flexbox/2019-react-finland-workshop/commit/63ddbbc084a97cf689afd6a684c486a0cb8152ea">Add Suspense · flexbox/2019-react-finland-workshop@63ddbbc</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/295/1*-ptecCNTf4gZBrKqD3pQLQ.gif" /><figcaption>Cascading loading experience</figcaption></figure><blockquote>⚠️ <strong>Pro tip:</strong> This feature is not yet available for server-side rendering.</blockquote><h4>Code Splitting</h4><p><em>Code splitting your app can help you “lazy-load” just the things that are currently needed by the user, which can dramatically improve the performance of your app. <br>— extracted from </em><a href="https://reactjs.org/docs/code-splitting.html">https://reactjs.org/docs/code-splitting.html</a></p><p>In this exercise, we used the code splitting feature to reduce the size of the bundle of our app.</p><figure><img alt="" src="https://cdn-images-1.medium.com/proxy/1*w6CsWeO_HD2fagH-AVVUng.png" /></figure><blockquote>⚠️ <strong>Pro tip:</strong> You don’t need to code split everything. Sometimes a single HTTP request with one big file is enough.</blockquote><h4>Context</h4><p>The context API can be used as your global store, aka you don’t need Redux for everything. That said use best to learn the pros and cons before jumping ship.</p><blockquote><a href="https://youtu.be/c9YtmMi-5rM?t=450">Check what Nik is saying about it at React Finland.</a></blockquote><p>Take the example of a profile page. For a currently authenticated user, the avatar is not often updated. It’s a perfect use case for using context because it solves the classic problem of props trilling.</p><p>In the context exercise, we worked on theming React applications. First, you need to create a context like <strong>ThemeContext</strong>:</p><pre>//ThemeContext.js</pre><pre>import React, { <strong>createContext </strong>} from &quot;react&quot;;</pre><pre>export const themes = {<br>  dark: {<br>    foreground: &quot;#fff&quot;,<br>    background: &quot;#666&quot;<br>  },<br>  light: {<br>    foreground: &quot;#222&quot;,<br>    background: &quot;#eee&quot;<br>  }<br>};</pre><pre><strong>const ThemeContext = createContext({</strong><br>  theme: themes.dark,<br>  toggleTheme: () =&gt; {}<br><strong>});</strong></pre><pre>export default ThemeContext;</pre><p>After that, in this example, we are using hooks to use the context.</p><pre>// Toolbar.js</pre><pre>import React, { <strong>useContext</strong> } from &quot;react&quot;;<br>import Button from &quot;./Button&quot;;<br>import ThemeContext from &quot;./ThemeContext&quot;;</pre><pre>function Toolbar() {<br><strong>  const { toggleTheme } = useContext(ThemeContext);</strong></pre><pre>return (<br>    &lt;&gt;<br>      &lt;Button onClick={<strong>toggleTheme</strong>}&gt;Toggle Theme&lt;/Button&gt;<br>    &lt;/&gt;<br>  );<br>}<br>export default Toolbar;</pre><blockquote>⚠️ <strong>Pro tip:</strong> Remember that when using <strong>useContext</strong>, every change in the context store will trigger a re-render of all the components where it’s used.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*grO0wWbtWOBhaVtxyI3pCA.jpeg" /></figure><p>I really enjoyed all the different exercises. It was a great workshop and now I am more confident with the usage of Hooks in React.</p><p>As a recap, here is the list of the exercises:</p><p>1. <strong>useEffect</strong> and <strong>useRef</strong><br>2. custom hooks and <strong>useDebugValue</strong><br>3. <strong>useLayoutEffect</strong><br>4. Performance<br>5. Time slicing<br>6. Suspense<br>7. Code splitting<br>8. Context</p><p>You can clone the repo <a href="https://github.com/nikgraf/2019-react-finland-workshop">https://github.com/nikgraf/2019-react-finland-workshop</a> to do your homework. 🙂</p><p>If you are interested to level up your knowledge in the React ecosystem, <a href="https://react-finland.fi">subscribe to the newsletter to receive pre-sales early-bird access for the next edition</a>.</p><blockquote>👋 See you next year!</blockquote><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=99c37dc1d8c1" width="1" height="1" alt=""><hr><p><a href="https://medium.com/react-finland/what-i-learned-at-react-finland-workshop-with-nik-graf-99c37dc1d8c1">What I learned at React Finland Workshop with Nik Graf</a> was originally published in <a href="https://medium.com/react-finland">React Finland</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Clean up macos for a productive setup following Marie Kondo advices]]></title>
            <link>https://flexbox.medium.com/kondo-your-mac-b2443f2ebc2f?source=rss-cc5b33b54088------2</link>
            <guid isPermaLink="false">https://medium.com/p/b2443f2ebc2f</guid>
            <category><![CDATA[life]]></category>
            <category><![CDATA[design]]></category>
            <category><![CDATA[freelance]]></category>
            <category><![CDATA[productivity]]></category>
            <category><![CDATA[mac]]></category>
            <dc:creator><![CDATA[David Leuliette]]></dc:creator>
            <pubDate>Tue, 26 Feb 2019 00:30:05 GMT</pubDate>
            <atom:updated>2021-04-30T15:49:22.377Z</atom:updated>
            <content:encoded><![CDATA[<h3>Kondo your Mac</h3><h4>How to setup a distraction free macOS to focus on shipping code</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4k5ibuLtmD_KWTpLBKoPPw.jpeg" /></figure><p>Last week, I was chilling on Netflix and I found one famous TV Show with Marie Kondo. She’s a Japanese organising consultant and author. Organising…<br>Consultant…<br>Wow! <br>We are really living in exciting times…</p><p>And then I found this great article by <a href="https://medium.com/u/d7ca111e7984">Rubens Cantuni</a> <a href="https://uxdesign.cc/marie-kondo-your-sketch-files-with-these-plugins-bcbe9321ea8e">about organizing your sketch files</a>.</p><p>I got hooked.</p><p>Before opening <a href="https://konmari.com/pages/consultants">my own agency of cleaning consultant</a>, I decided to share with you my best hacks to tidy your Mac and transform your developer life.</p><blockquote>Your real life begins after putting your house in order. <br>– Marie Kondo</blockquote><h3>Spark joy in your terminal</h3><p>As a developer, I spend around 1h / day in the terminal. That’s literally my remote control for everything. My awesome and well-organized naming framework for my coding projects is this one:</p><pre>~/workspace/&lt;CLIENT&gt;/&lt;PROJECT_NAME&gt;</pre><p>I am using iTerm2 to split, and navigate across projects and files. And if you are using the script <a href="https://github.com/rupa/z">z — jump around</a>, you are literally 125% more effective than people using the keyboard + mouse combo.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3Eem2GiSeJtsffTgItZypA.png" /><figcaption>refined theme for iTerm2</figcaption></figure><p>I have plenty of shortcuts thanks to <strong>oh-my-zsh</strong> –with this clean theme called refined– to be super efficient. If I need to <strong>keep only one productivity hack</strong>, I would definitely choose this: <strong>Launch your editor form the terminal</strong>.</p><pre>// Sublime Text<br>st .</pre><pre>// Atom<br>atom .</pre><pre>// VSCode<br>code .</pre><p>- Install <a href="https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins/sublime">sublime plugin for oh-my-zsh</a><br>- Install <a href="https://flight-manual.atom.io/getting-started/sections/installing-atom/#installing-atom-on-mac">atom and apm on Mac</a><br>- Install code <a href="https://code.visualstudio.com/docs/setup/mac#_launching-from-the-command-line">command in PATH for VSCode</a></p><h3>Everything has its place in your Finder</h3><p>Let’s face it, the proportion of mess on your machine is exponential. If you don’t set some rules at the beginning, after 1 month your <a href="https://youtu.be/IUSaZ1EvHeg?t=21">new shiny computer is full of crap</a>.</p><figure><a href="https://youtu.be/IUSaZ1EvHeg?t=21"><img alt="" src="https://cdn-images-1.medium.com/max/998/1*2Xyx4vrmdjI4x7mE2NBCXg.png" /></a><figcaption>Your computer is infected</figcaption></figure><p>Here is my Shinto Workflow for cleaning and organizing files properly:</p><h4>Add Favourites</h4><p>Open your terminal and write `open .` to open the finder. Remove all the distractions links and add the favourites ones like this.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/882/1*Xejnb5rTkb6R6e3jmvNpOA.png" /></figure><h4>Create a screenshot folder</h4><p>By default, all your screenshot are saved on your desktop. I changed that for another folder called… `Screenshots`.</p><pre># Save screenshots to the Screenshot (or elsewhere)<br>defaults write com.apple.screencapture location ${HOME}/Screenshots</pre><h3>Store vertically</h3><p>You can’t do 2 things at the same time. So why are you keeping the dock with all the applications available on your Mac? You can launch them with your keyboard thanks to spotlight and the shortcut `⌘` + `space`.</p><p>Marie Rondo says storing vertically will save space and allow your belongings to become more eye-catching. Let’s <strong>hide our dock</strong> when we don’t need it with a left vertical position.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*POLl8IbLSoSryt89Shd9mw.png" /></figure><h3>Custom Window Organizer</h3><p>Windows users are going to love this one: you can tilling and organise your applications since a long time with `windows` + `→`.</p><p>On macOS we have the fullscreen mode. But it’s not really powerfull, and it’s complicated to assign keyboard shortcuts to be effective.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/366/1*V-eZWobtmXdmtX0SbVuBaQ.png" /><figcaption>Split your screen</figcaption></figure><p>I am using Divvy since ages to fix this issue, I can split my screens and I have differents shortcuts for my needs: full screen, half-left, top-right... You can pick-up any windows manager to “Hikidashi” your working days.</p><ul><li><a href="https://mizage.com/divvy/">Mizage</a></li><li><a href="https://www.spectacleapp.com/">Spectacle</a></li><li><a href="https://koekeishiya.github.io/chunkwm/index.html">$ chunkwm - tiling wm</a></li></ul><h3>Clean your menu bar icons</h3><p>Everything you own needs his own designated space. Dozer is a little application to hide icons on your menu bar. With this hack you can finally get rid of the spotlight icon! The easiest way to install it is with `brew`.</p><pre>$ brew cask install dozer</pre><p>You can check on <a href="https://github.com/Mortennn/Dozer">GitHub the installation notes</a>.</p><p><strong>Before:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/565/1*xqKaGG6TfWHLfxHzq8_pxQ.png" /></figure><p><strong>After:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/571/1*h-FtnbUW9fBWrVe9uru16Q.png" /></figure><h3><strong>Tidy by category</strong></h3><p>Yes! I am looking at you modern full stack developer! I know you have the hype and can solve the cancert problem with JavaScript, but in my opinion, <strong>you have too many tabs opened</strong>.<br>That means a lack of focus and we are going to be late for the mars missions because you are not focus.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6XE8pjxrUjzplgIMhenpGw.png" /><figcaption>soooooooooooooooooooooooooooooooo many tabs opened</figcaption></figure><p><strong>You can pin tabs</strong> if you want to keep something, and try to organise your <strong>browsing experience by category</strong>:</p><ul><li><strong>Google Chrome:</strong> Work emails and backlog in ZenHub</li><li><strong>Safari: </strong>React Native releases on app Store and play store</li><li><strong>Google Chrome Canary: </strong>Personal emails and youtube</li><li><strong>Firefox developer Edition: </strong>Main browser for everything else</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*U_uzjZ7T3gtexA9yZfbYIw.png" /><figcaption>At least here I can quit / restore tabs depending on the context</figcaption></figure><p>After theses small hacks you gonna have the same kind of zen distraction-free laptop, ready to focus and ship code!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Ut3c3MWSsg4ojm2CGJYYvw.png" /></figure><p>If you liked this article, check out:</p><p>- All the macOS I use to be <a href="https://github.com/flexbox/macos-front-end">efficient as a front-end developer</a>.</p><p>If you want to learn more and improve your skills, you can <a href="https://twitter.com/flexbox_"><strong>follow me on Twitter</strong></a> as I continue to document my journey.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b2443f2ebc2f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Simple release worflow for react native with expo]]></title>
            <link>https://medium.com/le-wagon/react-native-expo-1734e6d7891?source=rss-cc5b33b54088------2</link>
            <guid isPermaLink="false">https://medium.com/p/1734e6d7891</guid>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[react-native]]></category>
            <category><![CDATA[workflow]]></category>
            <category><![CDATA[react]]></category>
            <category><![CDATA[automation]]></category>
            <dc:creator><![CDATA[David Leuliette]]></dc:creator>
            <pubDate>Tue, 10 Jul 2018 14:29:06 GMT</pubDate>
            <atom:updated>2020-03-05T10:23:25.628Z</atom:updated>
            <content:encoded><![CDATA[<h3>Just push a button</h3><h4>How much time it takes to release a React Native application to the iOS App Store and Android Play Store?</h4><p>It’s 2pm and my delivery manager is asking me to release our React Native application to the iOS and Android stores.</p><blockquote>“Great! I am happy to release our application, just for your information, this will take an entire day.”<br>“What are you saying? It’s <strong>just pushing a button</strong>. <br>I don’t see why it’s so long?”</blockquote><figure><a href="http://bit.ly/expo-release"><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*S5nZBi2nDSqZr5-66IY_xg.png" /></a><figcaption>I made a drawing for you. I think now you can see why it’s a long process 😉</figcaption></figure><p>First of all, there are 2 main application stores (Apple and Google). The release process is a little bit different for each, and the testing workflow is different as well. In this article, I am going to cover a specific scenario: <strong>How to release a React Native application with a standalone build from expo</strong>.</p><h3>`create-react-native-app` versus `react-native-cli`</h3><p>If you are in charge of releasing your react native application, you need to understand the 2 different application architectures <a href="https://en.wikipedia.org/wiki/Command-line_interface">generated with your CLI</a>.</p><h4>create-react-native-app</h4><p>According to <a href="https://facebook.github.io/react-native/docs/getting-started.html">the official documentation,</a> this solution is the simplest one. You can run your application on any OS with no build config. Xcode or Android Studio are not required. You just have to install another amazing tool called <a href="https://expo.io/">expo</a>.</p><h4>react-native-cli</h4><p>If you want to use custom component for each platform or add React Native code into your existing application you are probably using this solution.</p><p>If you are looking for the workflow when you have “ejected” from expo, I hightly recommand theses 2 articles from the legendary <a href="https://medium.com/u/6ca0fe37eac1">Gant Laborde</a> 🦄</p><ul><li><a href="https://shift.infinite.red/simple-react-native-ios-releases-4c28bb53a97b">Simple React Native iOS Releases</a></li><li><a href="https://shift.infinite.red/simple-react-native-android-releases-319dc5e29605">Simple React Native Android Releases</a></li></ul><h3>Building a standalone app with expo</h3><p>It’s 2pm and a half because of the coffee break and you are ready to deploy. Let’s do this!<br>Check the dependencies and run the build:</p><pre>yarn<br>exp build:ios</pre><p>This first task takes — at least — 30 minutes. I am lucky, at the office the connection is fast.</p><blockquote>I have an idea, maybe I can run the android build in the meantine.</blockquote><p>Bad news rookie. At the moment with expo, you can’t build for iOS and Android at the same time.</p><p><strong>35 minutes later<br></strong>Yeah! Build successful!<br>The application is available on expo servers, now I need to download the .ipa file. I am a developer, I can’t be bothered with mouse clicks on a website. Let’s open a terminal and download the build with curl .</p><pre>curl -o app.ipa “$(exp url:ipa)”</pre><p><strong>28 minutes later<br></strong>Download done!<br>Now I need to upload the .ipa file with <a href="https://forums.developer.apple.com/thread/64041">Application Loader</a> to the apple store servers (Because I don’t need to use Xcode with standalone builds).</p><p><strong>34 minutes 55 seconds later<br></strong>Build uploaded!<br>Guess what?<br>I can’t push the button yet, because my app is analysed by robots.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MrEpUTCJ8sGp2Cq5ufWEDA.png" /><figcaption>Your build is not available yet for your QA team</figcaption></figure><p><strong>10 minutes 12 seconds later</strong><br>My build just disappeared from Testflight! 😱<br>Listen to me rookie, releasing a native application is a complex task. You have no idea how works the replication of your build accross all the CDN’s in the world! Give me some time to process your build.</p><p>The good new is, you can follow the progress in the activity tab.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Pj6FGs79BSL3q2ggn6xk6g.png" /><figcaption>Still processing</figcaption></figure><p><strong>Probably less than 10 minutes later</strong><br>Your app is back again! <br>But you have small extras steps to do: Provide export compliance information. It’s simple, <em>you just need to push a button</em>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/667/1*wORNuR3IXBGjTgsFyWMo9g.gif" /><figcaption>Push another button for the iOS release</figcaption></figure><p>Straight after accepting the compliance, your app should be available for your testing team 🎉</p><p>But wait a minute. I am not going to repeat this workflow every time.<br>My friends know me <a href="https://www.youtube.com/watch?v=7_CAqtqEaeo">as an automation machine</a>. I wrote this little script to half-automate the process of releasing our react native application with standalone expo build.</p><p>Create a new file and run this script from a terminal</p><pre>./bin/ios</pre><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/1eaa850dc3c3ea8a2f18af472be4e1f6/href">https://medium.com/media/1eaa850dc3c3ea8a2f18af472be4e1f6/href</a></iframe><p>It’s 5 pm and your application is released for your end users!<br>Are you sure about that?<br>Rookie, you forgot the android version. You need to run the same script for your .apk</p><p>Even if the engineering team working on expo is the best in the world, you need to test on real devices. Developing with <a href="https://expo.io/tools">expo XDE</a> is fine, but you can’t rely on the emulator for testing.<br>By the way, If you don’t have a <a href="https://uxdesign.cc/design-better-release-notes-3e8c8c785231">release note</a> and a testing team, there is no point to deploy.</p><h3>Creating a slick testing workflow</h3><p>Testing your application with the real world is hard. Expo is a great solution for development but it’s not exactly the same as using the final build delivered to your users.</p><p>It reminds me this talk: “<em>A new version of Firefox is available</em>”. The Mozilla team have 4 different release channels Nightly, Aurora, Beta, and Release.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/768/1*RcEF7S4E_Mqguh4RO1j4KA.jpeg" /><figcaption>The release workflow for Firefox <a href="https://twitter.com/fosdem">@FOSDEM</a></figcaption></figure><p>The Mozilla team have a routine: every Tuesday at 3 pm it’s release day! Builds are deployed in release channel for millions of users.</p><p>Maybe we can follow this weekly routine? The last version is released in production every x week, and we have 2 different channels for development and quality insurance.</p><p>Fun part: the workflow for testing your standalone app is different on the 2 platforms.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*WgtWk4GnmnUU_USYv8A4Gg.jpeg" /><figcaption>iOS and Android are 2 different worlds</figcaption></figure><h4>How to onboard testers for iOS</h4><ol><li>Add fullname and Apple ID on <a href="https://appstoreconnect.apple.com/">https://appstoreconnect.apple.com/</a><br><strong>Apple store connect</strong> &gt; <strong>Users and Roles</strong></li><li><a href="https://itunes.apple.com/gb/app/testflight/id899247664?mt=8">Download Testflight</a></li></ol><h4>How to onboard testers for Android</h4><ol><li>Add fullname and Google play account on <a href="https://play.google.com/apps/publish">https://play.google.com/apps/publish/</a><br><strong>Google Play Console</strong> &gt; <strong>Manage testers</strong> &gt; <strong>Create list</strong></li></ol><p>It’s your lucky day rookie, you didn’t have problems with updates of npm packages, screenshot issues on the app store or release notes.</p><p>Your app is deployed. Remember the lesson of the day:</p><blockquote>Deploying an app to the store takes–at leat–one day</blockquote><p><strong>Notes: </strong>You can use <a href="https://docs.expo.io/versions/latest/workflow/glossary-of-terms#over-the-air-updates">Over the Air Updates</a> to bypass the validations in the stores and speed up the deploy. But you have some limitations.</p><h3>Thanks for reading! If you have feedback or suggestions, you can find me here:</h3><ul><li>Twitter: <a href="https://twitter.com/flexbox_">https://twitter.com/flexbox_</a></li><li>GitHub: <a href="https://github.com/flexbox">https://github.com/flexbox</a></li></ul><p>I hope this motivates you to start building the perfect workflow for releasing your React Native app. Just drop me a message if you have any questions — I would be glad to help you!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1734e6d7891" width="1" height="1" alt=""><hr><p><a href="https://medium.com/le-wagon/react-native-expo-1734e6d7891">Simple release worflow for react native with expo</a> was originally published in <a href="https://medium.com/le-wagon">Le Wagon</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[React Helsinki 2018]]></title>
            <link>https://flexbox.medium.com/react-helsinki-2018-19c6f07faaf8?source=rss-cc5b33b54088------2</link>
            <guid isPermaLink="false">https://medium.com/p/19c6f07faaf8</guid>
            <category><![CDATA[design]]></category>
            <category><![CDATA[react]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[education]]></category>
            <category><![CDATA[react-native]]></category>
            <dc:creator><![CDATA[David Leuliette]]></dc:creator>
            <pubDate>Tue, 24 Apr 2018 23:43:33 GMT</pubDate>
            <atom:updated>2018-05-08T12:16:01.085Z</atom:updated>
            <content:encoded><![CDATA[<h4>Workshop day by a front-end developer</h4><p>MOI-moi 👋<br>This week I am in Finland to learn a new langage an improving my skill in React and React Native. On this article, I am going to share with you my notes and links about the first day of workshop.</p><p>You want to improve your design skills?<br>Follow the advices about <a href="https://react-finland.fi/workshops/#styleguide-driven-development">Styleguide Design Developement</a>.<br>If you are more in the mobile world, I have some useful links for you.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*D-ThKvBdoKmZNMyqgNyjAg.jpeg" /></figure><p>In short, <a href="https://twitter.com/i/moments/988830694460837888">here is the twitter feed</a> of this great event.</p><h4>Component Design Workshop</h4><p>With <a href="https://medium.com/u/5829a67c85f9">Andrey Okonetchnikov</a> and <a href="https://medium.com/u/b031a508ddaf">Artem Sapegin</a></p><blockquote>What is the difference between German government website and the Austria one ?</blockquote><p>The German version have a design system</p><p><a href="https://styleguide.bundesregierung.de/">Styleguide der Bundesregierung - Styleguide</a></p><p>In the Austria version it’s not the case.</p><p>The results?<br>No consistency in terms of branding and the users needs to “learn” how to use the website every time because there is no pattern for navigation.</p><blockquote>Why do I need a Design System?</blockquote><p>Take the example of Lego. They are using bricks (aka primitives) to build almost everything. It’s perfect for a design system, with basic things you can build different products.</p><figure><img alt="" src="https://cdn-images-1.medium.com/proxy/1*wVZtLScD6D2Ipsjo1z0fmw.jpeg" /></figure><blockquote>If I use a Design System it’s gonna slow down the development of my product.</blockquote><p>I agreed with this point for new projects.<br>But, the more you are going to add features / components / content on your website / application, more duplications are going to be introduce.<br>The codebase is growing, hard to maintain.<br>At the end of the day, It takes more time without style guide.</p><p>And we didn’t talk about how to educate and scale the team working on your project.</p><p><em>The broken windows theory is a criminological theory that visible signs of crime, anti-social behavior and civil disorder create an urban environment that encourages further crime and disorder. We don’t want the same for our codebase</em><br><em>The </em><a href="https://en.wikipedia.org/wiki/Broken_windows_theory"><em>broken window theory</em></a></p><blockquote>Ok, I am convinced now. Where should I start?</blockquote><h4>Style Guide Design Workflow</h4><p><strong>1. Content Inventory<br></strong>Take screenshots and isolate all the components of your UI.<br>You can use <a href="https://itunes.apple.com/gb/app/annotate-capture-and-share/id918207447?mt=12">the anotate app</a></p><p><strong>2. Build a roadmap<br></strong>Now that you have a list off screenshots, it’s time to make a plan and use this <a href="https://blog.github.com/2016-02-17-issue-and-pull-request-templates/">GitHub issue template</a>.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/9980ba89dcb440aaa4060a72641c4275/href">https://medium.com/media/9980ba89dcb440aaa4060a72641c4275/href</a></iframe><p>Remeber that Style Guides are the single source of truth.</p><p><strong>3. Choose your tool</strong></p><ul><li><a href="https://storybook.js.org/">StoryBook</a></li><li><a href="https://github.com/styleguidist/react-styleguidist">react-styleguidist</a> with <a href="https://www.styled-components.com/">Styled components</a></li><li><a href="https://www.catalog.style/">catalog.style</a></li><li><a href="https://github.com/react-cosmos/react-cosmos">react-cosmos</a></li></ul><blockquote>Components are primitives</blockquote><p>You can compose components from primitives</p><ul><li>Human friendly API</li><li>Easier to communicate the intent via code</li><li>Easy to fix or refactor all instances at once</li><li>Enforce the design across the application</li></ul><p>Don’t make CSS class names as an API, instead use primitives:</p><pre>// DO<br>&lt;Button primary&gt; ... &lt;/Button&gt;</pre><pre>// DON&#39;T<br>&lt;button type=&quot;button&quot; class=&quot;btn&quot;&gt; ... &lt;/button&gt;</pre><h4>Exercices</h4><p>You want to sharpen your skills and learn how to use Styleguidist? You can download the sources on GitHub</p><p><a href="https://github.com/sapegin/component-driven-development">sapegin/component-driven-development</a></p><p>In the meantime, I updated my mind-mapping about Design System</p><figure><a href="https://my.mindnode.com/xQZyD9Qq8SG1zEpsc1SviR3cjpyUSfvEzLBxApqT"><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZPTfb-gDEVA2LJrbRcSEOA.png" /></a><figcaption>Design System Mindmap</figcaption></figure><h4>React Native Workshop</h4><p>With <a href="https://medium.com/u/6ca0fe37eac1">Gant Laborde</a></p><blockquote>Don’t use button, use TouchableHightlight instead</blockquote><h4>Dealing with the state of your react native app</h4><p><a href="https://github.com/GantMan/ReactStateMuseum">GantMan/ReactStateMuseum</a></p><h4>What do you think about expo?</h4><p>Everybody,<br>at some point,<br>is ejecting from expo</p><h4>Real world debugging</h4><p><a href="https://github.com/infinitered/reactotron">GitHub - infinitered/reactotron: A desktop app for inspecting your React JS and React Native projects. macOS, Linux, and Windows.</a></p><h4>Real world deploy</h4><ul><li><a href="https://shift.infinite.red/simple-react-native-android-releases-319dc5e29605">Simple React Native Android Releases</a></li><li><a href="https://shift.infinite.red/simple-react-native-ios-releases-4c28bb53a97b">Simple React Native iOS Releases</a></li></ul><h4>Ressources</h4><p><a href="http://reactnative.cc/">React Native Newsletter</a></p><h3>Thanks for reading! If you have feedback or suggestions, you can find me here:</h3><ul><li>Twitter: <a href="https://twitter.com/_flexbox">https://twitter.com/_flexbox</a></li><li>GitHub: <a href="https://github.com/flexbox">https://github.com/flexbox</a></li></ul><p>I Hope this motivates you to start hacking your next project. Just drop me a message if you have any questions — I would be glad to help you!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=19c6f07faaf8" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to hack tinder]]></title>
            <link>https://flexbox.medium.com/tinder-hack-b004037128c?source=rss-cc5b33b54088------2</link>
            <guid isPermaLink="false">https://medium.com/p/b004037128c</guid>
            <category><![CDATA[social-media]]></category>
            <category><![CDATA[hacking]]></category>
            <category><![CDATA[tinder]]></category>
            <category><![CDATA[growth]]></category>
            <category><![CDATA[life]]></category>
            <dc:creator><![CDATA[David Leuliette]]></dc:creator>
            <pubDate>Wed, 17 Jan 2018 13:24:34 GMT</pubDate>
            <atom:updated>2021-04-25T14:48:41.272Z</atom:updated>
            <content:encoded><![CDATA[<h3>In short, I hacked Tinder</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/777/1*F0Zd16QCBgV1MXWXFJx60w.png" /></figure><p>In short, I’m coming back from work.<br>My flatmate says:</p><blockquote>Did you see? Tinder just published a web version…</blockquote><p>I opened my <a href="http://www.whatbrowser.org/">web browser</a>,<br>opened the JavaScript console,<br>Select all buttons aria-label=”Like”<br>And I clicked</p><figure><img alt="" src="https://cdn-images-1.medium.com/proxy/1*jJkFDFKtbJaT8SjSvyoFxg.gif" /></figure><blockquote>Holy sh$t dude, it’s easy to scrap tinder, automate the swipes is easier than hacking LinkedIn</blockquote><blockquote>How can you do that?</blockquote><blockquote>Simple, you target all the like buttons, you add a downtime of 300ms between each clic and…</blockquote><p>I felt that he didn’t understand anything, and because I don’t have time to explain it, I wrote a script just for him.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/250/1*lzJMkrdZqXsy6b6dKKY_rQ.gif" /></figure><p>It took me 30 minutes to automate 1 second.</p><blockquote><em>Want to read this story later? Save it in </em><a href="https://usejournal.com/?utm_source=medium.com&amp;utm_medium=blog&amp;utm_campaign=noteworthy&amp;utm_content=eid7"><em>Journal</em></a><em>.</em></blockquote><h3>David Leuliette 🚀 on Twitter</h3><p>Tinder web version is out. So I played with #JavaScript for autolikes https://t.co/HMxr05ngD3</p><blockquote>Hey, done!<br>I wrote you a script, you just need to <br>right clic / inspect,<br>go on the console tab,<br>and paste this script.</blockquote><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/3216d8307e01aed611711635d86ad9a9/href">https://medium.com/media/3216d8307e01aed611711635d86ad9a9/href</a></iframe><figure><img alt="" src="https://cdn-images-1.medium.com/max/958/1*Cyu0rvxFBsDNR6q0BMjLaw.gif" /></figure><p>I had 20 matches in a few moments.<br>I had too many people and didn’t know how to make a good icebreaker, I thought a momment.</p><blockquote>Hi!</blockquote><p>🤔</p><blockquote>Hello!</blockquote><p>🤔</p><blockquote>Ola Catarina! De donde son?</blockquote><p>I searched for an old note on my phone:</p><figure><img alt="" src="https://cdn-images-1.medium.com/proxy/1*kSmzoQonK1SBiSmwIDf_1A.png" /></figure><p>My flatmate said:</p><blockquote>You are wrong it’s too impersonal, you need to find something else…</blockquote><p>I spent 3 hours by watching all the <a href="https://en.wikipedia.org/wiki/Natural_language_processing">Natural Language Processing</a> techniques available to optimise my icebreaker and automate my <em>“sales pipeline”</em> to get a date.</p><p>It was 2 am.</p><p>I had 20 matches on my waiting list.</p><p>And still no icebreaker sentence…</p><p>In short, I hacked Tinder.</p><p>Originaly published on <a href="http://www.lillelettre.fr/2017/10/27/tinder-hack/">LilleLettré</a></p><p>If you liked this article, check out:</p><p>- <a href="https://flexbox.medium.com/how-i-got-more-than-4000-followers-on-spotify-ae4bcb6d6e73">My Growth Hacking checklist for Spotify</a></p><p>If you want to learn more and improve your skills, you can <a href="https://twitter.com/flexbox_"><strong>follow me on Twitter</strong></a> as I continue to document my journey.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b004037128c" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Best online banking account for travelers]]></title>
            <link>https://flexbox.medium.com/bank-for-digital-nomad-583c86f93096?source=rss-cc5b33b54088------2</link>
            <guid isPermaLink="false">https://medium.com/p/583c86f93096</guid>
            <category><![CDATA[audio]]></category>
            <category><![CDATA[travel]]></category>
            <category><![CDATA[banking]]></category>
            <category><![CDATA[nomad]]></category>
            <category><![CDATA[design]]></category>
            <dc:creator><![CDATA[David Leuliette]]></dc:creator>
            <pubDate>Mon, 14 Aug 2017 09:08:09 GMT</pubDate>
            <atom:updated>2019-06-03T07:20:35.757Z</atom:updated>
            <content:encoded><![CDATA[<h3>Banking account for digital nomad lifestyle</h3><h4>Why old banking systems are going to die. Glory to clean UX and modern real time technology 🙏</h4><p>Years ago, I completely changed my bank because the website was not accessible and fast enough. I was looking for those 2 topics according to my nomad lifestyle, a <strong>secure &amp; online banking account</strong>.</p><p>I choose <a href="https://www.google.co.uk/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=8&amp;cad=rja&amp;uact=8&amp;ved=0ahUKEwjRqLPcrMPVAhWmBsAKHSd5D9QQFgg7MAc&amp;url=https%3A%2F%2Fwww.ingdirect.com.au%2Fsecurebanking%2F&amp;usg=AFQjCNGtvyL0NUGvDO2x3_L6hBJ2Uzc5vg">ING</a> because it was the only solution I found. After many years I am still disappointed about the service. We are living in the XXI century, and financial industry have money to invest in a decent website.<br>Why the experience is still mediocre?<br>My frustration is growing day after day. Hopefully, there are awesome newcomers in the banking industry for my traveler lifestyle.</p><h3>Middle Ages Banking Experience</h3><h4>Traveling in foreign countries</h4><p>In 2016, I traveled during 100 days in South America with 3 friends. Before my trip, I called my financial advisors (a real human being).</p><blockquote>Hello my dear banking advisor!<br>I am going to travel out of Europe for a long period of time.<br>It’s perfectly normal.<br>Can you please unlock my account and allow me to burn all my money during my trip in South America? 😘</blockquote><p><strong>Of course, it worked only for our first country in Peru.</strong></p><p>When we all moved to Bolivia <strong>all our credit cards were locked</strong> — including my friends’ cards — because of some voodoo restrictions or bullsh$t process.</p><p>🌟 <strong>Bonus:</strong> My credit card was completely locked because of “<em>security reasons</em>”. It costs me around 100€ to have a new one (cost of international call to lock/order a new credit card, sending to an embassy, send a new code by paper…)</p><blockquote>I am still wondering how a code sent by postal letter is a secure and online solution… But that’s another story.</blockquote><h3>Pietz Levels on Twitter</h3><p>Now after @rabobank, my new bank @INGnl has ALSO blocked me because I travel too much, incredible 🤷‍♀️</p><p>⭐ <strong>Protip:</strong> When you are traveling in foreign countries, always have a backup plan.<br>1. Use <a href="http://global.moneygram.com/">MoneyGram</a> or <a href="https://www.westernunion.com">WesternUnion</a>. <br>2. For international transferts write all your names on your passport in the right order when you fill the form.<br>3. Be careful with the timezones if you are in real trouble.</p><h4>Extra fees for nothing</h4><p>I decided to share my experience and write a story because of this.<br>I just subscribe to Medium premium.<br>I want to keep alive this awesome community and great ecosystem who is giving me some value — every time I open the app.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/750/1*26CxXBUS6UIBbcPUwbue6w.jpeg" /></figure><blockquote>I subscribed to medium membership and after the first month, I discovered this bill.</blockquote><p>In my case, the only value provided by ING is bullsh$t.</p><p>Every month the bank add an extra 0,50 € fee for… nothing.</p><p>At the end of the year, it costs 6€ because it’s a monthly subscription plan.</p><p><a href="http://knowyourmeme.com/memes/wat">WAT</a>! 😤</p><h4>WEBSITE 2.0</h4><p>I work as a front-end developer. Every day I try to craft good looking web application and fast websites for happy users. I mean, how is it possible to deploy one of the worse UI I have ever seen?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Mv3jVj0fO6RnOCulcNDt0g.jpeg" /><figcaption>Dear ING, do you need a carousel on your homepage? The answer is no.</figcaption></figure><p><a href="https://en.wikipedia.org/wiki/Grid_(graphic_design)">Grid system design</a> exist since medieval times, and Ethan Marcotte published an article on A List Apart about “<a href="https://alistapart.com/article/fluidgrids">CSS Fluid Grids</a>” in 2009.</p><p>Maybe ING didn’t have inhouse design team. I can understand that… But I can’t believe that no one haven’t done a research “<a href="http://lmgtfy.com/?iie=1&amp;q=dashboard+template+example">dashboard template example</a>” There are plenty of examples available for inspiration on the internet.</p><p>Here is a great User eXperience. A simple layout with the list of my lasts transactions. Simple and effective.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*lCwypMDyEYmpgGH3QpUKVQ.jpeg" /><figcaption>List of my expenses on the homepage and the categorization is automatic 😍 Number 26 bank</figcaption></figure><p>Every time — I am not going to talk about ING in-house double authentication factor based on your birth date —the user experience mistakes on ING web application are really frustrating because dealing with your money is not the funniest thing to do.</p><p>The navigation on the web is horrible (A carousel on your dashboard homepage–seriously?) — but wait there is a native application. Since <a href="http://ben-evans.com/benedictevans/2016/12/8/mobile-is-eating-the-world">mobile is eating the world</a> maybe the user experience is better. With 50 000+ <a href="https://www.linkedin.com/search/results/people/?facetCurrentCompany=%5B%222594164%22%2C%22698107%22%2C%223702090%22%2C%22215713%22%2C%22516340%22%2C%22299201%22%2C%221523089%22%2C%22387202%22%2C%2240711%22%2C%222722195%22%2C%223622172%22%2C%222105579%22%2C%222924419%22%5D">employee on linkedin</a>, I am pretty sure they have hired some UX Designer.</p><h4><strong>The mobile revolution</strong></h4><p>Design a native mobile application is not the same thing as designing a website. You can’t just put random content and advertisement. You are not Facebook, people don’t want advertisements and Farmville invitations on their online bank account.</p><p>On <a href="https://medium.com/u/36fb95013027">ING Group</a> mobile application, 50% of the layout is used for bullsh$t. On the other hand <a href="https://medium.com/u/92d87969cd76">N26</a> and <a href="https://medium.com/u/5dc32989c8e7">Revolut</a> have a navigation on the bottom (Maybe because people are using thumb on their smartphone)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ez7IIWmgOutd2BbP1ipwpA.jpeg" /><figcaption>I am not going to order a credit for a house when I am waiting the bus</figcaption></figure><p>So the User Interface is not great. No respect of <a href="https://uxplanet.org/basic-patterns-for-mobile-navigation-d12a87686efe">mobile navigation pattern</a>. On the top corner right, the logout icon is a 🔒… It’s not a joke.</p><blockquote>My frustration is growing day after day…</blockquote><p>Here is my feeling when I open the <a href="https://medium.com/u/938e791eceb1">ING</a> mobile app: <strong>I don’t care about your credit offers</strong> or <strong>sponsorship program</strong>. I just want to quickly check if everything is okay with my money (And check if you didn’t add fees for nothing BTW).</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgiphy.com%2Fembed%2FU0GqVamOu9NPa%2Ftwitter%2Fiframe&amp;url=https%3A%2F%2Fmedia.giphy.com%2Fmedia%2FU0GqVamOu9NPa%2Fgiphy.gif&amp;image=https%3A%2F%2Fmedia.giphy.com%2Fmedia%2FU0GqVamOu9NPa%2Fgiphy.gif&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=giphy" width="435" height="244" frameborder="0" scrolling="no"><a href="https://medium.com/media/fdfca34f678e3218e468b3432826fa17/href">https://medium.com/media/fdfca34f678e3218e468b3432826fa17/href</a></iframe><h4>Performance matters</h4><p>It’s… worse… because… the… mobile… app… is… slow…</p><p>There are still lots of others issues like sharing money with family/friends, days offs for transferring money between your own accounts (and have an extra fee because you are on overdrawn with your main account. Even if you have money on others accounts, in the same bank 🙈)</p><h3>Revolution on march</h3><p>Thank goodness some startups are working with real time technologies as disruptors in financial and banking industry. I already showed you <a href="https://n26.com/">Numer26</a> and <a href="https://revolut.com/r/davidgp1">Revolut</a> examples. I use theses 2 modern banking sytem.</p><p><a href="https://medium.com/u/92d87969cd76">N26</a> because I am an early adopter and a traveler. Every week I save 20 € on my <a href="https://n26.com/">N26</a> account. After 1 month, I have 80 €. At the end of the year I have 1000 € for traveling. With the money saved, you can visit <a href="https://davidl.fr/blog/indonesia.html">Indonesia during 1 month</a> and hike volcanos.</p><blockquote>Saving 20€ per week gives you 1000€ per year for traveling</blockquote><p>I am very happy to use my card. There is <strong>no extra fees</strong> if you are going to an ATM in a foreign country. I trust them about their mission : <em>Designing a bank the world loves to use</em>.</p><h4>Solve the pain, less friction, better design</h4><p>Recently I encounter the design Leader at <a href="https://medium.com/u/92d87969cd76">N26</a> at the <a href="https://medium.com/u/fdbb029ba2c9">Campus London</a>. Akarsh explained the pain he had with his bank in Germany. Almost the same as mine… in worse: he received postal letters of all his transactions each month. 🙅‍</p><p><a href="https://www.lewagon.com/blog/talk-Akarsh-sanghi-design-lead-n26-bank">Talk with Akarsh Sanghi, Design Lead at N26 Bank - Le Wagon</a></p><h3>David Leuliette 🚀 on Twitter</h3><p>Designing a bank 101 by @akarshsanghi @n26 @LeWagonLondon #design #sketch</p><p>The financial product developed by <a href="https://medium.com/u/92d87969cd76">N26</a> is amazing because the core feature are very useful:<br>- You can change the password of your credit card directly from the app<br>- The categorisation of your expenses is automatic<br>- Real time notifications (Sometimes at the ATM you have a smartphone alert before you can get your money back)</p><h4>The mobile bank</h4><p>I recently moved to London for <a href="https://www.autoenrolment.co.uk/">my new job</a>. 🇬🇧<br>I was sad because I could’nt use my <a href="https://medium.com/u/92d87969cd76">N26</a> account, I needed a uk based account to be paid.</p><p>No worries the <a href="https://medium.com/u/5dc32989c8e7">Revolut</a> HQ is in London. I decided to try their service because during the day I have a job. Taking an appointment in a middle aged bank with a human seams a painful experience.</p><p>Contrary to Number26, <a href="https://revolut.com/r/davidgp1">Revolut</a> have only a mobile app at the beginning. The features are the same, you can:</p><p><strong>Track Your Expenses<br></strong>The team built a feature which shows you exactly how much you’re spending, on what, and where.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/305/1*AGrdFveo84PwXf24qeqosA.gif" /></figure><p><strong>Spend Without Fees<br></strong><a href="https://revolut.com/r/davidgp1">Revolut</a> is eliminating fees to use your money abroad.<br>Banks charge up to £47 to spend just £500 in Europe. Revolut always gives you the real exchange rate when you pay in shops, online or withdraw cash.</p><p><strong>Get Paid Back<br></strong>Request money from your phone contacts for dinner, rent, anything.<br>Forget paying debt collector — get paid back in 3 taps: Choose a contact, enter an amount and request. They hit accept and the money is added to your account instantly.</p><p><strong>Request Money Instantly</strong><br>Did you know you can request money from people who don’t have Revolut? Simply send a sms and people can pay you directly. fast and efficient.</p><h3>Modern banking for traveler</h3><p>If you are a traveler, my advice is to open a <a href="https://revolut.com/r/davidgp1">Revolut account</a> now. This app can become your entire travel wallet. You can keep your money at the same place in 3 differents currencies £ € and $.</p><p>The onboarding for new users is perfect and paperless. You only need: <br>- A picture of your passport <br>- Your best selfie<br>- A smartphone</p><h3>David Leuliette 🚀 on Twitter</h3><p>OMG! @RevolutApp is super efficient! Open a 🇬🇧 bank account in 3min Order your new credit card 💳 Receive it 2 days after 😍</p><p>On the other hand it’s the same for <a href="https://medium.com/u/92d87969cd76">N26</a>. If you are living in Europe it’s a great solution.</p><p>⭐ <strong>Protip:</strong> In both case, don’t forget to keep your phone number alive. My sister recently dropped her old Spanish number for a new one in Asia. <br>It’s a little bit complicated if you receive confirmation code by sms.</p><h3>Thanks for reading! If you have feedback or suggestions, you can find me here:</h3><ul><li>Website: <a href="https://davidl.fr/">https://davidl.fr/</a></li><li>Twitter: <a href="https://twitter.com/flexbox_">https://twitter.com/flexbox_</a></li><li>GitHub: <a href="https://github.com/flexbox">https://github.com/flexbox</a></li></ul><p>I Hope this motivates you to travel more without the pain of a crappy bank. Just drop me a message if you have any questions — I would be glad to help you!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=583c86f93096" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>