<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: C.B.W.</title>
    <description>The latest articles on Forem by C.B.W. (@kriswep).</description>
    <link>https://forem.com/kriswep</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F273500%2F214b73a5-9877-4126-a3ad-08e8e0166400.jpg</url>
      <title>Forem: C.B.W.</title>
      <link>https://forem.com/kriswep</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/kriswep"/>
    <language>en</language>
    <item>
      <title>Covtact: Secure COVID-19 Contact Diary [DO Hackathon submission]</title>
      <dc:creator>C.B.W.</dc:creator>
      <pubDate>Sat, 09 Jan 2021 21:35:44 +0000</pubDate>
      <link>https://forem.com/kriswep/covtact-secure-covid-19-contact-diary-do-hackathon-submission-656</link>
      <guid>https://forem.com/kriswep/covtact-secure-covid-19-contact-diary-do-hackathon-submission-656</guid>
      <description>&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;Covtact is a contact diary, allowing you to log and remember your contacts to lower the spreading of COVID-19, and potentially other infection diseases afterwards. 😷&lt;/p&gt;

&lt;h3&gt;
  
  
  Category Submission:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Program for the People&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  App Link
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://covtact.app"&gt;https://covtact.app&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Screenshots
&lt;/h3&gt;

&lt;p&gt;The start screen, explaining the app and allowing users to enter a password for decryption.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--z7HGKdSH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/cjzv5ujlrbc1eileys2u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--z7HGKdSH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/cjzv5ujlrbc1eileys2u.png" alt="Covtacts start screen. It informs users, what Covtact is about and prominently asked them to enter a password to decrypt their data"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After a user opens the app for the first time and has no data logged, I greet them by showing a nice illustration, encouraging them to start using the app.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--z-PPCWmj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/gi5y99hacxucxfeoh8ca.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--z-PPCWmj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/gi5y99hacxucxfeoh8ca.png" alt="If nothing was entered yet, Covtact greets the users with a nice illustration of a woman looking through a windo at the dark sky"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To lower friction, adding a contact can be done from every screen and with minimal required data. A typeahed namefield helps you to enter names of persons added before.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PniAI6va--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/guye3utqkojtni9cklpm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PniAI6va--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/guye3utqkojtni9cklpm.png" alt="The screen to add a new contact, the name field is about to be filled out"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is also a calendar date picker. Users can enter data for today, or for any other day if they missed something.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OXE5KVO4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/y7y1xaqegnt5kefxufk5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OXE5KVO4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/y7y1xaqegnt5kefxufk5.png" alt="The screen to add a new contact, with the calendar date picker opened"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After the users logged a contact, they are grouped by date. This makes it easy to grasp when you had contact with somebody, and in what timeframe. Clicking any of the card would open a detail screen with all contacts during that timeframe  .&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kiLLazzl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/uc6gedzw7iwsriv69g97.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kiLLazzl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/uc6gedzw7iwsriv69g97.png" alt="Added contacts are grouped by date"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I implemented it responsively. Covtacts works well on any device factor, mobile, tablet or desktop!&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SqQWoNiE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/z838ge4bosai7qslw9h5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SqQWoNiE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/z838ge4bosai7qslw9h5.png" alt="The contact adding screen in a mobile resolution"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Internationalization is also considered. For now, the default version is english, but I translated it to german (my mother language) as well.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Eh5SmXcM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/k9zujlxra4vw0io3pgld.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Eh5SmXcM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/k9zujlxra4vw0io3pgld.png" alt="The home screen translated to German."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Description
&lt;/h3&gt;

&lt;p&gt;Covtact is a WebApp, which allows people to securely log with whom they had close contact during the day. People then can, in case they find themselves infected by COVID-19, warn each other and prevent further spreading.&lt;/p&gt;

&lt;p&gt;Minimising contacts is one of the most powerful weapons against the coronavirus. When we meet somebody, we should at least be prepared to warn them afterwards, in case we got infected earlier. Covtact aims to help you with that.&lt;/p&gt;

&lt;p&gt;It is different from other contact trackers, in that it does not automatically log who you met. Instead, it trusts you to do that responsibly and allows you to decide, if a contact was close.&lt;/p&gt;

&lt;p&gt;Covtacts is also very secure. All data get saved on the users device and never is transferred anywhere else. It is also fully encrypted and password protected.&lt;/p&gt;

&lt;h3&gt;
  
  
  Link to Source Code
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/kriswep/covtacts"&gt;https://github.com/kriswep/covtacts&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Permissive License
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/kriswep/covtacts/blob/main/LICENSE"&gt;MIT&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;COVID-19 is a terrible illness. I hope to help at least a little bit to slow it down. If Covtact only helps one person to warn their contacts and stop them form spreading COVID-19 further, building it was totally worth it.&lt;/p&gt;

&lt;p&gt;I had this idea a little while back. Seeing the announcement of the DigitalOcean App Platform Hackathon motivated me to finally execute on this and finish the project. My personal goal was to have a working version before christmas, which I had!🚀&lt;/p&gt;

&lt;h3&gt;
  
  
  How I built it
&lt;/h3&gt;

&lt;p&gt;Covtact is a Single Page App built using React. I'm very familiar with JavaScript and React, so that was a safe bet for me. I also decided to use TypeScript, to solidify my knowledge about that. I didn't use any 'proper' state management solution for this. Instead, I relied on useState and context for the main data store.&lt;/p&gt;

&lt;p&gt;Security was very important for this project. I read an &lt;a href="https://dev.to/voraciousdev/a-practical-guide-to-the-web-cryptography-api-4o8n"&gt;article&lt;/a&gt; about the web cryptography API, which I relied on. This article was my very first inspiration for this project. Awesome to know what the web is capable of.🌍&lt;/p&gt;

&lt;p&gt;Being a SPA, covtact does basically only require static hosting. So I didn't need very much of all the services Digital Ocean App Platform offers. I'm using ther static hosting and DNS offering. That worked very well and was fast to start.&lt;/p&gt;

&lt;h3&gt;
  
  
  Additional Resources/Info
&lt;/h3&gt;

&lt;p&gt;As with most frontend porjects these days, I could benefit from a lot of open source work. Let me point out some of them.&lt;/p&gt;

&lt;p&gt;Obviously &lt;a href="https://reactjs.org/"&gt;React&lt;/a&gt; and &lt;a href="https://reactrouter.com/"&gt;React Router&lt;/a&gt;, which are this apps core pillars 💕. I really love React and its' ecosystem.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://styled-components.com/"&gt;Styled components&lt;/a&gt; for fine CSS-in-JS. 💅🏾&lt;/p&gt;

&lt;p&gt;&lt;a href="https://react-spectrum.adobe.com/react-aria/index.html"&gt;React Aria&lt;/a&gt; to make it more accessible.♿&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Hacker0x01/react-datepicker"&gt;React Date Picker&lt;/a&gt; and &lt;a href="https://github.com/moroshko/react-autosuggest"&gt;React Autosuggest&lt;/a&gt; which helped me to build easy to use inputs.💻&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/i18next/react-i18next"&gt;React-i18next&lt;/a&gt; to translate the app to german.🇩🇪&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.react-spring.io/"&gt;React-spring&lt;/a&gt; to sprinkle some animation in.🎨&lt;/p&gt;

&lt;p&gt;Finally, I want to thank &lt;a href="https://dev.to/"&gt;dev.to&lt;/a&gt; and &lt;a href="https://www.digitalocean.com/"&gt;Digital Ocean&lt;/a&gt; for running this hackathon!&lt;/p&gt;

</description>
      <category>dohackathon</category>
    </item>
    <item>
      <title>Covtact: It's about first impressions [DO-Hackathon]</title>
      <dc:creator>C.B.W.</dc:creator>
      <pubDate>Wed, 30 Dec 2020 11:41:15 +0000</pubDate>
      <link>https://forem.com/kriswep/covtact-it-s-about-first-impressions-do-hackathon-2d07</link>
      <guid>https://forem.com/kriswep/covtact-it-s-about-first-impressions-do-hackathon-2d07</guid>
      <description>&lt;h2&gt;
  
  
  Project recap
&lt;/h2&gt;

&lt;p&gt;During the DigitalOcean Hackathon 👨‍💻 I want to build an app which allows you to log with whom you had contact. This is so you can inform people if need be and stop further COVID-19 spreading.&lt;/p&gt;

&lt;p&gt;There is already a working version, hosted on DigitalOcean’s App platform, available: &lt;a href="https://covtact.app"&gt;Covtact&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Working on the first empression: Empty state with illustrations
&lt;/h2&gt;

&lt;p&gt;After taking it kind of slow during the christmas days, I'm now back on this side project. One thing which needed improving was the 'empty state'. After first setting the encryption password, users obviously couldn't have logged any contacts  yet, so there wasn't a lot to show. Users were pretty much greeted with an blank screen. This needed to change. Since there is not much data to show, I decided to add a nice illustration and some copy to tell the user what's going on.&lt;/p&gt;

&lt;p&gt;I browsed &lt;a href="https://undraw.co/illustrations"&gt;undraw&lt;/a&gt; for a nice illustration. By the way, undraw is awesome! I found one wich just the right vibes, a women standing alone in front of a window and looking in the night. Fitting for the time and this app! After importing it in my React Application, it was straightforward to use. Loving the React ecosystem...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rLLPDFto--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9z9r60oqjoxjysjfud2p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rLLPDFto--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9z9r60oqjoxjysjfud2p.png" alt="Covtacts' Empty screen, telling users nothing is logged yet, and encouraging them to do so"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, I want to tackle translation for this app, stay tuned.&lt;/p&gt;

&lt;h2&gt;
  
  
  Feedback?
&lt;/h2&gt;

&lt;p&gt;Again, try it out, &lt;a href="https://covtact.app"&gt;log your contacts&lt;/a&gt; if you had any and help stop this pandemic. [Hint: It might become extra important during the holidays, please stay responsible in your actions]. 🙏&lt;/p&gt;

&lt;p&gt;And tell me what you think about this project down in the comments, or let‘s connect on &lt;a href="https://twitter.com/kriswep"&gt;twitter&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>dohackathon</category>
      <category>react</category>
      <category>design</category>
      <category>illustration</category>
    </item>
    <item>
      <title>Covtact: Secure contact diary to slow down COVID-19 [DO-Hackathon]</title>
      <dc:creator>C.B.W.</dc:creator>
      <pubDate>Fri, 25 Dec 2020 11:59:42 +0000</pubDate>
      <link>https://forem.com/kriswep/covtact-secure-contact-diary-to-slow-down-covid-19-do-hackathon-50k0</link>
      <guid>https://forem.com/kriswep/covtact-secure-contact-diary-to-slow-down-covid-19-do-hackathon-50k0</guid>
      <description>&lt;h2&gt;
  
  
  Project recap
&lt;/h2&gt;

&lt;p&gt;During the DigitalOcean Hackathon 👨‍💻 I want to build an app which allows you to log with whom you had contact. This is so you can inform people if need be and stop further COVID-19 spreading.&lt;/p&gt;

&lt;p&gt;As mentioned there is already a working version, hosted on DigitalOcean’s App platform, available: &lt;a href="https://covtact.app"&gt;Covtact&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Softlaunch
&lt;/h2&gt;

&lt;p&gt;I'm pretty happy with the current state featurewise. I'm planning to improve the UI further, and hoping to add some interaction animations. So, just in time for christmas 🎄 I decided to softlaunch the project.&lt;/p&gt;

&lt;p&gt;That means I encourage everybody (yes, you to 😉) to try &lt;a href="https://covtact.app"&gt;Covtact&lt;/a&gt; and track with whom they met outside their closest ones.&lt;/p&gt;

&lt;p&gt;Posting it here, on twitter and on &lt;a href="https://news.ycombinator.com/item?id=25517425"&gt;hackernews&lt;/a&gt;, didn't yield that much of a response for now, but I saw some users in the analytics. (Yes, I turned on self hosted analytics, matomo, but no worries, that doesn't log any personal data nor the added contacts).&lt;/p&gt;

&lt;p&gt;So please, if you want, I'd be very happy if you could share this project with others...&lt;/p&gt;

&lt;h2&gt;
  
  
  Feedback?
&lt;/h2&gt;

&lt;p&gt;Again, try it out, &lt;a href="https://covtact.app"&gt;log your contacts&lt;/a&gt; if you had any and help stop this pandemic. [Hint: It might become extra important during the holidays, please stay responsible in your actions]. 🙏&lt;/p&gt;

&lt;p&gt;And tell me what you think about this project down in the comments, or let‘s connect on &lt;a href="https://twitter.com/kriswep"&gt;twitter&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>dohackathon</category>
      <category>showdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Covtact: New name and design [DO-Hackathon]</title>
      <dc:creator>C.B.W.</dc:creator>
      <pubDate>Wed, 23 Dec 2020 10:11:01 +0000</pubDate>
      <link>https://forem.com/kriswep/covtact-new-name-and-design-do-hackathon-495j</link>
      <guid>https://forem.com/kriswep/covtact-new-name-and-design-do-hackathon-495j</guid>
      <description>&lt;h2&gt;
  
  
  Project recap
&lt;/h2&gt;

&lt;p&gt;During the DigitalOcean Hackathon 👨‍💻 I want to build an app which allows you to log with whom you had contact. This is so you can inform people if need be and stop further COVID-19 spreading.&lt;/p&gt;

&lt;p&gt;As mentioned in the last post there is already a working Proof of Concept, hosted on DigitalOcean’s App platform, available: &lt;a href="https://covtact.app"&gt;Covtact&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Naming
&lt;/h2&gt;

&lt;p&gt;I decided to go with the singular name: Covtact. in case you didn't notice, it's a word combination on Covid and Contact...&lt;/p&gt;

&lt;p&gt;Also, to give this project a proper home, I purchased a brand new domain: &lt;a href="https://covtact.app"&gt;covtact.app&lt;/a&gt;. Feel free to share this around, this is where it will stay. (In case you get an error, the DNS might take a little while).&lt;/p&gt;

&lt;p&gt;I added the domain to DigitalOcean and am using their DNS nameservers. It took some minute to become active, and after some more time all my clients updated their entries as well. Well, that's how it is, I guess.&lt;/p&gt;

&lt;p&gt;And, drumroll 🥁, I implemented the new UI I hinted at in the last post! Tell me if you like it, there are some things to improve for sure...&lt;/p&gt;

&lt;h2&gt;
  
  
  Feedback?
&lt;/h2&gt;

&lt;p&gt;There’s still work to be done, but the app is already useable. Try it out, &lt;a href="https://covtact.app"&gt;log your contacts&lt;/a&gt; if you had any and help stop this pandemic. [Hint: It might become extra important during the holidays, please stay responsible in your actions]. 🙏&lt;/p&gt;

&lt;p&gt;As always, tell me what you think about this project down in the comments, or let‘s connect on &lt;a href="https://twitter.com/kriswep"&gt;twitter&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>dohackathon</category>
      <category>design</category>
      <category>domain</category>
      <category>covid19</category>
    </item>
    <item>
      <title>Covtact: Contact diary with Style [Digital Ocean Hackathon]</title>
      <dc:creator>C.B.W.</dc:creator>
      <pubDate>Tue, 22 Dec 2020 19:44:54 +0000</pubDate>
      <link>https://forem.com/kriswep/covtacts-contact-diary-with-style-digital-ocean-hackathon-42ja</link>
      <guid>https://forem.com/kriswep/covtacts-contact-diary-with-style-digital-ocean-hackathon-42ja</guid>
      <description>&lt;h2&gt;
  
  
  Project recap
&lt;/h2&gt;

&lt;p&gt;During the DigitalOcean Hackathon 👨‍💻 I want to build an app which allows you to log with whom you had contact. This is so you can inform people if need be and stop further COVID-19 spreading.&lt;/p&gt;

&lt;p&gt;As mentioned in the last post there is already a working Proof of Concept, hosted on DigitalOcean’s App platform, available: &lt;a href="https://covtact.app"&gt;Covtact&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Creating an UI
&lt;/h2&gt;

&lt;p&gt;I‘m not too satisified with the current design. Honestly, design is not my strongest skill. So for this I jumped in Figma to brainstorm some ideas.&lt;/p&gt;

&lt;p&gt;I ended up with a two column layout, one side for adding new contacts and one for displaying them. I choose a greenish main color, which is said to represent nature, health and hope. That‘s what‘s needed, isn‘t it? 😃&lt;/p&gt;

&lt;p&gt;Now on to coding this UI, so I can share it. Maybe I will redo it again in the future, but for now I want to move on with this project. 💅✨&lt;/p&gt;

&lt;h2&gt;
  
  
  Feedback?
&lt;/h2&gt;

&lt;p&gt;There’s still work to be done, but the app is already useable. Try it out, &lt;a href="https://covtact.app"&gt;log your contacts&lt;/a&gt; if you had any and help stop this pandemic. [Hint: It might become extra important during the holidays, please stay responsible in your actions]. 🙏&lt;/p&gt;

&lt;p&gt;As always, tell me what you think about this project down in the comments, or let‘s connect on &lt;a href="https://twitter.com/kriswep"&gt;twitter&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>dohackathon</category>
      <category>react</category>
      <category>css</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Covtact: Autosuggest for contact diary [DO-Hackathon]</title>
      <dc:creator>C.B.W.</dc:creator>
      <pubDate>Mon, 21 Dec 2020 18:56:03 +0000</pubDate>
      <link>https://forem.com/kriswep/covtacts-autosuggest-for-contact-diary-do-hackathon-4d8h</link>
      <guid>https://forem.com/kriswep/covtacts-autosuggest-for-contact-diary-do-hackathon-4d8h</guid>
      <description>&lt;h1&gt;
  
  
  Covtact: Secure and simple contact logging
&lt;/h1&gt;

&lt;p&gt;During the DigitalOcean Hackathon 👨‍💻 I want to build an app which allows you to log with whom you had contact. This is so you can inform people if need be and stop further COVID-19 spreading.&lt;/p&gt;

&lt;p&gt;As mentioned in the last post there is already a working Proof of Concept, hosted on DigitalOcean’s App platform, available: &lt;a href="https://covtact.app"&gt;Covtact&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;To make the process of adding new contacts as seamless as possible, I added an autosuggest feature to the name input. That should make adding recurring contacts a little bit faster. 🚀&lt;/p&gt;

&lt;p&gt;Since I‘m building Covtact with React I decided to use &lt;a href="https://react-autosuggest.js.org/"&gt;React-Autosuggest&lt;/a&gt;. That worked out quite well. I managed to integrate it with Styled-Components, which I‘m using to style the rest of the app. 💅✨&lt;/p&gt;

&lt;h2&gt;
  
  
  Feedback?
&lt;/h2&gt;

&lt;p&gt;There’s still work to be done, especially regarding the UI and the copy, but it’s already useable. Try it out, &lt;a href="https://covtact.app"&gt;log your contacts&lt;/a&gt; if you had any and help stop this pandemic. [Hint: It might become extra important during the holidays, please stay responsible in your actions]. 🙏&lt;/p&gt;

&lt;p&gt;Tell me what you think about this project down in the comments, or let‘s connect on &lt;a href="https://twitter.com/kriswep"&gt;twitter&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>dohackathon</category>
      <category>react</category>
      <category>javascript</category>
      <category>digitalocean</category>
    </item>
    <item>
      <title>Fight the pandemic during DO-Hackathon</title>
      <dc:creator>C.B.W.</dc:creator>
      <pubDate>Sun, 20 Dec 2020 14:12:37 +0000</pubDate>
      <link>https://forem.com/kriswep/fight-the-pandemic-during-do-hackathon-5042</link>
      <guid>https://forem.com/kriswep/fight-the-pandemic-during-do-hackathon-5042</guid>
      <description>&lt;p&gt;I had this little idea for some months already: Building a secure contact tracking / diary app to help prevent the COVID-19 spreading.&lt;/p&gt;

&lt;p&gt;After reading the &lt;a href="https://dev.to/devteam/announcing-the-digitalocean-app-platform-hackathon-on-dev-2i1k"&gt;Digital Ocean Hackathon announcement&lt;/a&gt; earlier this this month, I decided to sat down and execute on this project.&lt;/p&gt;

&lt;p&gt;The idea is, you log with whom you had close contact. In case you get infected (and I hope you wont), you can warn your contacts, without forgetting one. Then they in turn can isolate and stop spreading the disease further. 🎉&lt;/p&gt;

&lt;p&gt;Since security and data protection is very important, especially for health related apps, I decided to save the logged contacts on the users' devices. And I'm planning to go one step further: &lt;br&gt;
Reading &lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;div class="ltag__link__content"&gt;
    &lt;div class="missing"&gt;
      &lt;h2&gt;Article No Longer Available&lt;/h2&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
 and tinkering around with Web Crypto I was eager to use that somewhere. 🔐

&lt;p&gt;That means, the logged contacts will be &lt;strong&gt;stored encrypted locally&lt;/strong&gt; on users device, &lt;em&gt;not&lt;/em&gt; sent in the cloud, or analyzed anywhere else. It also means, I won't need much of Digital Oceans app platform resources, only static hosting and DNS. Luckily, that's also part of their platform, so we're golden.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F0xl8nahenmni7uhhxi7s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F0xl8nahenmni7uhhxi7s.png" alt="First draft screen of the project: Some inputs to log with whom you had contacts"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Oh, and for the interested ones: There's already a working Proof of Concept available at &lt;a href="https://covtact.app" rel="noopener noreferrer"&gt;covtact.app&lt;/a&gt;. Don't get scared by the WIP UI, set a Encryption password and log ahead! It's all working as of now.&lt;br&gt;
🚀🔥👍&lt;/p&gt;

&lt;p&gt;And for the even more interested ones: &lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/kriswep" rel="noopener noreferrer"&gt;
        kriswep
      &lt;/a&gt; / &lt;a href="https://github.com/kriswep/covtacts" rel="noopener noreferrer"&gt;
        covtacts
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Stop the COVID-19 spread by tracking your contacts.
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;For feedback, comment down here and/or connect with me on &lt;a href="https://twitter.com/kriswep" rel="noopener noreferrer"&gt;twitter&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>dohackathon</category>
      <category>javascript</category>
      <category>react</category>
      <category>digitalocean</category>
    </item>
    <item>
      <title>Last Weeks' Top 5 Unseen articles</title>
      <dc:creator>C.B.W.</dc:creator>
      <pubDate>Mon, 17 Feb 2020 21:18:19 +0000</pubDate>
      <link>https://forem.com/kriswep/last-weeks-top-5-unseen-articles-3epa</link>
      <guid>https://forem.com/kriswep/last-weeks-top-5-unseen-articles-3epa</guid>
      <description>&lt;p&gt;dev.to is a great place to share your ideas, projects, content and start a good discussion. However, due to the large amont of published artices every day, some good articles get lost.&lt;/p&gt;

&lt;p&gt;So here are the articles I enjoyed reading last week which didn't get a ton of reaction (probably becase nobody saw them). Maybe there is something interesting for you to read and start your week.&lt;/p&gt;

&lt;h3&gt;
  
  
  UI 🖼️
&lt;/h3&gt;

&lt;p&gt;Everybody loves great UI, right? Lets' face it, getting time to optimze your UI can be a hard sell at a busy company. &lt;a href="https://dev.to/svaani"&gt;Vani Shivanand&lt;/a&gt; gives some tips to negotiate for UI optimization, focusing on performance improvements.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/svaani" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Li455RpX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--7aBPjFh---/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/310974/024470c5-136d-487c-a2f5-df38b184bb0e.jpg" alt="svaani"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/svaani/negotiating-for-ui-optimization-34fl" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Negotiating For UI Optimization&lt;/h2&gt;
      &lt;h3&gt;Vani Shivanand ・ Feb 14 '20 ・ 2 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#css&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  IndieWeb 🕸️
&lt;/h3&gt;

&lt;p&gt;IndieWeb is a movement focusing on making better and more connected experiences for publishing and consuming content. One part of that are webmontions, a way to inform content creators when and where their articles get discussed. &lt;a href="https://dev.to/swyx"&gt;Shawn swyx wang&lt;/a&gt; published a good piece on how to implement webmentions clientside using webmentions.io in Svelte.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/swyx" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0ojA0BfB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--HuQ70Dya--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/47766/26fbd2bf-c352-447c-9b4f-f66652dc4899.jpg" alt="swyx"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/swyx/clientside-webmentions-3dph" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Clientside Webmentions&lt;/h2&gt;
      &lt;h3&gt;swyx ・ Feb 12 '20 ・ 4 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#indieweb&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#svelte&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webmentions&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  UX 🤕
&lt;/h3&gt;

&lt;p&gt;You know these header bars which move away when scrolling down and appear when scrolling up? &lt;a href="https://dev.to/waylonwalker"&gt;Waylon Walker&lt;/a&gt; shares his experiences doing that in a React app, using React Headroom. Spoiler: It seemed to have been an awesome experience.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/waylonwalker" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---Ukb2PhF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--Izxe95PY--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/271838/95e313ca-39fc-4ee6-bf57-ad52b4dcf0d2.png" alt="waylonwalker"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/waylonwalker/i-just-added-react-headroom-to-my-site-2c51" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Save screen real estate with react-headroom&lt;/h2&gt;
      &lt;h3&gt;Waylon Walker ・ Feb 11 '20 ・ 2 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#showdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#gatsby&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#todayilearned&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Career boost 🏎️
&lt;/h3&gt;

&lt;p&gt;There can be a misalignment between the wish to learn new technologies and the work you do at work. &lt;a href="https://dev.to/ndy40"&gt;Ndy&lt;/a&gt; gives us his thoughts on the topic. One motivating point he makes is, that with the vast landscape in tech related jobs there's probably some need for everything you may be great at.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/ndy40" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hxQtikrf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--3JTgeRDe--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/135977/6f2f626f-86b5-48f2-94ab-cca8493fd0d5.jpg" alt="ndy40"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/ndy40/experience-is-all-about-learning-and-opportunities-374n" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Experience is all about learning and opportunities&lt;/h2&gt;
      &lt;h3&gt;Ndy ・ Feb 15 '20 ・ 2 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#developer&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#jobsearch&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#softwareengineering&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#hiring&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Work-Life balance 🌅
&lt;/h3&gt;

&lt;p&gt;So you have the possibility to work from home? That's fantastic, but there may be some challenges to that. &lt;a href="https://dev.to/nazanindelam"&gt;Nazanin Delam&lt;/a&gt; has a list with tips on how to be productive in a Work From Home setting.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/nazanindelam" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hgCcmmim--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--e_nPwDPy--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/87724/5c7561a9-12a4-4211-ac56-5b71cc9187a4.png" alt="nazanindelam"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/nazanindelam/wfh-effectively-1cl7" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;How to be effective when Working from Home (WFH)&lt;/h2&gt;
      &lt;h3&gt;Naz Delam ・ Feb 12 '20 ・ 2 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#productivity&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#career&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;Did you find something you missed in that list? Have your own Unseen Articles, which are worth a read? Let me know in the comments!&lt;/p&gt;

</description>
      <category>top7</category>
      <category>bestofdev</category>
      <category>healthydebate</category>
    </item>
    <item>
      <title>Last Weeks' Top 5 Unseen Articles</title>
      <dc:creator>C.B.W.</dc:creator>
      <pubDate>Mon, 10 Feb 2020 20:26:28 +0000</pubDate>
      <link>https://forem.com/kriswep/last-weeks-top-5-unseen-articles-1ljp</link>
      <guid>https://forem.com/kriswep/last-weeks-top-5-unseen-articles-1ljp</guid>
      <description>&lt;p&gt;Day after day, people like you write fantastic articles here on dev.to. But, due to the sheersize of this platform, not every article gets the attention it may deserve. So, this is my attempt to highlight the best articles published last week, which haven't got a lot of reactions (yet).&lt;/p&gt;

&lt;p&gt;What makes them the Best? 🤔 Well, I chose them, so they covered a topic I liked.&lt;/p&gt;

&lt;p&gt;Shameless plug: Consider following me on &lt;a href="https://twitter.com/kriswep"&gt;twitter&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Carreer boosting 🚀
&lt;/h3&gt;

&lt;p&gt;This one from &lt;a href="https://dev.to/rsanchezp"&gt;Raúl Sánchez&lt;/a&gt; isn't really an article but rather a discussion. Nonetheless there are a lot of great insights in the comments there, check it out or add your own tips!&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/rsanchezp" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FsN10BHe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--w9JqOBkI--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/146834/ae29c167-32eb-41b5-88f8-15416fdc7204.jpg" alt="rsanchezp"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/rsanchezp/advice-for-an-introvert-jr-dev-who-wants-to-give-a-talk-at-local-meetups-20mp" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Advice for an introvert jr dev who wants to give talks at local meetups?&lt;/h2&gt;
      &lt;h3&gt;Raúl Sánchez ・ Feb 9 '20 ・ 1 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#discuss&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Design 🎨
&lt;/h3&gt;

&lt;p&gt;Clicking a button on an UI should do something, and it should give immediate feedback that something happened. &lt;a href="https://dev.to/bnevilleoneill"&gt;&lt;br&gt;
Brian Neville-O'Neill&lt;/a&gt; wrote a thorough explanation about designing a ripple effect for buttons. This article comes with a lot of explanations and an example. Worth the read.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/bnevilleoneill" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jFBhTjDn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--xrYXMSDS--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/51699/718fcb9d-4517-4006-83bd-3d9de8e13a99.png" alt="bnevilleoneill"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/bnevilleoneill/designing-a-ripple-effect-for-ui-feedback-3h4g" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Designing a ripple effect for UI feedback&lt;/h2&gt;
      &lt;h3&gt;Brian Neville-O'Neill ・ Feb 7 '20 ・ 12 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#featuredposts&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#ui&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#tutorial&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  GraphQL 📈
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://dev.to/hasurahq_staff"&gt;Hasura&lt;/a&gt;, a company building an really impressive open source GraphQL engine introduced their Paid Pro Plan. Surely an important step for them on the way to be an lucrative company. (The main offering is still Open source and free). The article details the new offer, including some video demos.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/hasurahq" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__org__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bi7SQkeI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--jJOQBH9r--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/organization/profile_image/397/0f80fcfc-b6d9-4725-b97a-58fc08bbe0e6.png" alt="Hasura" width="150" height="150"&gt;
      &lt;div class="ltag__link__user__pic"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Dum6iOOZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--Gr2HjtNn--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/148148/e46f8c9d-4810-49e5-b085-900bc07527e0.png" alt="" width="150" height="150"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/hasurahq/introducing-hasura-pro-10j9" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Introducing Hasura Pro&lt;/h2&gt;
      &lt;h3&gt;Hasura for Hasura ・ Feb 6 '20 ・ 4 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#enterprise&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#graphql&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#postgres&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#announcements&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Wait is almost over ⏳
&lt;/h3&gt;

&lt;p&gt;React Suspense is Reacts' long awaited new feature/paradigm. &lt;a href="https://dev.to/jakelumetta"&gt;Jake Lumetta&lt;/a&gt; introduces us to the concepts and shows a lot of code examples while showing us how to build great user experiences with suspense.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/jakelumetta" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6WMmG-8l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--vdA18Y76--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/48438/7a6954aa-56a9-4201-90e6-64d88d0061bd.jpeg" alt="jakelumetta"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/jakelumetta/building-great-user-experience-with-react-suspense-3emk" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Building Great User Experience with React Suspense&lt;/h2&gt;
      &lt;h3&gt;Jake Lumetta ・ Feb 6 '20 ・ 4 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Motivation 👏
&lt;/h3&gt;

&lt;p&gt;Sometimes you need a little push. &lt;a href="https://dev.to/jpswade"&gt;&lt;br&gt;
James Wade&lt;/a&gt; makes some points why it can be a good idea to be bold. What he mostly means be that is go and do the things you think should be done.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/jpswade" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--effqeCfi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--dzeGnS6f--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/37526/7c76bb0c-7105-48ae-9a64-ca04df6ddfa2.jpeg" alt="jpswade"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/jpswade/be-bold-194e" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Be bold&lt;/h2&gt;
      &lt;h3&gt;James Wade ・ Feb 7 '20 ・ 2 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#personal&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#people&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#philosophy&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;That's my pick. There were a lot of great articles last week, so I'd be happy if you could chime in and share your Unseen Articles in the comments.&lt;/p&gt;

</description>
      <category>top7</category>
      <category>healthydebate</category>
      <category>bestofdev</category>
    </item>
    <item>
      <title>Flexing your HTML footer to the screen bottom</title>
      <dc:creator>C.B.W.</dc:creator>
      <pubDate>Tue, 04 Feb 2020 16:19:09 +0000</pubDate>
      <link>https://forem.com/kriswep/flexing-your-html-footer-the-the-screen-bottom-3gp5</link>
      <guid>https://forem.com/kriswep/flexing-your-html-footer-the-the-screen-bottom-3gp5</guid>
      <description>&lt;h2&gt;
  
  
  Howto make your footer stick to the bottom with flexbox
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Having a footer at the bottom of your HTML page can be very useful. Traditionally, forcing the footer down there was a quite hard task if the page content didn't fill the whole browser height. But nowadays using flexbox and some auto-margin can save the day.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When designing a HTML page you often want to add a footer with some additional but secondary information. Logically, the footer should be at the very bottom of the page. One could just add the footer markup as the last piece in the document and call it a day. That'll work, mostly. But what happens when the page content doesn't fill the entire height of your users screen? Well, the footer be rendered directly after your content and hang somewhere in the middle of the screen. That's not what we wanted. Luckily, flexbox can save the day here, without relying on obsure hacks!&lt;/p&gt;

&lt;p&gt;Want to see the code and end result right away? Here's a &lt;a href="https://codesandbox.io/s/sticky-footer-ropgr"&gt;codesandox&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/sticky-footer-ropgr?module=styles.css"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Let me walk you through that. We start with a minimal HTML setup, just to have something to work with.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Sticky Footer&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"./styles.css"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;section&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;🔥Hello Footer down there🔥&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;
        ⬇️This content does not fill a whole page height. The footer belongs
        down there. ⬇️
      &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;footer&amp;gt;&lt;/span&gt;🔥I'm the footer. My margin pushes me down.🔥&lt;span class="nt"&gt;&amp;lt;/footer&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All we have here is a short main section and a footer. This will create the undesired effect of having a floating footer in the middle of your screen. To make that footer sticky, we need some CSS.&lt;/p&gt;

&lt;h3&gt;
  
  
  Making the footer sticky
&lt;/h3&gt;

&lt;p&gt;We'll use flexbox and margin to push the footer at the bottom of the screen.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set the container to &lt;code&gt;display: flex;&lt;/code&gt;. The container is the body in our example.&lt;/li&gt;
&lt;li&gt;Change the containers' &lt;code&gt;flex-direction: column&lt;/code&gt;. This lets the footer flow below the content.&lt;/li&gt;
&lt;li&gt;Give the container full height with &lt;code&gt;min-height: 100vh;&lt;/code&gt;. The container is now large enough, but the footer still floats somewhere in the middle.&lt;/li&gt;
&lt;li&gt;Finally, give the footer enough margin with &lt;code&gt;margin-top: auto;&lt;/code&gt;. That pushes the footer down to the bottom.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's it, the footer will be at the pages' bottom, even with small content. Note that when the content gets larger than the users screen, the footer will flow normally at your pages bottom as well, no extra work there.&lt;/p&gt;

&lt;p&gt;Here's the relevant CSS.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* Use flex and set auto margin */&lt;/span&gt;
&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;flex-direction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;column&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;min-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100vh&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;footer&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;margin-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Thanks to webflow for the &lt;a href="https://youtu.be/NSnx-2Ztyfo"&gt;video inspiration&lt;/a&gt; to this article.&lt;/p&gt;

&lt;p&gt;Hope this helps you to create your next HTML layout. Follow me on &lt;a href="https://twitter.com/kriswep"&gt;twitter&lt;/a&gt; or leave a comment.&lt;/p&gt;

&lt;p&gt;&lt;sup&gt;First published as &lt;a href="https://wetainment.com/articles/sticky-html-footer/"&gt;Flexing your HTML footer to the page bottom&lt;/a&gt;.&lt;/sup&gt;&lt;/p&gt;

</description>
      <category>css</category>
      <category>flexbox</category>
      <category>html</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Detailed Guide to creating your own Create React App template</title>
      <dc:creator>C.B.W.</dc:creator>
      <pubDate>Mon, 13 Jan 2020 14:56:18 +0000</pubDate>
      <link>https://forem.com/kriswep/detailed-guide-to-creating-your-own-create-react-app-template-3djd</link>
      <guid>https://forem.com/kriswep/detailed-guide-to-creating-your-own-create-react-app-template-3djd</guid>
      <description>&lt;h3&gt;
  
  
  Detailed Guide to creating your own Create react App template
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Tl,dr: Since December '19 &lt;a href="https://github.com/facebook/create-react-app"&gt;Create React App&lt;/a&gt; (also known as CRA) allows you to write custom templates. That can help you to quickly create projects with your preferred stack. Templates can be published as npm modules and are used to create a new React project.&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Motivation
&lt;/h4&gt;

&lt;p&gt;CRA (Create React App) is a tool from Facebook helping you building modern React applications, without having to worry about configuring the dev environment. Up until recently, they created a small 'Hello World' like application to help getting you started. You then had to install and integrate most of the libraries you wanted to use. Think of adding a CSS-in-JS styling library, your State Management solution and the like.&lt;/p&gt;

&lt;p&gt;Nowadays they added the possibility to write and use your own custom template. This allows you, to bootstrap your CRA project with exactly the stack you prefer and go from there. CRA templates can be used with &lt;code&gt;npx create-react-app your-app --template your-published-template&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;How can we write our own template? Take a look at the two official templates in their repo for inspiration: &lt;a href="https://github.com/facebook/create-react-app/tree/master/packages/cra-template"&gt;CRA template&lt;/a&gt; and &lt;a href="https://github.com/facebook/create-react-app/tree/master/packages/cra-template-typescript"&gt;CRA template typescript&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The official &lt;a href="https://create-react-app.dev/docs/custom-templates"&gt;documentation&lt;/a&gt; is still kind of barebones, but will give you a good overview.&lt;/p&gt;

&lt;p&gt;Keep reading, if you want a more detailed writeup, of how to create your custom Create React App template.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--P3kjo5FU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/jrbanx7bg408q20qh6pi.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P3kjo5FU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/jrbanx7bg408q20qh6pi.jpg" alt="Cranes on top of big building under construction."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;sup&gt;Start building your next React project. Photo by &lt;a href="https://unsplash.com/@danist07"&gt;贝莉儿 DANIST&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/8Gg2Ne_uTcM"&gt;Unsplash&lt;/a&gt;.&lt;/sup&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  What's needed
&lt;/h4&gt;

&lt;p&gt;A custom Create React App template is a module on npm which has to use a certain folder structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;your-app/
  README.md
  template.json
  package.json
  template/
    README.md
    gitignore
    public/
      index.html
    src/
      index.js
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;template.json&lt;/code&gt; file contains the dependencies as well as potential new scripts for the created projects. The &lt;code&gt;/template&lt;/code&gt; folder basically becomes the created application, it will be copied during the initialisation phase of Create React App.&lt;/p&gt;

&lt;p&gt;Custom templates also have to follow a certain naming convention, they have to use the format &lt;code&gt;cra-template-[your-custom-template]&lt;/code&gt;. This comes in the &lt;code&gt;package.json&lt;/code&gt;. Quite long? Luckily, we can omit the &lt;code&gt;cra-template&lt;/code&gt; prefix and just use the &lt;code&gt;your-custom-template&lt;/code&gt; name in the CRA command, like in &lt;code&gt;npx create-react-app your-app --template your-custom-template&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Did you note the missing dot before the &lt;code&gt;template/gitignore&lt;/code&gt; file? This is on purpose, the dot will be added by CRA. They also switch all occurrences of &lt;code&gt;npm run&lt;/code&gt; with &lt;code&gt;yarn&lt;/code&gt; in your scripts and Readme, if you are using yarn. Good to know, right?&lt;/p&gt;

&lt;p&gt;Also note that you can add more files and dependencies to your template project as you wish. Keep in mind, that everything in &lt;code&gt;/template&lt;/code&gt; will be part of the created project, everything else not.&lt;/p&gt;

&lt;h4&gt;
  
  
  Create your new template
&lt;/h4&gt;

&lt;p&gt;Alright, time to see how to write our own template.&lt;/p&gt;

&lt;p&gt;To start writing a custom Create React App template I find it easiest to bootstrap it with CRA itself. So let's &lt;code&gt;npx create-react-app cra-template-your-custom-template&lt;/code&gt; and CRA will do its' thing (substitute your-custom-template with however you want to name your project). The default template will be used.&lt;/p&gt;

&lt;p&gt;Now the fun part begins. You can remove stuff you never use (like the rotating logo) and add all your preferred libs, as you would in a plain React app. Want a router? A CSS-in-JS lib? A state management tool? Animation? Something? Let's install whatever you want and import it in your application. My recommendation is to do that in the &lt;code&gt;src&lt;/code&gt; folder. Doing that, you can test and run your app normally with &lt;code&gt;npm run test&lt;/code&gt; and &lt;code&gt;npm run start&lt;/code&gt;. The goal is to get your project to the point you would love to start your future React projects at.&lt;/p&gt;

&lt;p&gt;As soon as you consider your project to be at a nice 'starting point', you have to make it a template. For that create the &lt;code&gt;template.json&lt;/code&gt; file at your project root:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"styled-components"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^4.4.1"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"custom-start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npm run start"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Copy all dependencies you need from your &lt;code&gt;package.json&lt;/code&gt; into the dependencies field, and all custom scripts into the scripts field. All the dependencies here will be installed on the bootstrapped projects. &lt;code&gt;react&lt;/code&gt;, &lt;code&gt;react-dom&lt;/code&gt; and &lt;code&gt;react-scripts&lt;/code&gt; are CRAs' default dependencies, you don't have to include them. Right now, devDependencies are not supported. If you don't have any new dependencies or scripts you can omit the corresponding block. BMake sure you add at least an empty &lt;code&gt;template.json&lt;/code&gt; file (with content &lt;code&gt;{}&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Then, create the &lt;code&gt;/template&lt;/code&gt; folder and copy your &lt;code&gt;/src&lt;/code&gt; and &lt;code&gt;/public&lt;/code&gt; folder into it, as well as the &lt;code&gt;.gitignore&lt;/code&gt; (and remove the dot from &lt;code&gt;gitignore&lt;/code&gt; in the template folder). You should also consider adding a &lt;code&gt;/template/README.md&lt;/code&gt;, this will become the initial README of the created projects.&lt;/p&gt;

&lt;p&gt;Lastly, we have to make some changes to our &lt;code&gt;package.json&lt;/code&gt; file. At the very least, make sure that &lt;code&gt;name&lt;/code&gt; starts with &lt;code&gt;cra-template-&lt;/code&gt;, remove the &lt;code&gt;private&lt;/code&gt; field and add &lt;code&gt;"main": "template.json",&lt;/code&gt;. Without these, Create React Apps' template creation will fail. You may also consider adding more fields for a nice npm package, like &lt;code&gt;author&lt;/code&gt;, &lt;code&gt;repository&lt;/code&gt;, &lt;code&gt;description&lt;/code&gt; etc.&lt;/p&gt;

&lt;p&gt;Publishing to npm is a topic of its own. To keep the scope small: After registering at npm and authorising on the CLI, you could publish the project with &lt;code&gt;npm publish --access public&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Wow, congratulations, you should now have created and published a Create React App custom template. Bootstrap a new React application with &lt;code&gt;npx create-react-app your-app --template your-custom-template&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Enjoy.&lt;/p&gt;

&lt;h4&gt;
  
  
  Tips
&lt;/h4&gt;

&lt;p&gt;Create React App can use a local template (on your filesystem). This is useful for development, or if you don't want to publish. Use &lt;code&gt;npx create-react-app your-app --template file:.&lt;/code&gt; in your template root folder.&lt;/p&gt;

&lt;p&gt;You can also use &lt;a href="https://docs.npmjs.com/about-scopes"&gt;npm scopes&lt;/a&gt; to namespace your template. Then you have to prepend your package name with your scope &lt;code&gt;@your-scope/cra-template-your-custom-template&lt;/code&gt;. You can still omit &lt;code&gt;cra-template&lt;/code&gt; from the Create React App command like in &lt;code&gt;npx create-react-app your-app --template @your-scope/your-custom-template&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Hope this helps you to create your own CRA template. Feel free to let me know about your templates or if you get stuck along the way. &lt;a href="https://twitter.com/kriswep"&gt;Tweet at me&lt;/a&gt; or leave a comment.&lt;/p&gt;

&lt;p&gt;&lt;sup&gt;First published as &lt;a href="https://wetainment.com/articles/create-react-app-template/"&gt;Write your own Create React App template&lt;/a&gt;.&lt;/sup&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>template</category>
      <category>boilerplate</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Hasura GraphQL - First impressions</title>
      <dc:creator>C.B.W.</dc:creator>
      <pubDate>Sun, 17 Nov 2019 13:44:44 +0000</pubDate>
      <link>https://forem.com/kriswep/hasura-graphql-first-impressions-2nog</link>
      <guid>https://forem.com/kriswep/hasura-graphql-first-impressions-2nog</guid>
      <description>&lt;h4&gt;
  
  
  Trying the realtime GraphQL API on Postgres from Hasura
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Tl,dr: The GraphQL ecosystem is growing quickly, one of its' newer options to get your API going is &lt;a href="https://hasura.io/"&gt;Hasura&lt;/a&gt;. They provide a solid Getting Started experience, expose advanced data access and migration options via a nice UI and also have a great documentation.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GraphQL at its' core is a specification for data communication, most commonly used between clients and servers. Originally created and open sourced by Facebook, it quickly grow and got picked up by a lot of companies in all shapes and sizes. Nowadays there's a growing number of startups providing services in the GraphQL space. I've previously explored one of them, Prisma, and have written about their &lt;a href="https://dev.to/revealing-prismagraphql-magic/"&gt;magic GraphQL tricks&lt;/a&gt;. Today let's take a look at another service in this space, called &lt;a href="https://hasura.io/"&gt;Hasura&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Hasura promises you a GraphQL API on existing and new Postgres databases, focusing on realtime features leveraging subscriptions. Hasura engines is strictly limited to Postgres, giving them the advantage to use these databases' features tightly in their engine. For example, instead of resolving each field separately, they transform the whole GraphQL query to a corresponding SQL statement. This helps to avoid unnecessary database request (ever heard of the n+1 problem?). The Hasura team described their &lt;a href="https://blog.hasura.io/architecture-of-a-high-performance-graphql-to-sql-server-58d9944b8a87/"&gt;architecture further&lt;/a&gt; some time ago.&lt;/p&gt;

&lt;p&gt;Another key feature is Hasuras' console. This is not only a GUI to Postgres, it also lets you define what tables to expose in your GraphQL engine, add views, access permissions, event hooks and more.&lt;/p&gt;

&lt;p&gt;All of this sounds promising to me, so I went ahead an gave Hasura a &lt;a href="https://github.com/kriswep/hasura-testdrive"&gt;try&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eV_5BqY5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/6vr5i0qnqf000yat9exo.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eV_5BqY5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/6vr5i0qnqf000yat9exo.jpg" alt="Lots of confetti on a dark background above a partying crowd."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;sup&gt;Confetti for the GraphQL ecosystem. Photo by &lt;a href="https://unsplash.com/@pabloheimplatz"&gt;Pablo Heimplatz&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/ZODcBkEohk8"&gt;Unsplash&lt;/a&gt;.&lt;/sup&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Getting Started
&lt;/h4&gt;

&lt;p&gt;Hasuras' documentation, which is actually very good, has two &lt;a href="https://docs.hasura.io/1.0/graphql/manual/getting-started/index.html"&gt;Getting Started&lt;/a&gt; options described. There is a One-Click option to deploy to &lt;a href="https://www.heroku.com/"&gt;Heroku&lt;/a&gt;, which hosts your database, as well as your Hasura GraphQL engine there. The other one is to start locally in a docker environment. These option also allows you to easily host your production environment on a lot of different providers. I tried the docker way, which went really smoothly and started in only a few minutes.&lt;br&gt;
No matter what you choose, your first step should be to open the console. That is under &lt;code&gt;http://localhost:8080/console&lt;/code&gt; (or under your Heroku URL if you used that), check the docs when in doubt. Take a look around, this is where Hasuras' superpowers shine. I really liked their UI to manage my data. You have an embedded GraphiQL view to explore your API, a data tab to manage your database and more.&lt;/p&gt;

&lt;p&gt;The first thing I did was to add a table under the data tab. There you can enter a table name, some columns and a primary key, click &lt;code&gt;Create&lt;/code&gt;, and voilà. You not only created a table on postgres like that, you also now have your first types in your GraphQL schema! Check the GraphiQL tab. There are queries, mutations and subscriptions generated according to your table fields. That's impressive and powersome.&lt;/p&gt;

&lt;p&gt;From there I created a basic &lt;code&gt;author&lt;/code&gt; - &lt;code&gt;post&lt;/code&gt; datamodel with some foreign key relations, which can be exposed as relationships for your GraphQL schema. Really nice, if you ask me. By the way, you can check out my experiments on &lt;a href="https://github.com/kriswep/hasura-testdrive"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There's also an option to add a third party GraphQL schema (schema-stitching for the win) and another option for exposing events to external services. The latter has a lot of potential, as it allows you to integrate any serverless functions to events happening in your database, and more. Again, &lt;a href="https://docs.hasura.io/1.0/graphql/manual/event-triggers/index.html"&gt;Hasuras' documentation&lt;/a&gt; is very helpful!&lt;/p&gt;

&lt;h4&gt;
  
  
  Getting ready for production
&lt;/h4&gt;

&lt;p&gt;Playing around in the console, tweaking tables and relations is fun, but how would we bring our progress from a dev to a production environment? Is there some kind of continous integration?&lt;/p&gt;

&lt;p&gt;Luckily, Hasura has an answer in the form of &lt;a href="https://docs.hasura.io/1.0/graphql/manual/migrations/index.html"&gt;migrations&lt;/a&gt;. You can choose to let Hasura log all changes made to the database schema, as well as the Hasura metadata, by using their provided &lt;a href="https://docs.hasura.io/1.0/graphql/manual/hasura-cli/index.html"&gt;CLI&lt;/a&gt;. Using this will generate some yaml files, which you can use to recreate your local dev database in a staging and production environment. This made a really good impression on me. Bringing your data to prod, check!&lt;/p&gt;

&lt;p&gt;Next thing one might wonder about is security. The base line of Hasuras' defense is setting an admin secret. This locks the access to your managemnt console down and also enables you to set authentication and access rules. The latter again is a great concept. You can set fine grained rules for every field in your GraphQl schema within an intuitive UI. Preventing access to certain data tables? To certain fields in any table? Only allow to view entries created by the current user? Check, check and check!&lt;/p&gt;

&lt;p&gt;Sadly, there are some disadvantages here. Right noe there is no option to guard your GraphQL API against malicous queries integrated. Think deeply nested or expensive queries. But they are working on enabling &lt;a href="https://github.com/hasura/graphql-engine/issues/2151"&gt;some options there&lt;/a&gt;. Also adding helpful third party tools to your GraphQL server is not possible, at least not directly.&lt;/p&gt;

&lt;h4&gt;
  
  
  So, what more?
&lt;/h4&gt;

&lt;p&gt;Using the Hasura engine gets you started with your next GraphQL API server quickly. Honestly, I was surprised how seamless and quick it was. But at first it felt quite, well strange, to give the API creation out of my hand. This is something you have to overcome. Granted, you have some options to shape the API via access rules and custom views. Still there are some tools from the wider GraphQL engine which cannot be used directly. Right now, I would consider adding a plain GraphQL gateway server in front of Hasuras engine and delegate query execution from there to Hasura. That would enable using tools for rate limiting, as well as adding monitoring solutions like &lt;a href="https://engine.apollographql.com"&gt;Apollo engine&lt;/a&gt; or anything else you fancy.&lt;/p&gt;

&lt;p&gt;Other than that, using Hasura has some great benefits. Their tight integration with Postgres enables performant access to your data. Oh and did I mention they are not only free to use, but also complety &lt;a href="https://github.com/hasura/graphql-engine"&gt;open source&lt;/a&gt;? Last but not least, their &lt;a href="https://docs.hasura.io/1.0/graphql/manual/index.html"&gt;documentation&lt;/a&gt; and &lt;a href="https://docs.hasura.io/1.0/graphql/manual/guides/index.html"&gt;learning options&lt;/a&gt; are &lt;a href="https://blog.hasura.io/"&gt;great&lt;/a&gt; and growing &lt;a href="https://learn.hasura.io/"&gt;constantly&lt;/a&gt;. That should be an important point when evaluating a new tech stack.&lt;/p&gt;

&lt;p&gt;I'm eager to try them out in some feature projects of mine!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This article was first published on my &lt;a href="https://wetainment.com/articles/hasura-impression/"&gt;blog&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>graphql</category>
      <category>hasura</category>
      <category>backend</category>
    </item>
  </channel>
</rss>
