<?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>DEV Community: Kyle McKell</title>
    <description>The latest articles on DEV Community by Kyle McKell (@kylemckell).</description>
    <link>https://dev.to/kylemckell</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%2F557946%2F41104d3c-b8a5-4cb4-ae84-5d20d70f4ced.jpg</url>
      <title>DEV Community: Kyle McKell</title>
      <link>https://dev.to/kylemckell</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kylemckell"/>
    <language>en</language>
    <item>
      <title>Setting Custom Bracket Colors with VSCode</title>
      <dc:creator>Kyle McKell</dc:creator>
      <pubDate>Fri, 04 Feb 2022 09:31:49 +0000</pubDate>
      <link>https://dev.to/kylemckell/setting-custom-bracket-colors-with-vscode-3ep4</link>
      <guid>https://dev.to/kylemckell/setting-custom-bracket-colors-with-vscode-3ep4</guid>
      <description>&lt;h2&gt;
  
  
  I love Bracket Pair Colorizer
&lt;/h2&gt;

&lt;p&gt;And I was extremely excited when VSCode picked it up to be included with no extensions! However... they changed the way that you set it up.&lt;/p&gt;

&lt;p&gt;Here's an example snippet of my current bracket pair settings in my &lt;code&gt;settings.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-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="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;enables&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;colors&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"editor.bracketPairColorization.enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;define&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;what&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;colors&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;you&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;want&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"workbench.colorCustomizations"&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;"editorBracketHighlight.foreground1"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#dfbaff"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"editorBracketHighlight.foreground2"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#bae1ff"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"editorBracketHighlight.foreground3"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#baffc9"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"editorBracketHighlight.foreground4"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#ffffba"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"editorBracketHighlight.foreground5"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#ffd3a1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"editorBracketHighlight.foreground6"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#ffb3ba"&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;And here's what these specific colors look like: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--G0VPLQ3h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1z8edev7w42uhr344wrq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--G0VPLQ3h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1z8edev7w42uhr344wrq.png" alt="Color listing of bracket highlights" width="111" height="121"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What it looks like in your editor with some code:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7FZSfJZc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lcyu3aq9cijwf31g25fq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7FZSfJZc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lcyu3aq9cijwf31g25fq.png" alt="[...nextauth].ts file with Nord Theme, Hasklig, and Bracket Pair Colorizer" width="722" height="575"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In case anyone is wondering, I use &lt;a href="https://marketplace.visualstudio.com/items?itemName=arcticicestudio.nord-visual-studio-code"&gt;Nord theme&lt;/a&gt; and &lt;a href="https://github.com/i-tu/Hasklig"&gt;Hasklig font&lt;/a&gt; with font ligatures on.&lt;/p&gt;

&lt;p&gt;Hope this helps anyone else who is looking to add some customization into their VSCode!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_eBNLoxK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/idv57ddn78pz1gd4r7e9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_eBNLoxK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/idv57ddn78pz1gd4r7e9.png" alt='Lots of brackets with "enjoy" in the center of it' width="575" height="20"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Finishing Up On My Next.js AeroPress Coffee Helper App </title>
      <dc:creator>Kyle McKell</dc:creator>
      <pubDate>Sun, 09 Jan 2022 22:08:44 +0000</pubDate>
      <link>https://dev.to/kylemckell/finishing-up-on-my-nextjs-aeropress-coffee-helper-app-618</link>
      <guid>https://dev.to/kylemckell/finishing-up-on-my-nextjs-aeropress-coffee-helper-app-618</guid>
      <description>&lt;h2&gt;
  
  
  Heya friends!
&lt;/h2&gt;

&lt;p&gt;I've been workin' hard on my &lt;a href="https://www.aeropresstracker.com"&gt;AeroPress Tracker&lt;/a&gt; app, and I've reached a point that I feel like it's nearing completion! &lt;/p&gt;

&lt;p&gt;You can check out my first post on it &lt;a href="https://dev.to/kylemckell/making-an-aeropress-tracking-app-3jf1"&gt;here&lt;/a&gt;, and I'm happy to report that I've made an intense amount of progress... it's a lot for only having one total devlog.&lt;/p&gt;

&lt;p&gt;So here are a few things that I've worked on:&lt;/p&gt;

&lt;h3&gt;
  
  
  Dark Mode
&lt;/h3&gt;

&lt;p&gt;The first feature that I devoted my time over to was implementing a dark mode... for the sake of my eyes, and the eyes of my users! &lt;/p&gt;

&lt;p&gt;Don't worry light mode lovers, it's still supported! (Although I'll never understand you)&lt;/p&gt;

&lt;p&gt;I implemented a cute little theme switching button, it's a moon in dark mode: &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--k1TrX1MF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2qbwmunutvglhn44x1un.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k1TrX1MF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2qbwmunutvglhn44x1un.png" alt="Moon Theme Switcher Button" width="181" height="158"&gt;&lt;/a&gt;&lt;br&gt;
And a sun in light mode!&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9oEk9GGV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3gtymg37iz05t7tt37jy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9oEk9GGV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3gtymg37iz05t7tt37jy.png" alt="Sun Theme Switcher Button" width="176" height="154"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I implemented this using &lt;a href="https://www.npmjs.com/package/use-dark-mode"&gt;useDarkMode&lt;/a&gt; and &lt;a href="https://tailwindcss.com/"&gt;TailwindCSS&lt;/a&gt;. It was simple to implement, and the code for the button was pretty simplistic as well:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;Props&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;toggleDarkMode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;isDarkMode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ThemeSwitchButton&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;toggleDarkMode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;isDarkMode&lt;/span&gt; &lt;span class="p"&gt;}:&lt;/span&gt; &lt;span class="nx"&gt;Props&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;
            &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;toggleDarkMode&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;self-center text-neutral-700 dark:text-neutral-100&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
        &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;VisuallyHidden&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Toggle&lt;/span&gt; &lt;span class="nx"&gt;dark&lt;/span&gt; &lt;span class="nx"&gt;mode&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/VisuallyHidden&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;            &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;isDarkMode&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Icon&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;moon&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;strokeWidth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mf"&gt;2.5&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;}
&lt;/span&gt;            &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;isDarkMode&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Icon&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sun&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;strokeWidth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mf"&gt;2.5&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;}
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&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;h3&gt;
  
  
  Dealing with the flicker
&lt;/h3&gt;

&lt;p&gt;In my last post, I mentioned how I was dealing with the flicker with a SessionMounter component.&lt;/p&gt;

&lt;p&gt;I've since dropped said component because I think it created an awful user experience, things just take forever to load! &lt;/p&gt;

&lt;p&gt;So I've opted into hydrating the page on the client side after validating the Session. I had to reimplement the buttons a little bit, but I'm happy how it turned out, and any flicker that does occur isn't backbreaking or horrific to look at.&lt;/p&gt;

&lt;h3&gt;
  
  
  Updating the UI
&lt;/h3&gt;

&lt;p&gt;The UI has gotten a huge overhaul from before. From adding a bit more of a design to the BrewCard:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Kc0EMzzN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jidpy85p5sdmxnd2pygr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Kc0EMzzN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jidpy85p5sdmxnd2pygr.png" alt="Brew Card" width="796" height="616"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To making the form look much nicer:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--o4aXQrss--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z55az7pv7d80xkmrsjwm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--o4aXQrss--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z55az7pv7d80xkmrsjwm.png" alt="Create a brew form" width="862" height="815"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Everything is coming together in a much better way to make an infinitely nicer app to use!&lt;/p&gt;

&lt;p&gt;As far as Tailwind goes, I'm enjoying it, but also finding it mildly frustrating. While I do love the capabilities that Tailwind provides, I find myself missing writing raw CSS. Luckily for the sake of this project I haven't had to get into the weeds of Tailwind too much (as I'd imagine making things such as grids with grid-template-areas is a bit of a pain), but if I ever have a really complicated UI, I think I might reach back over to my good pal Styled Components.&lt;/p&gt;

&lt;h2&gt;
  
  
  So what now?
&lt;/h2&gt;

&lt;p&gt;This app is nearing what I'm wanting for it, so I'm going to take a step away from it for a bit to update my portfolio page and maybe move onto a different project&lt;/p&gt;

&lt;p&gt;That being said, there are still a few features which will be implemented in the future:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pagination&lt;/li&gt;
&lt;li&gt;Editing a brew&lt;/li&gt;
&lt;li&gt;Adding comments to brews after creation&lt;/li&gt;
&lt;li&gt;Sorting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the time being, I see these as somewhat optional. However, as the app grows in scale, and if the userbase increases, they are necessary additions. A day or two of work would definitely solve these issues, however, I'm more excited to get a few other things going for the time being, and the app is at a place that I'm happy about. &lt;/p&gt;

&lt;p&gt;Hope you all enjoy using the app, and I'd love to hear what you think about it! It was a fun learning experience to utilize some technologies that I haven't leveraged much in the past, and I'm looking forward to utilizing this stack again!&lt;/p&gt;

&lt;p&gt;Have fun and code on! 👩‍💻&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>typescript</category>
      <category>tailwindcss</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Making an AeroPress Tracking App</title>
      <dc:creator>Kyle McKell</dc:creator>
      <pubDate>Mon, 27 Dec 2021 20:34:55 +0000</pubDate>
      <link>https://dev.to/kylemckell/making-an-aeropress-tracking-app-3jf1</link>
      <guid>https://dev.to/kylemckell/making-an-aeropress-tracking-app-3jf1</guid>
      <description>&lt;h2&gt;
  
  
  Hey Everyone!
&lt;/h2&gt;

&lt;p&gt;It's been a bit, but I'm happy to report that things have been well&lt;/p&gt;

&lt;p&gt;I'm currently working on an app, and I'm pretty excited for it to come into fruition, so I wanted to update my progress on here incrementally (not going to make any promises on how often 🤣) to give some insight on what I'm doing.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's the project?
&lt;/h2&gt;

&lt;p&gt;Listen... I'm a coffeehead (some would even say a coffee snob), and one of my favorite methods of brewing coffee is with the AeroPress! &lt;/p&gt;

&lt;p&gt;An app idea that I've always had is to create an application which allows its users to add in their favorite coffee roasts, and different methods, and then combine them together to make different brews for them to refer back to each and every morning.&lt;/p&gt;

&lt;p&gt;I began working on that idea earlier this year, but I realized that the scope of the project was out of control, and I didn't really even know where to start.&lt;/p&gt;

&lt;p&gt;... Enter &lt;a href="https://www.aeropresstracker.com/"&gt;AeroPress Tracker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I figured that if I could cut down to just one method (in this case the AeroPress), I could very easily create an application which would help people with making an ideal AeroPress brew.&lt;/p&gt;

&lt;p&gt;(Disclaimer: this application is still in the VERY early phases. There are lots of missing features, it does work, however!)&lt;/p&gt;

&lt;p&gt;Here's a link to the &lt;a href="https://github.com/KyleMcKell/aeropress-tracker"&gt;GitHub Repo&lt;/a&gt;, in case you're curious on the code.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Use
&lt;/h2&gt;

&lt;p&gt;Right now the homepage isn't operational (I guess you can log in... lol), but if you navigate over to the &lt;a href="https://www.aeropresstracker.com/brew/new"&gt;Create a Brew Page&lt;/a&gt; you can put in your info for your brew you want to make. &lt;/p&gt;

&lt;p&gt;Currently you'll notice it's pretty barebones. As an example, I'm only collecting time in seconds right now, and I hope to give it capabilities to take in both minutes and seconds (and then store it as seconds in the backend). &lt;/p&gt;

&lt;p&gt;Once you put in a brew, navigate over to its page with its id (there should be a link created after you make the brew at the bottom of the page) and you'll have a timer which you can start up to make your brew! Alternatively, head over to the &lt;a href="https://www.aeropresstracker.com/brew"&gt;Brew Page&lt;/a&gt; and check out what others have done!&lt;/p&gt;

&lt;p&gt;(As a note: It is likely that I am going to be doing a LOT with this app over these coming weeks. It is not out of the question that I will be deleting all data in the database as more features get added or modified. I'm not married to anything yet and I don't want people to start using this with the expectation that everything is going to be permanent)&lt;/p&gt;

&lt;p&gt;I'd love if people could give it a shot and let me know what you think! &lt;/p&gt;

&lt;h2&gt;
  
  
  The Stack
&lt;/h2&gt;

&lt;p&gt;This application is being built with Next.js, Prisma, PostgreSQL and TailwindCSS. I've been wanting to build a site utilizing these tools for a little bit now, so I'm excited to report that I'm... conflicted about it?&lt;/p&gt;

&lt;p&gt;Listen... I love all of these techs. Especially Next and Prisma (Postgres is nice too, but at the end of the day it's just an SQL database lol). However, I'm really conflicted on how to feel with Tailwind...&lt;/p&gt;

&lt;h3&gt;
  
  
  Tailwind
&lt;/h3&gt;

&lt;p&gt;On one hand I love Tailwind, it's super nice to work with and the development flow is FAST. However, debugging styles, or wanting to write custom styles, especially when working with CSS grid or wanting to make clamp values, the framework seems iffy.&lt;/p&gt;

&lt;p&gt;I feel like my ability to create robust and safe CSS is lessened from Tailwind, while also being bolstered? It's weird to explain, but it's like a superpower that is just so much to handle that I can't exactly control all of it. I have had moments of "WOW! I love Tailwind!" and moments of "Ugh... why did I choose Tailwind?"&lt;/p&gt;

&lt;p&gt;I want to be clear that I am far from a TailwindCSS hater. I think the framework is awesome and I am looking forward to its future in the space. I definitely feel like I need more time with it and more experience working with it, but right now I'm more excited about &lt;a href="https://styled-components.com/"&gt;Styled Components&lt;/a&gt; (which I've taken a love to from Josh W. Comeau's &lt;a href="https://css-for-js.dev/"&gt;CSS for JavaScript Developers Course&lt;/a&gt;) and also &lt;a href="https://vanilla-extract.style/"&gt;Vanilla Extract&lt;/a&gt; which I plan to look into more for future projects. With other tools like Chakra UI also looming over my shoulder competing for my headspace with styling, these small frustrations from Tailwind keep adding up and I'm not sure if I'll be using it for my own personal projects anymore.&lt;/p&gt;

&lt;p&gt;I guess I'll give an example on what I'm running into:&lt;/p&gt;

&lt;p&gt;I really dislike code duplication, so when I run into something that I need to repeat a few times, I make a component, as most people do. However, what I'm realizing, is these components are only holding styles. At that point, I'm just wishing that I was using styled components, as then I can use straight CSS syntax and it's clearer on what the component is accomplishing, as it's not an entire component, but rather just one that has styles applied from styled components. I could make a variable which holds the styles together, but then I don't get the autocompletion from Tailwind. I'm sort of at a loss on what I want to do. As I do really feel the "this is weighing down my markup" when using Tailwind, especially once I start messing with media queries.&lt;/p&gt;

&lt;p&gt;If anyone has any tips for getting over this, or just generally with Tailwind, I'd love to hear them. I really enjoy the workflow Tailwind provides, but the shortcomings make the entire experience watered down for me, if you will. &lt;/p&gt;

&lt;h3&gt;
  
  
  Next.js
&lt;/h3&gt;

&lt;p&gt;I am enjoying my time with Next a lot! The Routing is wonderful, I feel like I'm learning how to make full stack apps in a comfortable environment. And while I definitely am not an expert with it at all, I'm excited to learn more about it.&lt;/p&gt;

&lt;p&gt;However, I have ran into one problem which I have yet to decide on how I want to solve... the flicker. &lt;/p&gt;

&lt;p&gt;At the moment I'm using Static Site Generation with the revalidate props (making the site run on Incremental Static Regeneration). However, due to this my application was flickering when you visit and you are currently logged in. &lt;/p&gt;

&lt;p&gt;At the current moment. My solution is to have a component which prevents the page from hydrating whatsoever until the session state is known. This causes the site to load SLOW in some cases, which isn't ideal. However, I also dislike having the site flicker on the log in button. &lt;/p&gt;

&lt;p&gt;Frankly, I think I'm going to get rid of the "SessionMounter" (what I've called my component) and opt for just accepting the flicker and adjusting the UI to be less jarring when it happens. It'll likely take some UI work and creativity, but I think it'll provide a better user experience than preventing a load for a tiny bit to all the way up to a few seconds. I would love to hear how you have fixed the flicker yourself in your Next.js SSG projects, as it's something that is the ever present plight of front-end development.&lt;/p&gt;

&lt;p&gt;Here is the code for the mounter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useSession&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;next-auth/react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;Props&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ReactNode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;SessionMounter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;children&lt;/span&gt; &lt;span class="p"&gt;}:&lt;/span&gt; &lt;span class="nx"&gt;Props&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useSession&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;mounted&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setMounted&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nx"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;loading&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;setMounted&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;mounted&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;SessionMounter&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Other Tech notes
&lt;/h3&gt;

&lt;p&gt;I have been reaching a lot for libraries. As is the React way I suppose. Currently I'm utilizing SWR for my data fetching, utilizing react-hook-form to assist with the creating a brew form, utilizing react-timer-hook for my timer, using next-auth to handle authentication (only through Google right now), and using react-feather for icons. While these are plentiful, all of them serve a purpose for problems which I could build out (and may later). However, currently my goal is to get this project shipped out and completed, and these libraries are pretty awesome for accomplishing that goal.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm working on now
&lt;/h2&gt;

&lt;p&gt;Right now the biggest priority is getting the modal created so you can actually log in on mobile devices. This also goes in tandem with giving the Home Page some more functionality so URLs don't have to be directly accessed. The Header needs to gain links to different pages as well, allowing for easier navigation.&lt;/p&gt;

&lt;p&gt;All of these things should be pretty easy to implement, and should be up and running soon!&lt;/p&gt;

&lt;p&gt;The next goal is adding in a cleaner functionality. Right now the app is basically just a glorified timer. I want to make it more definitive between different brews. Whether that be making it so more specific steps can be added, or making the UI reflect the differences between brews better, is left to be decided. I'll have to do some thinking on what I feel is the best course of action.&lt;/p&gt;

&lt;p&gt;Also, for the pages which list a lot of different brews, currently I believe it fetches every single brew in the entire database. This is fine for now, but is something that I'll have to address with either pagination or an infinite scroll (or some other solution).&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;It's been fun working on an app which I plan to use on a weekly basis! I hope you guys are excited to see what happens with it, and if you know anyone who loves to brew with an AeroPress, I'd love to hear their feedback for features which they'd like to have in a timer app. &lt;/p&gt;

&lt;p&gt;That's all for now, have a great one, and code on! 👩‍💻&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>typescript</category>
      <category>tailwindcss</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Creating a Plan for a React UI Component Library Project</title>
      <dc:creator>Kyle McKell</dc:creator>
      <pubDate>Sun, 14 Mar 2021 11:30:39 +0000</pubDate>
      <link>https://dev.to/kylemckell/creating-a-plan-for-a-react-ui-component-library-project-4kbm</link>
      <guid>https://dev.to/kylemckell/creating-a-plan-for-a-react-ui-component-library-project-4kbm</guid>
      <description>&lt;p&gt;Hello again everyone! 🙋‍♂️ I hope your weekend is treating you well!&lt;/p&gt;

&lt;p&gt;In one of my &lt;a href="https://dev.to/kylemckell/the-plan-for-better-project-planning-36p2"&gt;previous posts&lt;/a&gt;, I outlined my goals for planning out my future projects, and now the time has come for the long awaited, much anticipated, once and a lifetime experience...&lt;/p&gt;

&lt;p&gt;Putting it into practice! 🙌&lt;/p&gt;

&lt;p&gt;For my first project, I intended to create a UI library that I could then utilize for the rest of my applications. My plan is to make a basic UI library utilizing colors from the wonderful &lt;a href="https://www.nordtheme.com/"&gt;Nord theme&lt;/a&gt; by ArcticIceStudio. ❄🧊&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let's remind ourselves what the steps were from before:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What's the objective/goal of the project (The Why) 🥅&lt;/li&gt;
&lt;li&gt;Who am I making this for? (The Who) 👨‍👩‍👧‍👦&lt;/li&gt;
&lt;li&gt;What's the core feature of the project? (The What) ✨&lt;/li&gt;
&lt;li&gt;What technologies am I going to use? (The How, The Where) ⚙&lt;/li&gt;
&lt;li&gt;What is my deadline? (The When) 📅&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Great! Now let's begin:
&lt;/h4&gt;

&lt;h2&gt;
  
  
  1) What's the objective?
&lt;/h2&gt;

&lt;p&gt;With making a UI library, my primary objective is to create an attractive, repeatable UI experience to use between multiple apps. Additionally, I feel as if my current UI skills are slightly lacking in strength, so creating a UI library is a perfect way to focus on improving that part of my development.&lt;/p&gt;

&lt;h2&gt;
  
  
  2) Who am I making this for?
&lt;/h2&gt;

&lt;p&gt;This project is primarily for my personal usage. However, I would like to make it so anyone can utilize it, as I'll be uploading the final product to NPM.&lt;/p&gt;

&lt;h2&gt;
  
  
  3) What's the core feature of the project?
&lt;/h2&gt;

&lt;p&gt;My biggest goal for this project is to create an overall cohesive modern experience. One large feature I want to add is an easily switchable light and dark mode.&lt;/p&gt;

&lt;h2&gt;
  
  
  4) What technologies am I going to use?
&lt;/h2&gt;

&lt;p&gt;I've had to do a little bit of research for this one, as I've never created a UI library before, only full applications. &lt;/p&gt;

&lt;p&gt;Since this is a React UI Library, I will be utilizing React to create my UI. &lt;/p&gt;

&lt;p&gt;But I encountered a problem, how am I going to test my UI Library? I'm not creating an application, I'm simply making UI components.&lt;/p&gt;

&lt;p&gt;After much research, what I've settled on is &lt;a href="https://storybook.js.org/"&gt;Storybook&lt;/a&gt; for testing my UI library. (Check out my previous post about it &lt;a href="https://dev.to/kylemckell/how-to-easily-set-up-a-react-storybook-app-1p4o"&gt;here&lt;/a&gt;!) Storybook is very robust, easy to use, easy to set up, and very scalable. I'm excited to use it&lt;/p&gt;

&lt;p&gt;I would also like to use TypeScript, as I love when other libraries have typing support.&lt;/p&gt;

&lt;h2&gt;
  
  
  5) What is my deadline?
&lt;/h2&gt;

&lt;p&gt;I would like to have my first iteration done by the end of this week, which is 03/20/2021. This would include many HTML tags from buttons, to headers, etc.&lt;/p&gt;

&lt;p&gt;I would like to have it completed by the end of the month, 3/31/2021. The full completion would have the capabilities of theme switching, and likely a few specific components to the library, such as a few animations to clean things up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Plan Set!
&lt;/h2&gt;

&lt;p&gt;Alright! That wasn't so bad. While this plan is pretty simple, is flexible for change, and is more of a guideline than a rule, I still believe that it is helpful to outline. By creating simple plans such as this, we can be more directed with our goals and not have to make as many on the fly decisions.&lt;/p&gt;

&lt;p&gt;Thanks for tuning in, I hope you look forward to the future of this project! I'll see you guys tomorrow with an update!&lt;/p&gt;

&lt;p&gt;Code on! 👨‍💻&lt;/p&gt;

</description>
      <category>100daysofcode</category>
      <category>react</category>
      <category>planning</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How to Easily Set Up a React Storybook App</title>
      <dc:creator>Kyle McKell</dc:creator>
      <pubDate>Sun, 14 Mar 2021 10:28:08 +0000</pubDate>
      <link>https://dev.to/kylemckell/how-to-easily-set-up-a-react-storybook-app-1p4o</link>
      <guid>https://dev.to/kylemckell/how-to-easily-set-up-a-react-storybook-app-1p4o</guid>
      <description>&lt;p&gt;One of the greatest parts about React is the giant ecosystem of components created by thousands of devs all over the world.&lt;/p&gt;

&lt;p&gt;I'm sure you've wondered at some point, how can I contribute something of my own to this? Is it simple? How can I share only my components without just pasting raw code? I suppose I could just have a project with no UI, but then how would I test my components? 😕&lt;/p&gt;

&lt;p&gt;I'm going to go over how to create and test your UI library. Here we go! 🚀&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter Storybook 📕
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://storybook.js.org/" rel="noopener noreferrer"&gt;Storybook&lt;/a&gt; is an open source tool that makes creating UI libraries extremely easy. Let's get your Storybook project up and running! 🏃‍♀️&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧶Note: I am going to be using yarn throughout this tutorial, however, any package manager works&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's head over to our terminal and set up a new yarn project&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Creating a new directory to put our project into&lt;/span&gt;
&lt;span class="nb"&gt;mkdir &lt;/span&gt;storybook-demo

&lt;span class="c"&gt;# Changing our current directory to our project directory&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;storybook-demo

&lt;span class="c"&gt;# Setting up a yarn project (feel free to use the -y flag)&lt;/span&gt;
yarn init

&lt;span class="c"&gt;# Opening our directory in our text editor (I use VSCode)&lt;/span&gt;
code &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now let's open up our &lt;code&gt;package.json&lt;/code&gt; that was created in our directory, if you're using yarn it'll look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-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;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"storybook-demo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"main"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"index.js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"license"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MIT"&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;Let's head back to our terminal and add React to our project&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Add react and react-dom to devDependencies&lt;/span&gt;
yarn add react react-dom &lt;span class="nt"&gt;-D&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now your &lt;code&gt;package.json&lt;/code&gt; should look something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-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;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"storybook-demo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"main"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"index.js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"license"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MIT"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"devDependencies"&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;"react"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^17.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"react-dom"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^17.0.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="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;Sweet! Now let's create an &lt;code&gt;src&lt;/code&gt; folder.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# create an src folder&lt;/span&gt;
&lt;span class="nb"&gt;mkdir &lt;/span&gt;src
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cool, we'll mess with the folder structure a little more, but this is sufficient to reliably set up Storybook in our project.&lt;/p&gt;

&lt;p&gt;Go ahead and run this in your terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx sb init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;📝Note: Make sure you have react in your project before running this command, storybook uses information provided in your &lt;code&gt;package.json&lt;/code&gt; to initialize itself&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As you wait for this to work its ✨magic✨, you can take a trip over to the &lt;a href="https://storybook.js.org/docs/react/get-started/install" rel="noopener noreferrer"&gt;Storybook docs&lt;/a&gt; to read a little more about it.&lt;/p&gt;

&lt;p&gt;One that finishes, you'll notice some differences to your project, let's start by going into our &lt;code&gt;package.json&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-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;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"storybook-demo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"main"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"index.js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"license"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MIT"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"devDependencies"&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;"@babel/core"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^7.13.10"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@storybook/addon-actions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^6.1.21"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@storybook/addon-essentials"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^6.1.21"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@storybook/addon-links"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^6.1.21"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@storybook/react"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^6.1.21"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"babel-loader"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^8.2.2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"react"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^17.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"react-dom"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^17.0.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;"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;"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;"storybook"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"start-storybook -p 6006"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"build-storybook"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"build-storybook"&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;Great! Storybook has recognized that we have react in our project (as seen with the &lt;code&gt;@storybook/react&lt;/code&gt; dependency). Also take note of the two new scripts that have been added to our project, we'll look more at the first one later.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you've never used storybook before, feel free to run this command and explore!&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# for yarn&lt;/span&gt;
yarn storybook

&lt;span class="c"&gt;# for npm&lt;/span&gt;
npm run storybook
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you look at your file structure, you'll also notice two new folders have been introduced: &lt;code&gt;.storybook&lt;/code&gt; and &lt;code&gt;src/stories&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;For the means of this tutorial, we are going to leave &lt;code&gt;.storybook&lt;/code&gt; alone, as all of the default configurations suit our needs. Refer to the docs if you find the need to change things up.&lt;/p&gt;

&lt;p&gt;But let's take a look into the &lt;code&gt;src/stories&lt;/code&gt; folder&lt;/p&gt;

&lt;p&gt;You'll see something looking like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;src/stories
| /assets
| button.css
| Button.js
| Button.stories.js
| header.css
| Header.js
| Header.stories.js
| Introduction.stories.mdx
| page.css
| Page.js
| Page.stories.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Take note of how this is structured, as this is entirely viable Storybook code! However, I think we can make something more robust and more easily scalable by bettering the file structure of our project&lt;/p&gt;

&lt;p&gt;So let's delete the contents!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# change to stories directory&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;src/stories

&lt;span class="c"&gt;# remove the contents&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We'll come back to that later... let's set up a UI component! We'll be making a simple button, but feel free to make whatever you would like&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# change to our src directory (assuming you're in src/stories)&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ..

&lt;span class="c"&gt;# create a components directory&lt;/span&gt;
&lt;span class="nb"&gt;mkdir &lt;/span&gt;components

&lt;span class="c"&gt;# change to our components directory&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;components

&lt;span class="c"&gt;# create a Button.js file in our components directory&lt;/span&gt;
&lt;span class="nb"&gt;touch &lt;/span&gt;Button.js

&lt;span class="c"&gt;# open Button.js in our editor&lt;/span&gt;
code Button.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For the sake of simplicity, we're going to keep this component pretty barebones, we can iterate more on this later.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// src/components/Button.js&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;I am a Button!&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we need to set up a story for our Button. Let's create a file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Go to stories dir (if you're still in src/components)&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ../stories

&lt;span class="c"&gt;# Create a Button.stories.js in our stories directory&lt;/span&gt;
&lt;span class="nb"&gt;touch &lt;/span&gt;Button.stories.js

&lt;span class="c"&gt;# Open it in our editor&lt;/span&gt;
code Button.stories.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Still with me? Now let's put in some code to test out Storybook&lt;/p&gt;

&lt;p&gt;We can think of our story as a mini React project. We'll walk through the basics of making a story, but you can check out the docs on a more in depth explanation of what a story is &lt;a href="https://storybook.js.org/docs/react/get-started/whats-a-story" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Go ahead and put this into your &lt;code&gt;Button.stories.js&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Button.stories.js&lt;/span&gt;

&lt;span class="c1"&gt;// import React and stories from storybook&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;storiesOf&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@storybook/react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// import our Button component&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../components/Button&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// create our stories&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;stories&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;storiesOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Button Test&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// add to our stories&lt;/span&gt;
&lt;span class="nx"&gt;stories&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Button&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This simple story is going to just display our Button component that we created earlier, as to maintain simplicity&lt;/p&gt;

&lt;p&gt;Also! Since our story behaves like a React app, we need to import React. This also applies if we choose to use hooks.&lt;/p&gt;

&lt;p&gt;Now let's see if our story works!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# for yarn&lt;/span&gt;
yarn storybook

&lt;span class="c"&gt;# for npm&lt;/span&gt;
npm run storybook
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see something like this pop up in your browser:&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%2Fuploads%2Farticles%2Fzomcix5nqso1o1mayoxk.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%2Fuploads%2Farticles%2Fzomcix5nqso1o1mayoxk.png" alt="Storybook localhost UI"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Great! Now everything is up and running. We can do just about anything we want with our storybook, from creating an entire UI library, to testing out how our different UI components work together.&lt;/p&gt;

&lt;p&gt;I'll give a quick (albeit very very simple) example with the Button component that we made. After that I'll send you off on your own! ✈&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// src/components/Button.js&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="nx"&gt;bgColor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;lightblue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;children&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Button&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;bgColor&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&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;This simple Button component takes in a &lt;code&gt;bgColor&lt;/code&gt; prop, it's &lt;code&gt;children&lt;/code&gt;, and then also passes it's rest of its &lt;code&gt;props&lt;/code&gt; (for instance 'onClick')&lt;/p&gt;

&lt;p&gt;Now let's make this do something within our story!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// src/stories/Button.stories.js&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;storiesOf&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@storybook/react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../components/Button&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;stories&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;storiesOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Button Test&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;stories&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Button&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handleClick&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You clicked the button!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;

    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt; &lt;span class="na"&gt;bgColor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"white"&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleClick&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            This is the Button's children
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&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;I added in an &lt;code&gt;onClick&lt;/code&gt; handler, a prop for our &lt;code&gt;bgColor&lt;/code&gt;, and filled in the Button's children with some generic text. &lt;/p&gt;

&lt;p&gt;And with our Storybook magic, we've created this! 🎉&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%2Fuploads%2Farticles%2Fuyigppq8hi2a45qi07df.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%2Fuploads%2Farticles%2Fuyigppq8hi2a45qi07df.png" alt="Storybook app UI with new Button code"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I hope this tutorial was helpful to you! I personally plan on using Storybook for creating any UI based libraries I make, what about yourself? &lt;/p&gt;

&lt;p&gt;Until then, code on! 👩‍💻&lt;/p&gt;

&lt;p&gt;PS: Here's the &lt;a href="https://github.com/KyleMcKell/storybook-demo" rel="noopener noreferrer"&gt;source code&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>storybook</category>
      <category>javascript</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>The Plan for Better Project Planning</title>
      <dc:creator>Kyle McKell</dc:creator>
      <pubDate>Thu, 11 Mar 2021 00:03:10 +0000</pubDate>
      <link>https://dev.to/kylemckell/the-plan-for-better-project-planning-36p2</link>
      <guid>https://dev.to/kylemckell/the-plan-for-better-project-planning-36p2</guid>
      <description>&lt;p&gt;Hello everyone! 👋 I hope everyone's Monday went well!&lt;/p&gt;

&lt;p&gt;In my &lt;a href="https://dev.to/kylemckell/settings-goals-for-the-upcoming-months-hac"&gt;last post&lt;/a&gt;, I outlined a little bit on short term goals for the next little while. Here's what I outlined: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Website Styling&lt;/strong&gt; 💅&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimizing my apps&lt;/strong&gt; 🏃‍♂️&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Planning and completing projects&lt;/strong&gt; 📑✅&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;At the end of the post I mentioned how in order to accomplish these goals I need to iterate a little more on what I intend to accomplish, as setting these arbitrary goals with no concrete actions to do will only lead to the goals flying away 🛫&lt;/p&gt;

&lt;h2&gt;
  
  
  So let's plan! (On how we plan to plan)
&lt;/h2&gt;

&lt;p&gt;I have committed to doing 4 different projects, each of which I feel will accent a specific part of what I want to work of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React UI Component Library&lt;/li&gt;
&lt;li&gt;Project Organizer (Likely using similar concepts to this blogpost)&lt;/li&gt;
&lt;li&gt;Instructional Coffee Site&lt;/li&gt;
&lt;li&gt;Portfolio Page&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(Granted, these may change in favor of different projects)&lt;/p&gt;

&lt;p&gt;Obviously, I'm keeping all these vague here, as I'm going to dedicate a post to each of them as I plan out how I want them to work, what technologies I want to use, how I want to organize them, the timeline and deadlines I give myself, the goals of the project, what I need to learn to accomplish them, and...&lt;/p&gt;

&lt;p&gt;As you can see, there's a lot of planning to do for each project. And each one is going to have it's own bevy of postings, but we need a place to start.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which is what this post is all about!
&lt;/h3&gt;

&lt;p&gt;Let's create an easy to follow plan that can help us be more concise on our vision for each of these projects. &lt;/p&gt;

&lt;p&gt;This isn't going to go into the step by steps of planning the projects technical details, per say, but rather setting up a base plan and vision to go off of throughout the development lifetime of a project, which will create an easier to follow and more focused development experience.&lt;/p&gt;

&lt;p&gt;I've decided to structure these in the Who, What, When, Where, Why, and How, much like what we all learned back in elementary school 🏫&lt;/p&gt;

&lt;p&gt;Here we go!&lt;/p&gt;

&lt;h2&gt;
  
  
  5 Steps for Planning a Project
&lt;/h2&gt;

&lt;h4&gt;
  
  
  1) What's the objective/goal of the project. 🥅 (Why?)
&lt;/h4&gt;

&lt;p&gt;One thing that I've always found when making any of my projects, is that I don't have a focused objective. However, I think this leads to taking longer on each project, and having a higher likelihood of not finishing a project to its end.&lt;/p&gt;

&lt;p&gt;A goal of a project should remain simple and concise. For instance, my goal for my UI Library is to learn how to style my websites better. There will be sub-goals underneath this, but in the end, what matters to me most is to create something that will put into practice my styling skills and lead to faster development time in the future for myself. &lt;/p&gt;

&lt;p&gt;This step may include some market research, looking at apps that are similar to your creation, and perhaps creating some diagrams to really get to the core of what you're developing.&lt;/p&gt;

&lt;h4&gt;
  
  
  2) Who am I making this for? 👨‍👩‍👧‍👦 (Who?)
&lt;/h4&gt;

&lt;p&gt;By defining who our target audience for our project is, we can understand more on the true purpose of a project. Are we making something for our own usage? Great! We can tailor our development to that. Are we intending to release this product to a broader audience? We'll likely have to focus on making a better user experience and creating documentation, and maybe even interviewing a potential user on what they'd like to see.&lt;/p&gt;

&lt;p&gt;This step isn't to be skipped, as if we're undirected in this step, we may end up taking too much time focusing on things that don't matter, or we may end up realizing that we should've spent more time upfront creating a better experience for our target audience.&lt;/p&gt;

&lt;h4&gt;
  
  
  3) What's the core feature of the project? ✨ (What?)
&lt;/h4&gt;

&lt;p&gt;It's really easy to get carried away with adding more and more features to a project without actually accomplishing the main task at hand. For instance, say you're making a YouTube clone. The core feature of this app is a video player! Nothing else matters if I can't watch a video. &lt;/p&gt;

&lt;p&gt;However, if you spend too much time coding how to recommend new videos to users, you'll never have something that you can ship out to the world.&lt;/p&gt;

&lt;p&gt;By understanding what is the minimum amount required for a project, it allows you to stay focused, and guides you to at least completing something to show off, rather than having yet another project sit in development purgatory.&lt;/p&gt;

&lt;h4&gt;
  
  
  4) What technologies am I going to use? ⚙ (How? Where?)
&lt;/h4&gt;

&lt;p&gt;We've all been there. We're excited to start working on a project, so we use Create React App to get the boilerplate going, but then we decide we want to use NEXT, so we delete our previous project, start the NEXT project, realize we actually don't want to use NEXT but rather use Gatsby, so we delete that, start Gatsby, and suddenly we're in a loop of indecision, and we spend so much valuable dev time deciding on how we want to start developing!&lt;/p&gt;

&lt;p&gt;I know for myself, if I have a defined list of technologies, APIs, and services that I intend to use for a project, it becomes infinitely easier to stay focused on my code editor and the projects objectives. &lt;/p&gt;

&lt;p&gt;Obviously, we may not know everything that we need for a project right at the start, but we should intend to know as much as possible before we springboard ourselves into coding. Asking simple questions such as &lt;em&gt;How am I going to style this?&lt;/em&gt; or &lt;em&gt;Where am I going to host this?&lt;/em&gt; allow us to make progress on our project much quicker rather than answering those questions when they come up during development.&lt;/p&gt;

&lt;h4&gt;
  
  
  5) What is my deadline? 📅 (When?)
&lt;/h4&gt;

&lt;p&gt;Setting deadlines for ourselves when working on a project is stressful, trust me, I get it. We tend to doubt our abilities, or on the contrary, sometimes we even overestimate what we can accomplish. This leads to giving up, getting lazy, and not achieving what we set out to do.&lt;/p&gt;

&lt;p&gt;However, despite the fact that deadlines do bring stress into the equation, I think this is less of a detriment, but rather, more of a benefit. &lt;/p&gt;

&lt;p&gt;By giving ourselves a deadline for a project, it forces us to focus on the previously mentioned main feature of the project, rather than getting sidetracked. If we're realistic when setting our deadlines (which does take practice!) then it will force us to stay focused on our main goal.&lt;/p&gt;

&lt;h2&gt;
  
  
  And that's it!
&lt;/h2&gt;

&lt;p&gt;While this post may seem simple in nature, I personally believe that taking these steps will lead to better development processes and experiences.&lt;/p&gt;

&lt;p&gt;By retaining our focus on what our project is, rather than what it is not, our productivity will rise, and we will be able to focus on what really makes our project important to us in the first place, without getting caught up in making small insignificant features which, realistically, don't even matter until we've actually created something!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So, to reiterate:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What's the objective/goal of the project (The Why) 🥅&lt;/li&gt;
&lt;li&gt;Who am I making this for? (The Who) 👨‍👩‍👧‍👦&lt;/li&gt;
&lt;li&gt;What's the core feature of the project? (The What) ✨&lt;/li&gt;
&lt;li&gt;What technologies am I going to use? (The How, The Where) ⚙&lt;/li&gt;
&lt;li&gt;What is my deadline? (The When) 📅&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I hope this post was helpful! And I'd love to hear your thoughts on what your process is when starting a new project, or if you'd edit anything that I have on mine.&lt;/p&gt;

&lt;p&gt;Best of luck, and keep on coding! 👩‍💻&lt;/p&gt;

</description>
      <category>learning</category>
      <category>productivity</category>
      <category>projects</category>
      <category>planning</category>
    </item>
    <item>
      <title>Settings Goals for the Upcoming Months</title>
      <dc:creator>Kyle McKell</dc:creator>
      <pubDate>Mon, 08 Mar 2021 21:08:59 +0000</pubDate>
      <link>https://dev.to/kylemckell/settings-goals-for-the-upcoming-months-hac</link>
      <guid>https://dev.to/kylemckell/settings-goals-for-the-upcoming-months-hac</guid>
      <description>&lt;p&gt;To say that these past few months have been off and on for me would be an understatement. I've had weeks where I'm hands on the keyboard for hours upon hours, and other weeks where I wake up at 11am, then look at the clock and suddenly its midnight. 🌚 &lt;/p&gt;

&lt;p&gt;While I do know that some of this is attributed to my 🦋ADHD✨, what I also know is that I cannot use that an excuse to be halting my own progress as a developer, as I have goals and expectations which I have set for myself, and my future employers will have for me.&lt;/p&gt;

&lt;h2&gt;
  
  
  So I'm going to do something about it 💪
&lt;/h2&gt;

&lt;p&gt;I'm going to share my goals here, and track my progress on a daily basis (give or take a few days off as to prevent burnout). Self accountability, while powerful and important, can only go so far when your goals seem so far away.&lt;/p&gt;

&lt;h2&gt;
  
  
  So, what things do I want to IMPROVE
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1) Website Styling 💅
&lt;/h3&gt;

&lt;p&gt;As a front-end developer, it's important to be able to be confident and comfortable on styling a websites.&lt;/p&gt;

&lt;p&gt;When I first started doing web development, I struggled hard with CSS, I hated it, I burnt out of programming from it, so when I came back to programming, I chose to ignore CSS.&lt;/p&gt;

&lt;p&gt;This wasn't a great decision, as now I am behind where I should be in my abilities to stylize a webpage.&lt;/p&gt;

&lt;p&gt;I understand how to implement certain items on a webpage, but I haven't given myself the reps to feel confident in making something that I'm proud of show off to others.&lt;/p&gt;

&lt;p&gt;Let me give you an example: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5dqJb9gG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w769rvrf2mjmrc8wey1v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5dqJb9gG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w769rvrf2mjmrc8wey1v.png" alt="Alt Text" width="880" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is one of my apps. You can see the live implementation of it &lt;a href="https://kylemckell.github.io/Pokedex/pokemon/1"&gt;here&lt;/a&gt;. While the styling of this page isn't horrific, and I don't even think I would say that it is bad, it's definitely not something that I'm proud to be showing off to everyone. It feels basic, it feels a bit sloppy, the sizes feel odd, and while I do like how I have the colors of the background correspond with the Pokémon's types, it just feels... off. 😩&lt;/p&gt;

&lt;p&gt;As one of my main projects that I have featured on my portfolio (which I also want to refactor the styling for), I need to hold myself to a higher standard if I'm wanting to be wowing people with my work.&lt;/p&gt;

&lt;p&gt;Here is an example of something that I made with TailwindCSS that I'm pretty proud of: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CxsjG8A_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5w6qd0r52tf6bii0l0cp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CxsjG8A_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5w6qd0r52tf6bii0l0cp.png" alt="Alt Text" width="880" height="563"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I feel as if this small CSS project really features my ability to be able to create something that looks clean, organized, and like something someone would pay me to create. However, I did this with TailwindCSS, and while I do love Tailwind, I need to learn how to create consistent stylized experiences without it.&lt;/p&gt;

&lt;p&gt;I'd also love to learn styled-components better! &lt;a href="https://www.joshwcomeau.com/css/styled-components/"&gt;This blogpost&lt;/a&gt; by Josh Comeau is incredible, and inspiring! 🥰 (seriously, check him out!)&lt;/p&gt;

&lt;h2&gt;
  
  
  2) Optimize my apps 🏃‍♂️
&lt;/h2&gt;

&lt;p&gt;Right now, I have only a couple projects on my &lt;a href="https://kylemckell.com"&gt;portfolio&lt;/a&gt;, and the main one (the Pokédex one that I showed earlier), is buggy, and is far from optimized. &lt;/p&gt;

&lt;p&gt;One common error that I, and others, seem to run into, is on a fresh page load onto &lt;a href="https://kylemckell.github.io/Pokedex/"&gt;the homepage&lt;/a&gt;. Once you've loaded a singular Pokémon (such as the Bulbasaur page from earlier), the rest of the Pokédex seems to load quickly and efficiently. However, in a new browser, it seems to choke up and never load the Pokédex, leading to an error being thrown. 😪&lt;/p&gt;

&lt;p&gt;Not only is my error handling underdeveloped, it doesn't solve any problems! By just throwing an alert on the screen, it avoids the real problem and a real solution.&lt;/p&gt;

&lt;p&gt;An employer isn't going to take the time to go to a separate Pokémon page if the home page doesn't even work for them. It's an unrealistic ask from me for them to do so. These small problems are things that I personally need to test better and focus on more. While this app was being developed, I never ran into this issue, as I wasn't ever obtaining these fresh loads, however, the problem does persist, so I need to take it into account.&lt;/p&gt;

&lt;p&gt;Additionally, I've done a lot of learning since completing this application, it's not a reflection of my current abilities. I just haven't been focused on completing applications, but rather I'm in a sea of uncompletion. 🌊🦈&lt;/p&gt;

&lt;h2&gt;
  
  
  3) Planning and Completing projects 📑✅
&lt;/h2&gt;

&lt;p&gt;As I just stated. These past couple months have been in toil of not completing things that I start. I either lose interest in a project, or hit a roadblock which seems impassable, so I switch projects. 🧱&lt;/p&gt;

&lt;p&gt;This obviously is detrimental for me, and my future employers wouldn't take kindly to this "quirky" trait. &lt;/p&gt;

&lt;p&gt;I'm going to take more time to plan my projects beforehand. Find the structure in which they are going to be created, and then execute on those plans. I tend to run into issues where I have coded myself into a wall, where additional features to add are only achievable after a large refactoring of my already existing code. This isn't an efficient way to work, and its no wonder that I end up giving up on my projects (despite this being the worst decision no matter how hard it is).&lt;/p&gt;

&lt;p&gt;So basically, I need to make it so my projects are cleanly coded, planned, and then the execution is writing down syntax and bug squashing 🐛. I've done this in the past, and it becomes infinitely easier to complete an application if you have the vision of the end goal before you start, rather than just starting and hoping the bridge will continue appearing before you as you create. (until it inevitably doesn't, and you fall off, whoopsie 🤷‍♀️)&lt;/p&gt;

&lt;p&gt;I would also like to learn how to make my projects more TDD oriented. Jest is on my (albeit long) list of things to learn correctly, and by implementing this, I know that my applications will start to be stronger and more robust. 🏋️‍♀️&lt;/p&gt;

&lt;h2&gt;
  
  
  What is my end goal 🤔
&lt;/h2&gt;

&lt;p&gt;Now, all of this is great, becoming a stronger developer is something we should all seek to be. However, not having a clearly defined end goal is only going to hurt rather than help. Giving too much flexibility, especially with my ADHD, makes it so instead of feeling more free, I feel constricted and stressed on having to make more and more decisions on a daily basis.&lt;/p&gt;

&lt;p&gt;My goal is to create 3 projects for my portfolio, each one being something that is styled well, executes well, and was planned and completed to at least a MOP. After this, I want to update my portfolio with a similar vein.&lt;/p&gt;

&lt;h3&gt;
  
  
  But this seems like a LOT! How are you going to complete all of that, it seems like an unfocused goal
&lt;/h3&gt;

&lt;p&gt;You'd be correct! This is merely the end goal for what I want to achieve, so lets split that up, like into one big ol' programming pizza 🍕👩‍💻&lt;/p&gt;

&lt;p&gt;Which I'll cook up in the next post 👨‍🍳. I've got some planning to do!&lt;/p&gt;

</description>
      <category>learning</category>
      <category>goals</category>
      <category>accountability</category>
      <category>100daysofcode</category>
    </item>
    <item>
      <title>Why Learning a Second Language Helps with Learning React</title>
      <dc:creator>Kyle McKell</dc:creator>
      <pubDate>Wed, 03 Feb 2021 18:37:02 +0000</pubDate>
      <link>https://dev.to/kylemckell/why-learning-a-second-language-helps-with-learning-react-n5i</link>
      <guid>https://dev.to/kylemckell/why-learning-a-second-language-helps-with-learning-react-n5i</guid>
      <description>&lt;p&gt;I started programming 3 years ago. Much like many people, I started my journey with Python, as I had taken a class in my freshman year in High School that had one section about coding in Python. I remembered enjoying making little applications using the turtle library, so I figured it would be a good choice.&lt;/p&gt;

&lt;p&gt;I started out by making simple applications, just the basics, like making an app that has a user put in their age and if they've had a birthday this year and it spits out what year they were born, for instance. Very simple applications, but I got my feet wet, at the very least.&lt;/p&gt;

&lt;p&gt;At some point during this Python process, I dropped coding altogether, not entirely sure why, but when I picked back up coding I decided that I wanted to devote my time to Web Development, as my job at the time prospected me to potentially start working under them as a developer.&lt;/p&gt;

&lt;p&gt;While that never worked out, as I couldn't gain the skills needed to operate in such a codebase, in such a small company, in such a limited amount of time, I did get going with making JavaScript applications, much thanks to the wonderful curriculum at &lt;em&gt;FreeCodeCamp&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Running into a wall
&lt;/h2&gt;

&lt;p&gt;Over time, I found it harder to put my applications together, I was struggling more to understand what I was doing, and so many questions were left unanswered for me due to the abstraction and dynamic typing of JavaScript. I spent hours on &lt;em&gt;CodeWars&lt;/em&gt;, and while I was able to solve these problems, I was confused on where to go next, everything seemed daunting and confusing. I felt unprepared for React, but slamming algorithm problems wasn't helping.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This was until I took &lt;em&gt;Comp Sci 1: Java&lt;/em&gt; at my local Community College&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I fell in love with programming in a whole new light. Java answered so many questions that I had with JavaScript. &lt;/p&gt;

&lt;p&gt;The strong typing increased my understanding of how to write better code, and understood just why the strict equality was so important in JavaScript, just to name one benefit.&lt;/p&gt;

&lt;p&gt;I eventually took the wonderful curriculum created by &lt;em&gt;JetBrains Academy&lt;/em&gt;, since it was free for students at the time, and my knowledge of coding, computer science, and Java accelerated to an all time high.&lt;/p&gt;

&lt;p&gt;Now, why does this have anything to do with learning WebDev and React?&lt;/p&gt;

&lt;p&gt;Well, &lt;strong&gt;learning Java made learning React easier&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connecting the dots
&lt;/h2&gt;

&lt;p&gt;Java is a class based language, which put simply, separates everything in a type called a class. If you code in JavaScript, you likely are familiar with ES6 classes. These are very similar to how Java treats their classes.&lt;/p&gt;

&lt;p&gt;React, before the introduction of hooks, was also class based primarily. If you needed to hold state, or have lifecycle to your components, you had to have a class component. These class components are strikingly similar to classes in Java&lt;/p&gt;

&lt;h3&gt;
  
  
  Allow me to explain:
&lt;/h3&gt;

&lt;p&gt;Java relies heavily on inheritance, composition, and polymorphism, as it forces its users into an object oriented approach due to its class based nature. This teaches coders to learn best practices on how to not repeat their code, and find associations between different objects. &lt;/p&gt;

&lt;p&gt;React is very similar in how it works. The concept of a component based framework (yes, I know React is a library) is to create components which then are reusable in the rest of your code, and to create sub components which are composed of their parents. (React does discourage inheritance, however).&lt;/p&gt;

&lt;p&gt;As you can see, this is very similar in how both of these languages are structured. By learning a second language which forces you to accomplish the task needed by another language, you learn how to truly manage your code in a more controlled environment, which allows you to understand how to have your classes, or components, talk to each other.&lt;/p&gt;

&lt;h2&gt;
  
  
  What not to do
&lt;/h2&gt;

&lt;p&gt;I would like to quickly take a section to mention some confusion which some of my beginner readers may need addressed.&lt;/p&gt;

&lt;p&gt;While I do support the learning of a second language, as it helped me infinitely with my knowledge pool of coding, I do not recommend doing so until you run into a wall of questions that need answers, that can only be answered with a lower level language.&lt;/p&gt;

&lt;p&gt;An unhealthy obsession that many beginners have is the "end be all" mentality of learning a coding language. They feel as if they need to choose the correct language or their entire career is going to be delayed infinitely, as if what they are learning goes out of "style", they'll be left with nothing.&lt;/p&gt;

&lt;p&gt;However, this isn't the case, you &lt;strong&gt;should&lt;/strong&gt; spend time with a language, learn how to make applications, learn how to solve algorithm problems, and learn the basics of programming before moving on to a second language. It is true that learning your second language is infinitely easier than learning your first, as most of the time, you simply have to learn syntax and a few quirks that the language may possess. &lt;/p&gt;

&lt;p&gt;That being said, don't be afraid to reach out to a language (specifically lower level, such as C++, Java, C#, if you're learning JavaScript or Python), if you have questions which need to be answered, or you're struggling to write code that you feel is well written, sometimes a fresh slate is what you need to get something into your head.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Learning a second language saved me as a programmer, and helped me understand how to create better applications, and better code. &lt;/p&gt;

&lt;p&gt;Do you have any suggestions? Leave them in the comments below, I'd love to hear your feedback.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Happy Coding!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Kyle&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>programming</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
