<?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: Ryan Furrer</title>
    <description>The latest articles on DEV Community by Ryan Furrer (@ryandotfurrer).</description>
    <link>https://dev.to/ryandotfurrer</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%2F181606%2F8609da07-23a9-4978-832d-a34050860ee8.jpg</url>
      <title>DEV Community: Ryan Furrer</title>
      <link>https://dev.to/ryandotfurrer</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ryandotfurrer"/>
    <language>en</language>
    <item>
      <title>Getting Better with Figma: Day 1</title>
      <dc:creator>Ryan Furrer</dc:creator>
      <pubDate>Mon, 23 Jun 2025 16:30:00 +0000</pubDate>
      <link>https://dev.to/ryandotfurrer/getting-better-with-figma-day-1-4ob7</link>
      <guid>https://dev.to/ryandotfurrer/getting-better-with-figma-day-1-4ob7</guid>
      <description>&lt;p&gt;Day One was me reacquainting myself with Figma. I started by reviewing the basics of the interface and exploring the various tools and features available. I also took some time to familiarize myself with the keyboard shortcuts and the different ways to navigate the canvas. &lt;a href="https://youtu.be/1pW_sk-2y40?si=p1KnTPOMLtOo_M6m" rel="noopener noreferrer"&gt;Juxtopposed video&lt;/a&gt; on this was super helpful and is what kicked off this idea!&lt;/p&gt;

&lt;p&gt;Who doesn't like &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Layout_cookbook/Card" rel="noopener noreferrer"&gt;cards&lt;/a&gt; on websites. They come in all sorts of... well not shapes but sizes and designs. I've seen truly beautiful ones and wanted to get better with playing with multiple layers.&lt;/p&gt;

&lt;p&gt;I knew I wanted a simple card consisting of a header, small paragraph, an icon, and a gradient. I often see cards come in threes and when I'm playing with colors in counts of three it's very difficult for me to &lt;em&gt;not&lt;/em&gt; think of Pokémon, so I just went with it!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F0jvx0hthn9i31lzb8g5n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F0jvx0hthn9i31lzb8g5n.png" alt="" title="" width="800" height="1883"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are actually several layers to each card:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A circle with it's midpoint roughly anchored to the card's bottom right corner.&lt;/li&gt;
&lt;li&gt;A rectangle above it acting as a mask for the circle and bringing in the darker emerald/blue/rose colors.&lt;/li&gt;
&lt;li&gt;A rectangle of the same size above that with a semi-opaque and lighter emerald/blue/rose color with an inner-shadow of the darker color.&lt;/li&gt;
&lt;li&gt;The text and icon are the final layers.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Even the button has a semi-transparent background which allows the main color to bleed through, as well as a semi-transparent border.&lt;/p&gt;

&lt;p&gt;These are simple but I like them!&lt;/p&gt;

&lt;p&gt;There is no goal to do one per day, but I’d like to do at least four three week so I can see progress. I also plan to write a short blog (or &lt;a href="https://dev.to/tags/micro-blog"&gt;micro-blog&lt;/a&gt;, if you will) about each design I create or copy. If you’re in a similar boat, I encourage you to jump on board and do the same!&lt;/p&gt;

&lt;p&gt;I’ll be sharing my progress on &lt;a href="https://x.com/ryandotfurrer" rel="noopener noreferrer"&gt;X/Twitter&lt;/a&gt; and &lt;a href="https://www.linkedin.com/in/ryanfurrer/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;. If you’re interested in following along, feel free to follow me on those platforms!&lt;/p&gt;

</description>
      <category>design</category>
      <category>figma</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Getting Better with Figma: One Design at a Time</title>
      <dc:creator>Ryan Furrer</dc:creator>
      <pubDate>Sat, 21 Jun 2025 23:47:24 +0000</pubDate>
      <link>https://dev.to/ryandotfurrer/getting-better-with-figma-one-design-at-a-time-467k</link>
      <guid>https://dev.to/ryandotfurrer/getting-better-with-figma-one-design-at-a-time-467k</guid>
      <description>&lt;p&gt;&lt;a href="https://www.figma.com/" rel="noopener noreferrer"&gt;Figma&lt;/a&gt; is a powerful design tool that allows designers to create, collaborate, and share designs in real-time. The fact is that it’s an industry standard, and with me being part designer/part engineer, I think it’s time I get more comfortable with it.&lt;/p&gt;

&lt;p&gt;I take pride in my “design chops,” as I genuinely feel I have an eye for it. You can teach people as much as you want about color theory and typography, but I’m a firm believer that, based on how our brains are wired, we all have different strengths and weaknesses.&lt;/p&gt;

&lt;p&gt;It’s time I start leaning into one of my strengths more — my creative side!&lt;/p&gt;

&lt;p&gt;Being a former musician (violinist and violist), music was my creative and emotional outlet! While web design is not a 1:1 replacement, it lets me flex those creative muscles; this is part of the reason I’ve leaned into Frontend Engineering.&lt;/p&gt;

&lt;p&gt;With that, I’ve never gotten very comfortable with design tools. I used Photoshop at a previous job and figured out enough to get by. I own V1 of the &lt;a href="https://affinity.serif.com/en-us/" rel="noopener noreferrer"&gt;Affinity&lt;/a&gt; suite of products and have used it to get what I need out of it. I’ve used Figma to the same extent. However, I’m tired of limping through creating something, or not being able to create the effect I want.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;By the way, I highly recommend the Affinity suite for a one-time charge rather than paying for an Adobe Creative Cloud subscription.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So I’m going to start doing more in Figma. I’ll start with making my own basic designs (&lt;a href="https://www.linkedin.com/posts/ryanfurrer_having-more-fun-designing-and-building-little-activity-7278527710103044097-5arY?utm_source=share&amp;amp;utm_medium=member_desktop&amp;amp;rcm=ACoAAAxkbt8BdtGKTDdccGhGoGLVCqC4OrBvOHU" rel="noopener noreferrer"&gt;which I’ve done before&lt;/a&gt;); however, I think I’ll be better served by copying others’ designs. Of course, I'll also be adding proper attribution to the original designers as I certainly do not want to be accused of stealing their work.&lt;/p&gt;

&lt;p&gt;There is no goal to do one per day, but I’d like to do at least four three week so I can see progress. I also plan to write a short blog (or &lt;a href="https://dev.to/tags/micro-blog"&gt;micro-blog&lt;/a&gt;, if you will) about each design I create or copy. If you’re in a similar boat, I encourage you to jump on board and do the same!&lt;/p&gt;

&lt;p&gt;I’ll be sharing my progress on &lt;a href="https://x.com/ryandotfurrer" rel="noopener noreferrer"&gt;X/Twitter&lt;/a&gt; and &lt;a href="https://www.linkedin.com/in/ryanfurrer/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;. If you’re interested in following along, feel free to follow me on those platforms!&lt;/p&gt;

</description>
      <category>design</category>
      <category>figma</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to use multiple JSX frameworks in Astro</title>
      <dc:creator>Ryan Furrer</dc:creator>
      <pubDate>Mon, 03 Feb 2025 01:21:52 +0000</pubDate>
      <link>https://dev.to/ryandotfurrer/how-to-use-multiple-jsx-frameworks-in-astro-3aef</link>
      <guid>https://dev.to/ryandotfurrer/how-to-use-multiple-jsx-frameworks-in-astro-3aef</guid>
      <description>&lt;p&gt;Did you know Astro is &lt;em&gt;the "framework agnostic framework"&lt;/em&gt; - meaning it lets you use multiple frontend frameworks together?&lt;/p&gt;

&lt;p&gt;While Astro itself is a framework, you can use &lt;em&gt;other&lt;/em&gt; frameworks in it for interactive elements or parts of the web page that aren’t static. This makes it an incredibly powerful tool for rapid development, content-heavy sites, or teams of devs with different specialties need to ship quickly.&lt;/p&gt;

&lt;p&gt;Astro supports the following frameworks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Alpine&lt;/li&gt;
&lt;li&gt;Preact&lt;/li&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Svelte&lt;/li&gt;
&lt;li&gt;SolidJS&lt;/li&gt;
&lt;li&gt;Vue&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While most of these work out of the box without a problem, you &lt;em&gt;will&lt;/em&gt; run into an issue if using multiple JSX frameworks such as React, Preact, and Solid in the same project. &lt;/p&gt;

&lt;p&gt;Let’s talk about that and how you can ensure you don’t run into the same issues I did when learning this.&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Structure
&lt;/h2&gt;

&lt;p&gt;While Astro’s documentation states that using separate directories per framework is optional, I personally prefer to do so; we’ll talk more about that later.&lt;/p&gt;

&lt;p&gt;Let’s say we are using React and Solid inside the same Astro project. You would create directories inside your components folder; one for React and one for Solid.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;src
|__components
|____Nav.astro
|____react
|______CounterReact.jsx
|____solid
|______LoginSolid.jsx
|__layouts
|____BaseLayout.astro
|__pages
|____index.astro
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;While the file names are up to you, I like appending the framework name to them so I know what framework they are using and where they are coming from no matter where in the code they are being called.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing your frameworks
&lt;/h2&gt;

&lt;p&gt;I’m not going to repeat everything in Astro’s docs as they’re so good I implore you to use them for 99% of your issues; &lt;a href="https://docs.astro.build/" rel="noopener noreferrer"&gt;check the docs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;However&lt;/em&gt;, let’s go over how to install your frameworks.&lt;/p&gt;

&lt;h3&gt;
  
  
  React
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# npm&lt;/span&gt;
npx astro add react
&lt;span class="c"&gt;# pnpm&lt;/span&gt;
pnpm astro add react
&lt;span class="c"&gt;# yarn&lt;/span&gt;
yarn astro add react
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  SolidJS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# npm&lt;/span&gt;
npx astro add solid
&lt;span class="c"&gt;# pnpm&lt;/span&gt;
pnpm astro add solid
&lt;span class="c"&gt;# yarn&lt;/span&gt;
yarn astro add solid
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the CLI doesn’t it for you automatically,  we’ll have to add these integrations into our Astro config file as described in the next section.&lt;/p&gt;

&lt;h2&gt;
  
  
  Astro config file
&lt;/h2&gt;

&lt;p&gt;While this file is not required for every project, most will have &lt;em&gt;something&lt;/em&gt; you need to configure in it, which we definitely do here. If you are using frameworks in your Astro project, you’ll need this file.&lt;/p&gt;

&lt;p&gt;If you don’t have one already, create a file at the root of your project called &lt;code&gt;astro.config.mjs&lt;/code&gt; and input the following snippet into it:&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;defineConfig&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="nx"&gt;astro&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="err"&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="nf"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="c1"&gt;// your configuration options here…&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, we need to add our integrations; this is for any Astro integration you are using.&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;defineConfig&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;astro/config&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;preact&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;@astrojs/preact&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="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@astrojs/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;solidJs&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;@astrojs/solid-js&lt;/span&gt;&lt;span class="dl"&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="nf"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;integrations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="nf"&gt;preact&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
        &lt;span class="nf"&gt;solidJs&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lastly, we need to tell Astro which files belong to which framework. We can achieve this using the  &lt;code&gt;include: []&lt;/code&gt; syntax. This is &lt;em&gt;required&lt;/em&gt; when using multiple JSX frameworks. &lt;/p&gt;

&lt;p&gt;Optionally, you can also use the &lt;code&gt;exclude: []&lt;/code&gt; syntax, however, I did not find that necessary in my project.&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;defineConfig&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;astro/config&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;preact&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;@astrojs/preact&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="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@astrojs/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;solidJs&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;@astrojs/solid-js&lt;/span&gt;&lt;span class="dl"&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="nf"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;integrations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nf"&gt;react&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;experimentalReactChildren&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="na"&gt;include&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&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="p"&gt;}),&lt;/span&gt;
    &lt;span class="nf"&gt;solidJs&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;include&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;**/solid/*&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="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;&lt;em&gt;This&lt;/em&gt; is why I highly encourage you to store all components for different frameworks in their own directory. &lt;/p&gt;

&lt;p&gt;💡&lt;br&gt;
&lt;strong&gt;experimentalReactChildren&lt;/strong&gt;&lt;br&gt;
This flag is only necessary if you are using a library that expects more than one child element to be passed. This is a result of Astro's parsing of React components; they are parsed as plain strings, not React nodes. &lt;a href="https://docs.astro.build/en/guides/integrations-guide/react/#children-parsing" rel="noopener noreferrer"&gt;Read more on this&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  TypeScript config file
&lt;/h2&gt;

&lt;p&gt;Astro comes with support for Typescript out of the box and I highly advise you use it. Not only do you need a TypeScript config file for your Astro project, but Astro’s Content Collection API is incredibly powerful when paired with TypeScript.&lt;/p&gt;

&lt;p&gt;Inside the root of your project, create a file named &lt;code&gt;tsconfig.json&lt;/code&gt; and place the code below in it.&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;"extends"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"astro/tsconfigs/base"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"include"&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="s2"&gt;".astro/types.d.ts"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&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;"exclude"&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="s2"&gt;"dist"&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;Now then, for each JSX framework we add, we’ll need to add more to our &lt;code&gt;tsconfig&lt;/code&gt; . We add overrides as by default the &lt;code&gt;"jsxImportSource"&lt;/code&gt; is set to &lt;code&gt;react&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;Other&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;tsconfig&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;options...&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"compilerOptions"&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;"strictNullChecks"&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="nl"&gt;"allowJs"&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="nl"&gt;"jsx"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"preserve"&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;"overrides"&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"files"&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="s2"&gt;"src/components/react/**/*"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"compilerOptions"&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;"jsx"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"preserve"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"jsxImportSource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"react"&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;span class="nl"&gt;"files"&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="s2"&gt;"src/components/solid/**/*"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"compilerOptions"&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;"jsx"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"preserve"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"jsxImportSource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"solid-js"&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="err"&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;This tells your project to override the base settings based on your file locations as well as overrides the &lt;code&gt;compilerOptions&lt;/code&gt; for those individual frameworks. You can see now why I prefer storing my framework components inside their own directory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rendering these components
&lt;/h2&gt;

&lt;p&gt;This is the easy and fun part! Now you get to build out those features, components, and more that you did all the prep work for.&lt;/p&gt;

&lt;p&gt;Take this &lt;code&gt;CounterReact.jsx&lt;/code&gt; component I built:&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="k"&gt;import&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="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="nx"&gt;MinusIconReact&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;./MinusIconReact.jsx&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;PlusIconReact&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;./PlusIconReact.jsx&lt;/span&gt;&lt;span class="dl"&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;CounterReact&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="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&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;incrementReact&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;setCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&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;decrementReact&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;setCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&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="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text-lg text-cyan-50"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Counter: &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;count&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;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"flex gap-2"&lt;/span&gt;&lt;span class="p"&gt;&amp;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;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;incrementReact&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
          &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"bg-success text-success-foreground px-4 py-2 rounded-sm"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;PlusIconReact&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"sr-only"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Increase count&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;PlusIconReact&lt;/span&gt;&lt;span class="p"&gt;&amp;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;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&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;decrementReact&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
          &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"bg-destructive text-destructive-foreground px-4 py-2 rounded-sm"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;MinusIconReact&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"sr-only"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Decrease count&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;MinusIconReact&lt;/span&gt;&lt;span class="p"&gt;&amp;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;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&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;And here is the SolidJS one:&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createSignal&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;solid-js&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;MinusIconSolid&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;./MinusIconSolid.jsx&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;PlusIconSolid&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;./PlusIconSolid.jsx&lt;/span&gt;&lt;span class="dl"&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;CounterSolid&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="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createSignal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&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;incrementSolid&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;setCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&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;decrementSolid&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;setCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&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="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text-lg text-blue-50"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Counter: &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;()&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;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"flex gap-2"&lt;/span&gt;&lt;span class="p"&gt;&amp;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;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;incrementSolid&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
          &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"bg-success text-success-foreground px-4 py-2 rounded-sm"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;PlusIconSolid&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"sr-only"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Increase count&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;PlusIconSolid&lt;/span&gt;&lt;span class="p"&gt;&amp;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;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&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;decrementSolid&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
          &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"bg-destructive text-destructive-foreground px-4 py-2 rounded-sm"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;MinusIconSolid&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"sr-only"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Decrease count&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;MinusIconSolid&lt;/span&gt;&lt;span class="p"&gt;&amp;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;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&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;We are importing &lt;code&gt;useState&lt;/code&gt; in the React file and &lt;code&gt;createSignal&lt;/code&gt; in the Solid file like you normally would, and then importing a couple of icons which are just SVGs. Typical React stuff, right?&lt;/p&gt;

&lt;p&gt;Then we’re creating our components which starts with a Functional Component. It is important to note that with Preact, React, and Solid, Astro insists you use Functional Components and export them in the same line. &lt;/p&gt;

&lt;p&gt;Moving on, our Functional components start with setting our state, creating a couple of functions to increase the count and decrease it, then building out the UI of the component itself. Since we already exported it in line 5, all we have to do now is go to our Astro file where we’d like to render the component, import it, and call it.&lt;/p&gt;

&lt;p&gt;Here is an example of my Astro component, &lt;code&gt;CounterSection.astro&lt;/code&gt;&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="o"&gt;---&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;CounterReact&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/CounterReact.jsx&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;CounterSolid&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;../solid/CounterSolid.jsx&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;Heading&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;../Heading.astro&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;---&lt;/span&gt;

&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;section&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"flex gap-4 w-fit"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"react"&lt;/span&gt;
    &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"border w-fit border-cyan-700 rounded-md p-4 bg-cyan-900 scroll-mt-12"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"col-span-1"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Heading&lt;/span&gt;
        &lt;span class="na"&gt;level&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"h2"&lt;/span&gt;
        &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"2xl"&lt;/span&gt;
        &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text-cyan-50"&lt;/span&gt;
        &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;React&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Heading&lt;/span&gt;
      &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;CounterReact&lt;/span&gt; &lt;span class="na"&gt;client&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="na"&gt;visible&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"solid"&lt;/span&gt;
    &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"border w-fit border-blue-700 rounded-md p-4 bg-blue-900 scroll-mt-12"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"col-span-1"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Heading&lt;/span&gt;
        &lt;span class="na"&gt;level&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"h2"&lt;/span&gt;
        &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"2xl"&lt;/span&gt;
        &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text-blue-50"&lt;/span&gt;
        &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Solid&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Heading&lt;/span&gt;
      &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;CounterSolid&lt;/span&gt; &lt;span class="na"&gt;client&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="na"&gt;visible&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;section&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The components will end up looking like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fh15m15487ygoi6e87ek3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fh15m15487ygoi6e87ek3.png" alt="Counters rendered in both React and SolidJS allowing the user to click and increase or decrease the count." width="656" height="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Client Directives
&lt;/h3&gt;

&lt;p&gt;The keen eye among you may have spotted something in our code I didn’t mention above. When calling our components, there is a &lt;code&gt;client:visible&lt;/code&gt; property:&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="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;CounterReact&lt;/span&gt; &lt;span class="na"&gt;client&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="na"&gt;visible&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;CounterSolid&lt;/span&gt; &lt;span class="na"&gt;client&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="na"&gt;visible&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These client directives control how framework components are hydrated on a page. In our example, they are hydrated as soon as the component is visible. If you do not specify which directive to use, the component will be shipped as static HTML and you will have no interactivity!&lt;/p&gt;

&lt;p&gt;Astro offers several different options and I encourage you to &lt;a href="https://docs.astro.build/en/reference/directives-reference/#client-directives" rel="noopener noreferrer"&gt;read the docs&lt;/a&gt; and see which is best for your application. However, the three I feel will be most commonly used are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;client:load&lt;/code&gt; - hydrates the component on page load&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;client:idle&lt;/code&gt; - hydrates the component when the page’s initial load is complete&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;client:visible&lt;/code&gt; / &lt;code&gt;client:visible={{rootMargin}}&lt;/code&gt; - hydrates the component when it comes into view / hydrates the component when a margin around the component enters the viewport.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Wrapping up, using multiple JSX frameworks in Astro is quite simple, however, it &lt;em&gt;does&lt;/em&gt; require some setup before you jump right in.&lt;/p&gt;

&lt;p&gt;If you’d like to see my talk on Astro, you can find all relevant links below. And if you have any questions I am more than happy to talk shop! You can find me everywhere on line via my &lt;a href="https://bento.me/ryandotfurrer" rel="noopener noreferrer"&gt;bento&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/live/VsNtGr8RjLo?si=acz2N_MswHNCX5Ou" rel="noopener noreferrer"&gt;Watch my Astro talk with This Dot&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://whynotastro.vercel.app/" rel="noopener noreferrer"&gt;View my demo site&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gamma.app/docs/Astro-The-Web-Framework-for-Modern-Development-p8irm7aio29rfpw" rel="noopener noreferrer"&gt;Get the slides&lt;/a&gt;&lt;/p&gt;

</description>
      <category>astro</category>
      <category>react</category>
      <category>solidjs</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>2024 Retrospective</title>
      <dc:creator>Ryan Furrer</dc:creator>
      <pubDate>Fri, 27 Dec 2024 19:08:36 +0000</pubDate>
      <link>https://dev.to/ryandotfurrer/2024-retrospective-5clc</link>
      <guid>https://dev.to/ryandotfurrer/2024-retrospective-5clc</guid>
      <description>&lt;h2&gt;
  
  
  How it started
&lt;/h2&gt;

&lt;p&gt;The very end of 2023 was an earth-shattering moment for me. It was December 16, 2023 that I learned that my wife of two years – partner of six – was having an affair. In an instant my world came crumbling down; that feeling followed me into 2024 where I wondered where life would take me now.&lt;/p&gt;

&lt;p&gt;I felt lost, insecure, and was questioning everything. What was I going to do? How could I ever move on? Where do I go?&lt;/p&gt;

&lt;p&gt;I didn’t (and still don’t) have the money to move into an apartment by myself on Long Island where a studio apartment goes for $2,000.00/month which is just over 50% of my monthly take-home income.&lt;/p&gt;

&lt;p&gt;I didn’t (and still don’t) have a remote job, so while friend’s graciously offered me rooms in their homes outside Albany, NY and Houston, TX, that wasn’t an option either.&lt;/p&gt;

&lt;p&gt;So, I went to my parents and asked if I could move back in knowing full well there was not a room available in the house. Thankfully, they agreed to rent a storage unit to store their stuff in so I could claim a 120 sq. ft. bedroom for myself. Note, the storage unit is larger than my bedroom 😂&lt;/p&gt;

&lt;p&gt;That’s a bleak onset of the year, but that’s life. I don’t tell you all of this so for your pity, but so you can see the massive turnaround one event had on me; that event was my first tech conference.&lt;/p&gt;

&lt;h2&gt;
  
  
  Entering the tech community
&lt;/h2&gt;

&lt;p&gt;Some quick background: I have been studying web development on and off for several years. I started in late 2018/early 2019 and wandered from frontend web development —&amp;gt; IT Helpdesk work —&amp;gt; cloud engineering —&amp;gt; frontend web development/engineering ♻️. Through the years my discipline would come and go like waves upon a shore. While I joined Twitter (now X) in April 2018, I was not very active and more of a lurker.&lt;/p&gt;

&lt;p&gt;However, in 2023 I won a ticket to attend THAT Conference in Round Rock, TX (outside Austin) which was from January 29, 2024 - January 31. Little did I know how impactful that one event would be.&lt;/p&gt;

&lt;p&gt;I’ve written about &lt;a href="https://ryanfurrer.com/blog/that-conference/" rel="noopener noreferrer"&gt;THAT Conference&lt;/a&gt; on my blog before, and &lt;a href="https://ryanfurrer.beehiiv.com/p/the-power-of-community" rel="noopener noreferrer"&gt;The Power of Community&lt;/a&gt; on my newsletter, but here is the number one thing THAT Conference did for me:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It gave me a place where I felt like I &lt;em&gt;belonged&lt;/em&gt; once again. I hadn’t felt that since I was in the music education and performance community prior to 2018.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The people I met at THAT quickly became friends that I now cannot imagine my life without! Not only that but I truly believe that it is only because of these connections I was afforded and was able to succeed in the other opportunities I’ve had this year, including but not limited to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Working with &lt;a href="https://www.jamesqquick.com/" rel="noopener noreferrer"&gt;James Q. Quick&lt;/a&gt; on &lt;a href="https://www.dealsfordevs.com/" rel="noopener noreferrer"&gt;Deals for Devs&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Working with &lt;a href="https://www.linkedin.com/in/shashilo/" rel="noopener noreferrer"&gt;Shashi Lo&lt;/a&gt; on &lt;a href="https://www.gridironsurvivor.com/login" rel="noopener noreferrer"&gt;Gridiron Survivor&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Taking part in the &lt;a href="https://www.dallassoftwaredevelopers.org/" rel="noopener noreferrer"&gt;Dallas Software Developers&lt;/a&gt; &lt;a href="https://www.dallassoftwaredevelopers.org/cohorts" rel="noopener noreferrer"&gt;cohort&lt;/a&gt; led by &lt;a href="https://www.dthompsondev.com/" rel="noopener noreferrer"&gt;Danny Thompson&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Starting my &lt;a href="https://www.twitch.tv/ryandotfurrer" rel="noopener noreferrer"&gt;Twitch Channel&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Starting my podcast, &lt;a href="https://www.webdevdialogues.com/" rel="noopener noreferrer"&gt;Web Dev Dialogues&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All that to boot, I firmly believe my first job in tech will stem from the connections I have made and continue to make in the community.&lt;/p&gt;

&lt;p&gt;Thank you to everyone that has shown me nothing but kindness, support, friendship, and more through this year. I would not have gotten through this year as well as I did without you all.&lt;/p&gt;

&lt;h2&gt;
  
  
  Leaning into &lt;em&gt;me&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;Over the last 5 - 6 years I’ve started being more comfortable with &lt;em&gt;who I am&lt;/em&gt;. That’s not to say I’ve settled and do not want to continue to improve, but instead of trying to be a version of myself others seem to want me to be I am leaning into being the version of myself &lt;em&gt;I want to be&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In 2024 I leaned even more into this.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This might be obvious to some but for me it’s only come to light in recent years how much effort I was putting in to be a version of myself to appease others rather than myself. Through self-care including therapy, journaling, and meditation I am finally happy with &lt;em&gt;some&lt;/em&gt; of the things I am doing and am celebrating all wins no matter the size . There is of course, room for improvement; for example, my physical health is in rough shape and has been an ongoing struggle for years but that is entirely in my control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Worrying about only what you can control
&lt;/h2&gt;

&lt;p&gt;This is an extension of my self-development, but I have really tried my hardest to only worry about only what I can directly control.&lt;/p&gt;

&lt;p&gt;For example, a major push I made this year is making the effort to lift others up. I have been a negative person for many years – living with my parents again makes me see where I got it – and this year I wanted to change that. Guess what? That is something I am in direct control of.&lt;/p&gt;

&lt;p&gt;While you cannot control everything, there is always something you can control in any situation. I cannot control the fact that my ex-wife had an affair; what I &lt;em&gt;can&lt;/em&gt; control is how I let it affect me. I can feel the anxiety and emotions, however, I can instead put that energy into what I can do to bounce back from it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Remember: You don’t control what happens, you control how you respond.” - Ryan Holiday&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Being selfish
&lt;/h2&gt;

&lt;p&gt;Being selfish was alwas surrounded with a negative connotation in my life, however, I truly believe that if you are not putting yourself first you are doing yourself a disservice.&lt;/p&gt;

&lt;p&gt;There are, of course, circumstances where you cannot; caring for a sick loved one, caring for a newborn, etc. But you cannot assume anyone else will put you first, so you ought to ensure you &lt;em&gt;do it for you&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;This is something I’ve really been trying to do and havce both succeeded and failed this year. There are a few friends who know I bit off more than I could chew at times as I did not say “no” enough this year. These are all lessons I am continuing to learn and boundaries I am learning to set.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it ended
&lt;/h2&gt;

&lt;p&gt;I’m closing out this year with my head held high and excited for 2025. In an almost poetic manner, I attended another tech conference in the beginning of December; the Commit Your Code Conference (CYC Conference) which took place in Plano, TX (outside of Dallas).&lt;/p&gt;

&lt;p&gt;These conferences that book-ended my year were very similar in vibes but very different in personal execution.&lt;/p&gt;

&lt;p&gt;I went into THAT Conference knowing about 3 - 5 people in the community. I went into the CYC Conference knowing &lt;em&gt;hundreds&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;I went into THAT Conference feeling alone. I went into the CYC Conference feeling more connected than ever.&lt;/p&gt;

&lt;p&gt;However, I came out of both feeling energized, excited, and thankful.&lt;/p&gt;

&lt;p&gt;At the CYC Conference I had the opportunity to meet legends such as Leon and Quincy Larson, as well as my Dallas Software Developers cohort lead, Yoon! I had people coming up to &lt;em&gt;me&lt;/em&gt; recognizing &lt;em&gt;who I was&lt;/em&gt; from the community. It was a humbling experience to say the least and I am so thankful to the team that pulled it off: Danny Thompson, Braydon Coyer, Devyn Coyer, Dennis Garcia, and Erik Anderson.&lt;/p&gt;

&lt;p&gt;I don’t say this all to brag, but to point out how one catalyst turned a year I wanted to forget into a year I could &lt;em&gt;never&lt;/em&gt; forget.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you want to connect, here is where you can find me:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;X/Twitter: &lt;a href="https://x.com/ryandotfurrer" rel="noopener noreferrer"&gt;@ryandotfurrer&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bluesky: &lt;a href="https://bsky.app/profile/ryandotfurrer.bsky.social" rel="noopener noreferrer"&gt;@ryandotfurrer&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;LinkedIn: &lt;a href="https://www.linkedin.com/in/ryanfurrer/" rel="noopener noreferrer"&gt;@Ryan Furrer&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Twitch*: &lt;a href="https://www.twitch.tv/ryandotfurrer" rel="noopener noreferrer"&gt;@ryandotfurrer&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;*I aim to start streaming weekly again in 2025 because I miss it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Photo dump
&lt;/h2&gt;

&lt;p&gt;Here’s a quick photo dump from some things I did this year&lt;/p&gt;

&lt;h3&gt;
  
  
  THAT Conference • January 2024
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fn61mk7sx94fwlwh86x40.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fn61mk7sx94fwlwh86x40.jpeg" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fh9gv3d8lreoz07m92xtv.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fh9gv3d8lreoz07m92xtv.jpeg" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F7g1c5qsx0j87g7ks6tvt.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F7g1c5qsx0j87g7ks6tvt.jpeg" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Attending an IMSA Race at Watkins Glen • June 2024
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F4qcsw35w8n4ahcwab3f0.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F4qcsw35w8n4ahcwab3f0.jpeg" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Met a few friends (middle row) from an online racing league I helped form.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fnqsho2l7b1z6kbapo1b9.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fnqsho2l7b1z6kbapo1b9.jpeg" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also got to spend some extra time with my best friend of ~26 years, Anthony, his wife Kat, and their son (my nephew), Vincent. On the right is my twin brother, Wally.&lt;/p&gt;

&lt;h3&gt;
  
  
  CYC Conference • December 2024
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F28twk4se4xj5a8jsinqp.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F28twk4se4xj5a8jsinqp.jpeg" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fcoxq1or1biqde664jcgu.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fcoxq1or1biqde664jcgu.jpeg" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Favf8f30iujd2sfn007jh.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Favf8f30iujd2sfn007jh.jpeg" width="768" height="1024"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F9zik9cqu6mfpw03au4yb.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F9zik9cqu6mfpw03au4yb.jpeg" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F9bf67l3bcfhqo3bzpi1g.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F9bf67l3bcfhqo3bzpi1g.jpeg" width="665" height="1182"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fw1iif6dk4timqmtaoa62.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fw1iif6dk4timqmtaoa62.jpeg" width="768" height="1024"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Closed out the year with more time with my best friend at a holiday party after the CYC Conference.&lt;/p&gt;

</description>
      <category>devblog</category>
      <category>community</category>
      <category>yearinreview</category>
    </item>
    <item>
      <title>CodingCatchup: 9/1/24 - 9/8/24</title>
      <dc:creator>Ryan Furrer</dc:creator>
      <pubDate>Mon, 09 Sep 2024 13:00:00 +0000</pubDate>
      <link>https://dev.to/ryandotfurrer/codingcatchup-9124-9824-1hd5</link>
      <guid>https://dev.to/ryandotfurrer/codingcatchup-9124-9824-1hd5</guid>
      <description>&lt;p&gt;When I began blogging on &lt;a href="https://dev.to/ryandotfurrer"&gt;Dev&lt;/a&gt; back in 2019, I had a weekly series where I blogged and talked about what I had been up to in that last week. In an effort to get back to blogging I figured this was a perfect way to jump back in.&lt;/p&gt;

&lt;p&gt;In &lt;em&gt;massive&lt;/em&gt; news, Gridiron Survivor (GIS) launched the alpha version of our app! I’m so happy to be a part of this team and now that we have real users is even more exciting. Feel free to check it out and sign up at &lt;a href="https://www.gridironsurvivor.com/login" rel="noopener noreferrer"&gt;gridironsurvivor.com&lt;/a&gt;!&lt;/p&gt;

&lt;h2&gt;
  
  
  Day by Day
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Sunday
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Reviewed a PR for &lt;a href="https://www.dealsfordevs.com/" rel="noopener noreferrer"&gt;Deals for Devs&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Monday
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/open-sauced/app/pull/4077" rel="noopener noreferrer"&gt;Opened a PR&lt;/a&gt; for my ticket for &lt;a href="https://opensauced.pizza/" rel="noopener noreferrer"&gt;OpenSauced&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tuesday
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Reviewed two PRs for Gridiron Survivor.&lt;/li&gt;
&lt;li&gt;Reviewed a PR for Deals for Devs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Wednesday
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Worked on my &lt;a href="https://github.com/open-sauced/app/pull/4077" rel="noopener noreferrer"&gt;OpenSauced&lt;/a&gt;  ticket.&lt;/li&gt;
&lt;li&gt;Worked on a &lt;a href="https://github.com/LetsGetTechnical/gridiron-survivor/commit/36bfaffb0f56c69860c886dab27667a108ee5621" rel="noopener noreferrer"&gt;Gridiron Survivor&lt;/a&gt; ticket.&lt;/li&gt;
&lt;li&gt;Reviewed three PRs for Gridiron Survivor.&lt;/li&gt;
&lt;li&gt;Reviewed the current status of GIS and opened two issues.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Thursday
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Reviewed three PRs for Gridiron Survivor.&lt;/li&gt;
&lt;li&gt;Released the alpha for Gridiron Survivor!&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Friday
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Reviewed three PRs for Deals for Devs.&lt;/li&gt;
&lt;li&gt;Made some updates on a client's website.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Saturday
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Created a draft PR for Gridiron Survivor.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1832594622360530984-916" src="https://platform.twitter.com/embed/Tweet.html?id=1832594622360530984"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1832594622360530984-916');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1832594622360530984&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;This is everything I could grab from my &lt;a href="https://github.com/ryandotfurrer" rel="noopener noreferrer"&gt;GitHub Contributions&lt;/a&gt;. There was more I did, but nothing that was captured on my GitHub contributions. I find a lot of my weekly work feels like “busy” work and I want to get better at eliminating that. The more time I can put into actual work the better I’ll feel as I can then more quickly progress toward my goals.&lt;/p&gt;

&lt;p&gt;What is not tracked cannot be measured and improved on; with that, my goal this week is to track where my time goes so I can review it and work towards being as efficient as possible with the limited time that I &lt;em&gt;do&lt;/em&gt; have.&lt;/p&gt;

</description>
      <category>devjournal</category>
      <category>webdev</category>
      <category>frontend</category>
    </item>
    <item>
      <title>My Experience with Astro</title>
      <dc:creator>Ryan Furrer</dc:creator>
      <pubDate>Mon, 12 Feb 2024 19:00:00 +0000</pubDate>
      <link>https://dev.to/ryandotfurrer/my-experience-with-astro-a0e</link>
      <guid>https://dev.to/ryandotfurrer/my-experience-with-astro-a0e</guid>
      <description>&lt;h2&gt;
  
  
  What is Astro?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://astro.build/" rel="noopener noreferrer"&gt;Astro&lt;/a&gt; is a web framework designed for building content-driven websites such as blogs, marketing, and e-commerce sites. It differentiates itself by shipping as little client-side JavaScript as possible, unless otherwise specified by the user. This approach, known as "Islands architecture," allows developers to combine different UI frameworks like React, Svelte, and Vue within the same project. &lt;/p&gt;

&lt;p&gt;Astro's focus on content-first, SEO-friendly websites, and its DX (developer experience) make it a compelling choice for building modern static web applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  My experience with frameworks
&lt;/h2&gt;

&lt;p&gt;While I've worked with &lt;a href="https://react.dev/" rel="noopener noreferrer"&gt;React&lt;/a&gt; (which is a library) and dabbled with &lt;a href="https://www.gatsbyjs.com/" rel="noopener noreferrer"&gt;Gatsby&lt;/a&gt; and &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next&lt;/a&gt;, Astro is the first framework I fully dove into. It felt very approachable from the start which made me even more excited to work with it.&lt;/p&gt;

&lt;p&gt;I decided to use Astro, &lt;a href="https://tailwindcss.com/" rel="noopener noreferrer"&gt;Tailwind CSS&lt;/a&gt;, and &lt;a href="https://www.storyblok.com/" rel="noopener noreferrer"&gt;Storyblok CMS&lt;/a&gt; for &lt;a href="https://ryanfurrer.com/" rel="noopener noreferrer"&gt;my new portfolio site&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;In fact, in my time using Astro, I have learned so much that I am already going back to improve my site by cleaning up the code and taking advantage of what Astro offers. What are some of those offerings?&lt;/p&gt;

&lt;h2&gt;
  
  
  What Astro Offers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Ships zero client-side JavaScript by default&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.astro.build/en/concepts/islands/" rel="noopener noreferrer"&gt;Islands&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.astro.build/en/guides/view-transitions/#_top" rel="noopener noreferrer"&gt;View Transitions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Great DX&lt;/li&gt;
&lt;li&gt;Official and user-submitted &lt;a href="https://astro.build/themes/" rel="noopener noreferrer"&gt;starter templates and themes&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Official and user-submitted &lt;a href="https://astro.build/integrations/" rel="noopener noreferrer"&gt;integrations&lt;/a&gt; for React, Vercel, Tailwind, and much more&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of these together, plus a great support team and community, excite me to continue working with Astro as it evolves.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I love Astro
&lt;/h2&gt;

&lt;p&gt;Writing astro feels like HTML on steroids. Take this snippet from my &lt;a href="https://ryanfurrer.com/conference/" rel="noopener noreferrer"&gt;Conference page&lt;/a&gt;, for example:&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="nt"&gt;&amp;lt;Layout&lt;/span&gt; &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;{title}&lt;/span&gt; &lt;span class="na"&gt;description=&lt;/span&gt;&lt;span class="s"&gt;{description}&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;main&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"flow container mx-auto"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;Section2XL&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;SectionXL&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;h2&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"mb-12 lg:text-center"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;A little reminder about me&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt;
          &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"flow lg:noflow grid lg:grid-cols-2 lg:place-items-center lg:gap-8"&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"greeting-container"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"flow col-span-1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;Image&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;{profilePicture}&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;`Ryan&lt;/span&gt; &lt;span class="na"&gt;Furrer&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"rounded-md"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;SocialLinks&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt;
            &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"greeting-container-verbiage-container"&lt;/span&gt;
            &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"flow col-span-1"&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;
              My name is Ryan Furrer and I am a highly enthusiastic Front-End
              Web Developer, with a focus on Design and UI/UX.
            &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From my experience, Astro feels like it has a far lower barrier to entry than other frameworks. Firstly, writing Astro Components is just like writing HTML, as you can see in the code example above - but with some optional extras that can enhance the experience. &lt;/p&gt;

&lt;p&gt;Secondly, you get access to frontmatter; frontmatter in Astro can be metadata such as the title, description, og:image, and more. Frontmatter can also be used to define props for components; look at the &lt;code&gt;{title}&lt;/code&gt; and &lt;code&gt;{description}&lt;/code&gt; attributes in the code above. Those are props I've declared in the &lt;code&gt;Layout.astro&lt;/code&gt; component, and defined in the frontmatter for that specific page. Check out the code below to see how it was defined:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;---&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Layout&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;../layouts/Layout.astro&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;SectionXL&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/SectionXL.astro&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;Section2XL&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/Section2XL.astro&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;Image&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;astro:assets&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;profilePicture&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;../assets/photos/rf-real-teal-bg.webp&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;SocialLinks&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;../layouts/SocialLinks.astro&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;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;It was nice to meet you!&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;description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;If you're visiting this page, we must have met in person, and what a pleasure it was.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;title&lt;/code&gt; and &lt;code&gt;description&lt;/code&gt; are &lt;em&gt;required&lt;/em&gt; Props that &lt;em&gt;must&lt;/em&gt; be defined wherever you use said component.&lt;/p&gt;

&lt;p&gt;Why do I love Astro? It's ease of use, fantastic documentation, and flexibility to work with whatever tools you prefer. If you know HTML and are somewhat familiar with JavaScript syntax, you can use Astro.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I've learned
&lt;/h2&gt;

&lt;p&gt;Choosing three new tools to learn at once was a lot, but learning by doing is what works best for me. Here are the top three things working with Astro has taught or reminded me.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Front-End Framework Syntax
&lt;/h3&gt;

&lt;p&gt;While writing Astro was easier for me than React/NextJS, the syntax and project file structure are similar. I was able to learn how to navigate and find what I needed in a relatively large project, compared to the &lt;a href="https://github.com/ryanfurrer?tab=repositories&amp;amp;q=&amp;amp;type=source&amp;amp;language=html&amp;amp;sort=" rel="noopener noreferrer"&gt;HTML/CSS/JS projects&lt;/a&gt; I have built previously. &lt;/p&gt;

&lt;h3&gt;
  
  
  2. Make it work, then make it pretty
&lt;/h3&gt;

&lt;p&gt;You could also call this "create an MVP (minmal viable product), then iterate on it." I often get stuck trying to code things to perfection the first time around that I end up wasting time on the project. There is no sense optimizing something if you're just going to do it from an entirely different approach later on.&lt;/p&gt;

&lt;p&gt;So, just a reminder, that your project does not need to be perfect the first, second or third time around. Make it work, then make it pretty.&lt;/p&gt;

&lt;p&gt;Get it functional, then go back and iterate over it.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Read the docs
&lt;/h3&gt;

&lt;p&gt;Reading the documentation, or docs, of a new coding language or tool is essential for understanding core concepts, avoiding mistakes, and increasing efficiency. In reading the docs I learned about Astro's &lt;a href="https://docs.astro.build/en/guides/images/#image--astroassets" rel="noopener noreferrer"&gt;Image component&lt;/a&gt; which is awesome, but naturally did not learn about it until my website was already deployed and out in the world. Why not? Because I did not take the time to read through the docs.&lt;/p&gt;

&lt;p&gt;What did I learn? Go through the docs first.&lt;/p&gt;

&lt;p&gt;You'll learn about more features of the language/tool you are using, increase your code's efficiency, and save some time by not needing to refactor as much down the road.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F8ozmdhck9v40ftice7mu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F8ozmdhck9v40ftice7mu.png" alt="Astro's mascot, Houston" width="800" height="718"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Takeaways
&lt;/h3&gt;

&lt;p&gt;Please, learn from my mistakes if you are new to Frameworks, or even just Astro!&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Read the docs
&lt;/h4&gt;

&lt;p&gt;See above 😂&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Use Layout Components properly
&lt;/h4&gt;

&lt;p&gt;I made a rookie mistake when developing my site at first, and instead of using a &lt;a href="https://docs.astro.build/en/basics/layouts/" rel="noopener noreferrer"&gt;Layout Component&lt;/a&gt;, I copied and pasted the same code across all the pages of my site. This is just one of the refinements I am making to my site now, and damn do I wish I had done it before. That goes for other front-end Frameworks as well!&lt;/p&gt;

&lt;h4&gt;
  
  
  3. You don't need a CMS
&lt;/h4&gt;

&lt;p&gt;Astro comes with fantastic &lt;a href="https://docs.astro.build/en/guides/markdown-content/" rel="noopener noreferrer"&gt;markdown and MDX support&lt;/a&gt; out the box. I chose to use a CMS so I could have experience integrating one into my site, but you certainly do not need one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Moving Forward
&lt;/h2&gt;

&lt;p&gt;I enjoyed using Astro so much that I am going to continue using it for content-heavy and static sites. You can take advantage of Server-Side Rendering (SSR) for places you need it too, just aiding the Astro hype.&lt;/p&gt;

&lt;p&gt;I'll continue working with NextJS, but I'm glad I took the time to learn Astro.&lt;/p&gt;

&lt;p&gt;Speaking of NextJS, I built incredibly basic (and slightly opinionated) boilerplates for both Astro and NextJS - both using Tailwind, of course. Links are below if you're interested. Just go to the GitHub repo and click the "Use this template" button to get started.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rf-astro-tailwind-starter.vercel.app/" rel="noopener noreferrer"&gt;View my Astro &amp;amp; Tailwind Starter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rf-next-tailwind-starter.vercel.app/" rel="noopener noreferrer"&gt;View my NextJS &amp;amp; Tailwind Starter&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;I hope I taught you a little bit about Astro and maybe even persuaded you to give it a shot. If you're a front-end dev that's new to frameworks, I recommend diving into Astro first!. Let me know if you agree or disagree with me over on &lt;a href="https://twitter.com/ryandotfurrer" rel="noopener noreferrer"&gt;X&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;Also, don't miss out on these &lt;a href="https://astro.build/wallpapers/" rel="noopener noreferrer"&gt;sweet wallpapers&lt;/a&gt; Astro has on their website for free!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>astro</category>
      <category>frontend</category>
      <category>programming</category>
    </item>
    <item>
      <title>THAT Conference</title>
      <dc:creator>Ryan Furrer</dc:creator>
      <pubDate>Mon, 05 Feb 2024 22:16:07 +0000</pubDate>
      <link>https://dev.to/ryandotfurrer/that-conference-4b9e</link>
      <guid>https://dev.to/ryandotfurrer/that-conference-4b9e</guid>
      <description>&lt;h2&gt;
  
  
  What is THAT Conference?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://thatconference.com/" rel="noopener noreferrer"&gt;THAT Conference&lt;/a&gt; is a conference that focuses on full-stack web development and the tech community. It is organized by Clark Sell, who holds two events per year: one in Wisconsin, USA, and the other in Texas, USA. THAT Conference has had a significant impact on many individuals, and I am honored to be included in the list of people who have been greatly influenced by it.&lt;/p&gt;

&lt;h2&gt;
  
  
  THAT Experience
&lt;/h2&gt;

&lt;p&gt;Let me start by saying that this was my first tech conference. I've attended other conferences before, but those were related to Viola Performance and Music Education. Based on my experience and what others have told me, I can now say that I have been spoiled by THAT.&lt;/p&gt;

&lt;p&gt;THAT conference was divided into 3.5 days, starting on Sunday, January 28, and ending on Wednesday, January 31.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 0 | Sunday, January 28
&lt;/h2&gt;

&lt;p&gt;A few things were scheduled for Day 0, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Sponsor Meeting and Kickoff&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;THAT Crew Meeting&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Early Registration and Meet &amp;amp; Greet&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Get the most out of THAT - Conference 101&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A 60-minute presentation on how to get the most out of THAT, the ins and outs of it, and learning how you can stay connected throughout the year.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Additionally, Taylor Desseyn, a Talent Advocate at &lt;a href="http://gun.io/" rel="noopener noreferrer"&gt;Gun.io&lt;/a&gt;, organized a meetup at a coffee shop in Austin, TX. Since it took a long time to get my rental car, I skipped the Sponsor Meeting and Kickoff. Instead, I went straight from the airport to my hotel and then headed to Barrett's Coffee.&lt;/p&gt;

&lt;p&gt;The coffee was excellent, the company was even better, and it was really nice to have already met someone I was excited about. Taylor's energy is contagious, and my time in Texas was off to a fantastic start.&lt;/p&gt;

&lt;p&gt;After the meetup, I brought Taylor to the hotel and convention center. This worked out well since I was already planning to be there for the Early Registration and Meet &amp;amp; Greet. While waiting in line for registration, I met someone I had been following on Twitter, &lt;a href="https://twitter.com/shookcodes" rel="noopener noreferrer"&gt;Sarah Shook&lt;/a&gt;! Sarah and I were both lucky to win tickets to THAT Conference; without those tickets, neither of us would have been able to attend. After that, I completed the conference registration, received my badge and swag bag, and started networking.&lt;/p&gt;

&lt;p&gt;Networking seems like a very administrative word to me. According to Google, networking is defined as &lt;em&gt;“the action or process of interacting with others to exchange information and develop professional or social contacts.&lt;/em&gt;” Regardless of how you phrase it, I was thrilled to start meeting people in the tech industry, the industry I aspire to be a part of. I couldn't keep track of everyone I had met that night, but there are a few individuals who I was excited to meet ahead of that night:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://twitter.com/DThompsonDev" rel="noopener noreferrer"&gt;Danny Thompson&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://twitter.com/jamesqquick" rel="noopener noreferrer"&gt;James Q. Quick&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://twitter.com/shashiwhocodes" rel="noopener noreferrer"&gt;Shashi Lo&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://twitter.com/BraydonCoyer" rel="noopener noreferrer"&gt;Braydon Coyer&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://twitter.com/brianmmdev" rel="noopener noreferrer"&gt;Brian Morrison&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After the official meet &amp;amp; greet, we headed to one of the hotel bars to grab a couple of drinks and keep chatting. Eventually, we all went our separate ways to get some rest for Day 1. THAT was already starting off on a high note, and it hadn't even really begun!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F0u1l6zewo38da55gnp0b.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F0u1l6zewo38da55gnp0b.jpeg" alt="Meeting internet friends at THAT conference. From left to right: Sarah Shook, Shashi Lo, Ryan Furrer, and Braydon Coyer" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Days 1 through 3
&lt;/h2&gt;

&lt;p&gt;The rest of the days followed the same schedule:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;THAT 5k&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Breakfast&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Opening from Clark Sell&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Featured Keynote&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Talk Breakout 1&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Lunch&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open Spaces&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Talk Breakout 2&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Talk Breakout 3&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Networking Event/Dinner&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Clark starts each day by briefly discussing the conference and general administrative matters. He refers to each day as a milestone: Day 1 is Mile 1, Day 2 is Mile 2, and Day 3 is Mile 3.&lt;/p&gt;

&lt;h3&gt;
  
  
  What are Open Spaces?
&lt;/h3&gt;

&lt;p&gt;Open Spaces were &lt;em&gt;great&lt;/em&gt;. They were a sort of open forum where we could talk about anything and everything. There were 12+ numbered tables, and any attendee could go to a board with a grid of time slots and table numbers and place a post-it note in the desired spot and table for a discussion.&lt;/p&gt;

&lt;p&gt;I attended the following Open Spaces:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Educating Developers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;React’s Identify Crisis&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unconventional Paths in Tech&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The conversations I sat in on were some of the best I've had in a long time. Connecting with people with common goals and interests was incredibly refreshing. I can't wait to continue these conversations virtually, and I’m also excited to introduce them to the local JavaScript meetup I attend.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mile 1 | Monday, January 29
&lt;/h2&gt;

&lt;p&gt;Clark asked us several questions to consider, answer, and act on during our time at THAT. Here are my responses from Monday morning:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Why are you here?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I am here to learn, network, and meet the digital friends I’ve interacted with.&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Who do you want to meet and why?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The people I’ve conversed with and learned from online to create a personal connection with them.&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;What can you give?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Support, my experiences, and friendship.&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;What will you do after?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Take the things I’ve learned and the wisdom I’ve gained to push my career search forward. I want to continue to build and maintain the relationships I made.&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;h3&gt;
  
  
  Featured Keynote
&lt;/h3&gt;

&lt;h4&gt;
  
  
  From Cold Calls to Code Calls: Leveraging Transferable Skills
&lt;/h4&gt;

&lt;p&gt;Presented by &lt;a href="https://twitter.com/shaundai" rel="noopener noreferrer"&gt;Shaundai Person&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Keynote Description:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In this keynote, we will discuss the transferable skills that have proven invaluable in my career transition. Whether you’re looking for your first job in tech or whether you’re a tenured engineer, you will learn how to leverage your own transferable skills to get a unique competitive edge in the tech industry.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Shaundai delivered an excellent keynote speech to kick off the conference. Her talk focused on the importance of recognizing and utilizing transferable skills to enter or advance in the tech industry. She was smart, funny, and inspiring, leaving the audience motivated and ready to take action.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.notion.so/From-Cold-Calls-to-Code-Calls-Leveraging-Transferable-Skills-be4dd183733b4df291926d34489edc9f?pvs=21" rel="noopener noreferrer"&gt;View my notes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/qcKK2Yyr4nE?t=1434" rel="noopener noreferrer"&gt;View the keynote&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fwysev8qffo0m59oth69s.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fwysev8qffo0m59oth69s.jpeg" alt="Shaundai Person giving her keynote" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Day 1 Talks/Presentations
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Data-Driven UX Decisions by &lt;a href="https://twitter.com/shashiwhocodes" rel="noopener noreferrer"&gt;Shashi Lo&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Talk Description:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;User Research is a great way to find out if you're going to implement something that is going to make an impact to your customers, or if you should reconsider the direction. It's always easier to pivot before going into development because there are so many variables and time it takes to develop a feature. Being able to reconsider the user experience to ensure the feature you are implementing will provide value, this could very well save your team time and effort in the end.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.notion.so/Data-Driven-UX-Decisions-dfd04d74f0504bca8f9c494df4a779fc?pvs=21" rel="noopener noreferrer"&gt;View my notes&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Building Custom GitHub Actions with Docker by &lt;a href="https://twitter.com/brianmmdev" rel="noopener noreferrer"&gt;Brian Morrison&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Talk Description:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Have you ever searched the GitHub Marketplace for an Action to perform a very specific task, only to find that nothing exists? How about copying and pasting code between workflows to perform repetitive tasks?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In this talk, learn how to create your own GitHub Actions that can be shared across workflows in your organization, or with the world via the GitHub Actions marketplace. We’ll explore what defines a custom GitHub Action, how to create one using a Docker container and test it locally, and cover utilizing actions within your own pipelines, with and without publishing them. Finally, we’ll touch on some best practices and considerations for building your own Actions based on my own experience creating the first set of GitHub Actions for PlanetScale.&lt;/p&gt;

&lt;p&gt;I split my time between this and Braydon’s talk below, as such I did not get any notes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/brianmmdev-that-actions" rel="noopener noreferrer"&gt;View Brain’s GitHub Repo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=rmrEaEptUWw" rel="noopener noreferrer"&gt;View Brian’s presentation&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Choosing Blog Topics and Boosting Content with SEO by &lt;a href="https://twitter.com/BraydonCoyer" rel="noopener noreferrer"&gt;Braydon Coyer&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Talk Description:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This presentation is chalked full of tangible tips and tricks that I've picked up by taking my technical blog to over 1,000,000 article reads, with many topics taking the #1 search result on Google.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.notion.so/Choosing-Blog-Topics-and-Boosting-Content-with-SEO-a4b4f6ffdf7a4255b96f0d558347e388?pvs=21" rel="noopener noreferrer"&gt;View my notes&lt;/a&gt; - note that these are not complete as I split my time between this and Brian’s talk above.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=VS01DHSnGV0" rel="noopener noreferrer"&gt;View the recorded talk.&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Why Building Community &amp;amp; Content Can Launch You Career by &lt;a href="https://twitter.com/tdesseyn" rel="noopener noreferrer"&gt;Taylor Desseyn&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Talk Description:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So many times folks do not realize that your community is everything. It plays into your career trajectory, it allows you to make new friends, and it gives you something to fall back on if things go south with your job. The biggest hurdle for individuals is they don't know how to get started let alone all the benefits community brings to you. In this talk I will dive into how to get started building community and how to leverage your community throughout your career!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;While I have notes from Taylor’s talk, it was much more interactive than a typical talk. You can &lt;a href="https://www.notion.so/Why-Building-Community-Content-Can-Launch-Your-Career-2ec6f02e927146caafba22a1818868d5?pvs=21" rel="noopener noreferrer"&gt;view my notes&lt;/a&gt;, but you’ll be better served by visiting &lt;a href="https://www.youtube.com/@TaylorDesseyn/videos" rel="noopener noreferrer"&gt;Taylor’s YouTube channel&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Open Space | Educating Developers
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://twitter.com/MetzinAround" rel="noopener noreferrer"&gt;PJ Metz&lt;/a&gt;, who is an Education Community Manager at GitHub Education and a former English Teacher, led an Open Space discussion. I was surprised to learn that there were a large number of former educators present at the discussion. During the session, we had some great discussions covering topics related to educating developers, learning as developers, common pain points with documentation, and the need for multi-level documentation categorized as beginner, intermediate, and expert.&lt;/p&gt;

&lt;h3&gt;
  
  
  Post Talks/Presentations
&lt;/h3&gt;

&lt;p&gt;After everything was said and done, there was a Happy Hour sponsored by Gun.io, followed by a board game night. I didn’t participate in game night, but the happy hour was a great way to continue networking and getting comfortable meeting new people.&lt;/p&gt;

&lt;p&gt;A very successful Mile 1 was in the books!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Ff5y3mlmbfrtt0lop5l9l.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ff5y3mlmbfrtt0lop5l9l.jpeg" alt="Large group of people that attended Taylor Desseyn's presentation at THAT Conference" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Mile 2 | Tuesday, January 30
&lt;/h2&gt;

&lt;p&gt;Like Mile 1, Mile 2 started with a banger of a keynote from Danny Thompson and ended with some killer, authentic Texas BBQ.&lt;/p&gt;

&lt;h3&gt;
  
  
  Featured Keynote
&lt;/h3&gt;

&lt;h4&gt;
  
  
  From Gas Stations to International Community Builder, the guide to a great tech community!
&lt;/h4&gt;

&lt;p&gt;Presented by &lt;a href="https://twitter.com/DThompsonDev/superfollows" rel="noopener noreferrer"&gt;Danny Thompson&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Keynote Description:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Danny Thompson had an interesting journey into tech and communities were pivotal to his success. He has since made different communities in different cities while also helping build communities in other countries and organizing events there too! This will cover major tips on building a very successful development community.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This was another intoxicatingly motivating keynote, so Mile 2 started just as strong as Mile 1, this one featuring Danny Thompson. He touched on so much, but two things stood out to me.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Danny encourages people to focus on themselves over others. I’ve only started doing this within the last year or so, and it’s definitely an odd feeling at first. Just because it’s odd doesn’t mean it’s bad; it’s one of the best things I could do for myself.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;“Don’t be so focused on where you’re going that you forget to pause in the moment and celebrate what you’ve done.”&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I have always struggled with celebrating my own achievements, no matter how small they may be. However, I have always been good at celebrating the successes of others, regardless of their magnitude. I recognize that this is a period in my life where I need to be kinder to myself and appreciate any accomplishment, no matter how small.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/pgFBitwKd6g?t=1265" rel="noopener noreferrer"&gt;View the keynote&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fcf4fa0ut62ehxg2z3ldq.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fcf4fa0ut62ehxg2z3ldq.jpeg" alt="Danny Thompson giving his keynote" width="800" height="1066"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Day 2 Talks/Presentations
&lt;/h3&gt;

&lt;h4&gt;
  
  
  How to fall in love with CSS by &lt;a href="https://twitter.com/kevinjpowell" rel="noopener noreferrer"&gt;Kevin Powell&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Talk Description:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In this talk, I'll be talking about how we can overcome many of the common pain points by changing our mindset in how we approach writing CSS, how we can work with the browser for simpler solutions, and I'll squeeze in some modern (yet well supported) CSS features that make life so much easier.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://lustrous-gnome-36d8b1.netlify.app/" rel="noopener noreferrer"&gt;View Kevin’s slideshow&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  From React to Next.js: Adjusting The Thought Process by &lt;a href="https://twitter.com/yesdavidgray" rel="noopener noreferrer"&gt;Dave Gray&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Talk Description:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Next.js is a React framework and as such, it is opinionated. Even though you may be very familiar with React, creating an application with Next.js requires a change in your thought processes. In this presentation, you will go from the client-side focus of React to the server-side focus of Next.js. You will learn about the benefits Next.js provides with this server-first approach and when these benefits may be desirable. You will learn the difference between static, static-site generation (SSG), server-side rendering (SSR), and incremental static regeneration (ISR). There will also be time for Q&amp;amp;A to help answer questions you may have.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.notion.so/From-React-to-Next-js-Adjusting-The-Thought-Process-ad36e624ea294eb3b75992aec27f5855?pvs=21" rel="noopener noreferrer"&gt;View my notes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=843nec-IvW0" rel="noopener noreferrer"&gt;View Dave’s free Next.JS course on YouTube&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Git Internals for VS Code Users: Bridging the Gap by &lt;a href="https://twitter.com/coridrew" rel="noopener noreferrer"&gt;Cori Drew&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Talk Description:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For many, the graphical user interface of VSCode simplifies git, streamlining commands into digestible, one-click operations. However, this simplicity prevents many from truly understanding what actually happens when commands such as 'push', 'pull', 'fetch', and 'rebase' are executed. This talk aims to shed light on these inner workings, illuminating the depth of git within the VSCode environment.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://wizardzines.com/comics/inside-git/" rel="noopener noreferrer"&gt;View Julia Evans’ Git Cheatsheet&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Open Space | React’s Identity Crisis
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://twitter.com/BrooksLybrand" rel="noopener noreferrer"&gt;Brooks Lybrand&lt;/a&gt;, a Remix Developer Relations Manager at Shopify, prompted this Open Space. I felt a bit foolish jumping in here, but once again, everyone was so incredibly welcoming and even wanted to hear what I, a very junior developer, had to say. I certainly felt validated that a fellow Junior Web Developer, &lt;a href="https://twitter.com/DominickJMonaco" rel="noopener noreferrer"&gt;Dominick Monaco&lt;/a&gt;, was there and expressed similar pain points.&lt;/p&gt;

&lt;p&gt;This Open Space lead to some very interseting points, takes, and thoughts on React from several people. Even if Brooks was a bit biased as he is a Developer Relations Manager for Remix, a Next.js competitor, I’m glad they opened the floor for this discussion.&lt;/p&gt;

&lt;h3&gt;
  
  
  Post Talks/Presentations
&lt;/h3&gt;

&lt;p&gt;At the end of the day we were treated to some authentic Texas BBQ and it was absolutely amazing. I got to sit at a table of people I hadn’t met yet and they were all great people! After that, there was a bonfire and bar takeover at the hotel/resort, where I spent the rest of the night.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F0ochtpxn2rinecnsic4o.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F0ochtpxn2rinecnsic4o.jpeg" alt="Grabbed dinner with a bunch of THAT attendees" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fjv5nqk0tgsaiy9ux90dn.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fjv5nqk0tgsaiy9ux90dn.jpeg" alt="Grabbed dinner with a bunch of THAT attendees" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Mile 3 | Wednesday, January 31
&lt;/h2&gt;

&lt;p&gt;Mile 3 started differently than the rest; instead of Clark introducing the keynote speaker, he was doing the speaking! Instead, &lt;a href="https://twitter.com/TejasKumar_" rel="noopener noreferrer"&gt;Tejas Kumar&lt;/a&gt; did the introductions. I had never heard of Tejas before, but he is well-liked in the community, and his talk “Getting the Most out of Today’s Web Industry” was well-received.&lt;/p&gt;

&lt;h3&gt;
  
  
  Featured Keynote
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Hindsight is 20/20, Design A Better Life
&lt;/h4&gt;

&lt;p&gt;Presented by &lt;a href="https://twitter.com/theClarkSell" rel="noopener noreferrer"&gt;Clark Sell&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Keynote Description:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;After 25 years in tech, I find myself in a position where I'm not sure I've ever belonged. I'm standing here at the age of 48, asking myself:  &lt;/p&gt;

&lt;p&gt;"What is my purpose?"&lt;br&gt;&lt;br&gt;
"How do I find it? "&lt;br&gt;&lt;br&gt;
"What is it? "&lt;br&gt;&lt;br&gt;
"Where is it? "&lt;br&gt;&lt;br&gt;
"Is it even valuable? "&lt;br&gt;&lt;br&gt;
"Do I have a life balance? "&lt;br&gt;&lt;br&gt;
"Am I happy?"  &lt;/p&gt;

&lt;p&gt;But if those are the questions we’re asking ourselves, it begs the question, are you actually doing the work to design the life you want to live? We don't build software without a design; why would we live life without a designer  &lt;/p&gt;

&lt;p&gt;I can't and won't solve your problems; those are for you, but I can share my experience and hope you will take that as input to create the life you want to live.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Clark crushed this talk. He did not try to solve anyone’s problems but instead spoke about his own experiences, which I believe, is paramount in life. It was emotional, riveting, and motivating to get out there and do the right thing for &lt;em&gt;you&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/_w8B2B-xyYI?t=543" rel="noopener noreferrer"&gt;View the keynote&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F82mi27nytvxc4pqe9muf.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F82mi27nytvxc4pqe9muf.jpeg" alt="Clark Sell giving his keynote" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Day 3 Talks/Presentations
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Customizing the Web Platform with Web Components by &lt;a href="https://twitter.com/raymondcamden" rel="noopener noreferrer"&gt;Raymond Camden&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Talk Description:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This talk will cover what you need to know to begin extending the web with web components. We'll look at the what, why, and how of creating and using web components, including the history of the various technologies behind components, how to start building them now, and digging into plenty of examples.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Cultivating Confidence by &lt;a href="https://twitter.com/nateemerson" rel="noopener noreferrer"&gt;Nate Emerson&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Talk Description:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Confidence principally comes from 3 components: permission, community, and curiosity. In this talk we will dive in on how confidence is created, cultivated, and affirmed. Each one of us can use this information to instill more confidence in ourselves and those around us starting today!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I know Nate is looking to share these slides, and I will update this post when he does. For now, here are the key takeaways from his talk:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Instill confidence in those around you&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nurture your own confidence&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Encourage and empower others to safely “try on” confidence&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  The actor model, behind the scenes by &lt;a href="https://twitter.com/davidkpiano" rel="noopener noreferrer"&gt;David Khourshid&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Talk Description:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This talk will guide you through the principles behind the actor model, showcasing how it aids in building robust, scalable, and concurrent systems.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The &lt;a href="https://stately.ai/blog/what-is-the-actor-model" rel="noopener noreferrer"&gt;actor model&lt;/a&gt; was brand new to me, but David did a great job explaining it, and I see how it can come in handy when visualizing and managing state.&lt;/p&gt;

&lt;p&gt;Use &lt;a href="http://swimlanes.io" rel="noopener noreferrer"&gt;swimlanes.io&lt;/a&gt; to create sequence diagrams&lt;/p&gt;

&lt;h3&gt;
  
  
  Post Talks/Presentations
&lt;/h3&gt;

&lt;p&gt;This was the final night, meal, and time spent with these new friends and colleagues… for now. We ended the trip by eating at the steakhouse on the grounds of the &lt;a href="https://www.kalahariresorts.com/texas/" rel="noopener noreferrer"&gt;Kalahari Resort in Round Rock, TX&lt;/a&gt;. We laughed, ate food, and eventually parted ways as some people were leaving for home that night, some the next day, or some people were just exhausted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;THAT Conference. Firstly, I cannot thank Clark Sell enough for organizing such a fantastic event. Secondly, I would not have been able to attend THAT Conference without Brian Morrison, as I was fortunate to win a ticket from him. &lt;strong&gt;Thank you, Brian.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I consider myself &lt;em&gt;incredibly&lt;/em&gt; fortunate to have won the ticket and been able to attend; it was truly one of the best experiences of my life. To say it was life-changing is an understatement, and I implore you to go to the &lt;a href="https://thatconference.com/" rel="noopener noreferrer"&gt;Wisconsin&lt;/a&gt; event in July or attend the one in Texas next year; I know I’ll be there.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fw6875cgt9a4nlfuptiph.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fw6875cgt9a4nlfuptiph.jpeg" alt="Ryan Furrer and Brian Morrison" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>conference</category>
      <category>community</category>
      <category>webdev</category>
      <category>career</category>
    </item>
    <item>
      <title>Another Modern CSS Reset</title>
      <dc:creator>Ryan Furrer</dc:creator>
      <pubDate>Sat, 05 Feb 2022 18:20:44 +0000</pubDate>
      <link>https://dev.to/ryandotfurrer/another-modern-css-reset-2a0g</link>
      <guid>https://dev.to/ryandotfurrer/another-modern-css-reset-2a0g</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/TheRyanFurrer/css-reset" rel="noopener noreferrer"&gt;View it on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What is a CSS Reset and why is it useful?&lt;/p&gt;

&lt;p&gt;In its simplest form, a CSS Reset is a stylesheet used to remove any unwanted default styling a browser might apply to your HTML elements. Many people - myself included - choose to use CSS Resets to add their &lt;em&gt;preferred&lt;/em&gt; default styling to their projects so there is some form of consistency and continuity between their projects.&lt;/p&gt;

&lt;p&gt;While browsers have pared down their default stylings and brought them more in line with one another, a CSS Reset can still offer you a handful of benefits. We’ll dig more into those as we move along in my CSS reset, but first, let us take a look at the reset in its entirety. Today's blog will be a bit lengthy but stick with me.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This CSS Reset is a conglomerate of cherry-picked properties for my use case from &lt;a href="https://piccalil.li/blog/a-modern-css-reset/" rel="noopener noreferrer"&gt;Andy Bell's CSS Reset&lt;/a&gt;, &lt;a href="https://www.joshwcomeau.com/css/custom-css-reset/" rel="noopener noreferrer"&gt;Josh Commeau’s CSS Reset&lt;/a&gt;, and some properties I found from &lt;a href="https://kentcdodds.com/" rel="noopener noreferrer"&gt;Kent C. Dodds' website&lt;/a&gt;.&lt;/p&gt;



&lt;h2&gt;
  
  
  The Entire Reset
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/TheRyanFurrer/css-reset" rel="noopener noreferrer"&gt;View it on GitHub&lt;/a&gt;&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;/*
  This CSS Reset is a conglomerate of Andy Bell's, Josh Commeau, and some properties I found from Kent C. Dodds' website.
*/&lt;/span&gt;

&lt;span class="c"&gt;/*
  Andy's Custom CSS Reset
  https://piccalil.li/blog/a-modern-css-reset/
*/&lt;/span&gt;

&lt;span class="c"&gt;/*
  Josh's Custom CSS Reset
  https://www.joshwcomeau.com/css/custom-css-reset/
*/&lt;/span&gt;

&lt;span class="c"&gt;/*
  Kent C. Dodds
  https://kentcdodds.com/
*/&lt;/span&gt;

&lt;span class="c"&gt;/*-----Universal Styles-----*/&lt;/span&gt;
&lt;span class="o"&gt;*,&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nd"&gt;::before&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nd"&gt;::after&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;box-sizing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;border-box&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/*-----Core Styles-----*/&lt;/span&gt;
&lt;span class="nt"&gt;html&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;text-size-adjust&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;-moz-text-size-adjust&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;-webkit-text-size-adjust&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="nd"&gt;:focus-within&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;scroll-behavior&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;smooth&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="o"&gt;,&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;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin-left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.5rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin-right&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.5rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&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;line-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1440px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;text-rendering&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;optimizeSpeed&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;-webkit-font-smoothing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;antialiased&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;main&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;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&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;span class="nt"&gt;footer&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;border-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="no"&gt;black&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="m"&gt;1.5rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.5rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="o"&gt;&amp;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;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;sticky&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;top&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="c"&gt;/*-----Element Styles-----*/&lt;/span&gt;
&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;'list'&lt;/span&gt;&lt;span class="o"&gt;],&lt;/span&gt;
&lt;span class="nt"&gt;ol&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;'list'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;list-style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;img&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;picture&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;video&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;canvas&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;svg&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="nb"&gt;block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;h3&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;h4&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;h5&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;h6&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;overflow-wrap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;break-word&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;h3&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;line-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.15&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;small&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;b&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;strong&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bolder&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;sub&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;sup&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;75%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;line-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;relative&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;vertical-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;baseline&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;sub&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;-0.25em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;sup&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;-0.5em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="nd"&gt;:not&lt;/span&gt;&lt;span class="o"&gt;([&lt;/span&gt;&lt;span class="nt"&gt;class&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;text-decoration-skip-ink&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;span class="nt"&gt;a&lt;/span&gt;&lt;span class="nd"&gt;:is&lt;/span&gt;&lt;span class="o"&gt;([&lt;/span&gt;&lt;span class="nt"&gt;class&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;text-decoration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;input&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;textarea&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;select&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;inherit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;pointer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/*-----Browser Inconsistancy Fixes-----*/&lt;/span&gt;
&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;input&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;'button'&lt;/span&gt;&lt;span class="o"&gt;],&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;'reset'&lt;/span&gt;&lt;span class="o"&gt;],&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;'submit'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;-webkit-appearance&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;button&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;'search'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;-webkit-appearance&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;textfield&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/* 1 */&lt;/span&gt;
  &lt;span class="nl"&gt;outline-offset&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;-2px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/* 2 */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nd"&gt;::-webkit-search-decoration&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;-webkit-appearance&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nd"&gt;::-webkit-inner-spin-button&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nd"&gt;::-webkit-outer-spin-button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;height&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;span class="nd"&gt;::-webkit-file-upload-button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;-webkit-appearance&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;button&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/* 1 */&lt;/span&gt;
  &lt;span class="nl"&gt;font&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;inherit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/* 2 */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nd"&gt;::-moz-focus-inner&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;border-style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nd"&gt;:-moz-focusring&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;outline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;dotted&lt;/span&gt; &lt;span class="n"&gt;ButtonText&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/*-----Media Queries-----*/&lt;/span&gt;
&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prefers-reduced-motion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;html&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;focus-within&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;scroll-behavior&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;span class="o"&gt;*,&lt;/span&gt;
  &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nd"&gt;::before&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
  &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nd"&gt;::after&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;animation-duration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.01ms&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;animation-iteration-count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;transition-duration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.01ms&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;scroll-behavior&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;h2&gt;
  
  
  Part 1: Universal Styles
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="o"&gt;*,&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nd"&gt;::before&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nd"&gt;::after&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;box-sizing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;border-box&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Remove default margin */&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&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;If you only chose to include these two stylings, you would be set up for success, to be sure - this would be a perfectly acceptable simple and minimal CSS Reset. It makes sizing elements easier and removes all margin and padding on all elements by taking advantage of the universal selector, &lt;code&gt;*&lt;/code&gt;.&lt;/p&gt;



&lt;h2&gt;
  
  
  Part 2: Default Body Styles
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;html&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;text-size-adjust&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;-moz-text-size-adjust&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;-webkit-text-size-adjust&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="nd"&gt;:focus-within&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;scroll-behavior&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;smooth&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="o"&gt;,&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;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&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;line-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1440px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;text-rendering&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;optimizeSpeed&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;-webkit-font-smoothing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;antialiased&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;main&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;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&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;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="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="n"&gt;size-5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;padding-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="n"&gt;size-8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;border-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="n"&gt;border-size-1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="n"&gt;bg-tertiary&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;padding-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="n"&gt;size-5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="o"&gt;&amp;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;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;sticky&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;top&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This part is a bit lengthy so let’s break it down further.&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="nt"&gt;html&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;text-size-adjust&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;-moz-text-size-adjust&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;-webkit-text-size-adjust&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="nd"&gt;:focus-within&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;scroll-behavior&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;smooth&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="o"&gt;,&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;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&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;First, we set &lt;code&gt;text-size-adjust&lt;/code&gt; and its accompanying browser pre-fixes to none.  When Apple released the first iPhone, and you would rotate your device when viewing a site, the text size would enlarge to make things easier to see. This made sense before responsive websites; however, it is archaic and unnecessary. That being said, Apple still makes it happen. &lt;code&gt;text-size-adjust&lt;/code&gt; disables it from occurring.&lt;/p&gt;

&lt;p&gt;Next up is &lt;code&gt;html:focus-within&lt;/code&gt; - this enables smooth scrolling without an issue pointed out in this article on CSS-Tricks. I highly encourage you to &lt;a href="https://css-tricks.com/fixing-smooth-scrolling-with-find-on-page/" rel="noopener noreferrer"&gt;read and understand&lt;/a&gt; why using &lt;code&gt;html { scroll-behavior: smooth;}&lt;/code&gt; is not currently advised.&lt;/p&gt;

&lt;p&gt;Lastly, adding &lt;code&gt;height: 100%;&lt;/code&gt; to our &lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; tags allows us to use percentage-based heights on elements on our page. I always wondered by this did not work as you’d expect, and as &lt;a href="https://www.joshwcomeau.com/css/custom-css-reset/#digit-percentage-based-heights" rel="noopener noreferrer"&gt;Josh explains&lt;/a&gt;, “…the &lt;em&gt;height&lt;/em&gt; of an element is calculated based on its &lt;em&gt;children&lt;/em&gt;.”&lt;/p&gt;

&lt;p&gt;I don’t use &lt;code&gt;vh&lt;/code&gt; on mobile sites because all the browsers are different and often show/hide elements based on what direction the user is scrolling; as such, using &lt;code&gt;vh&lt;/code&gt; can cause unexpected effects.&lt;/p&gt;



&lt;br&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&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;line-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1440px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;text-rendering&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;optimizeSpeed&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;-webkit-font-smoothing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;antialiased&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;main&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;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&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;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="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="n"&gt;size-5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;padding-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="n"&gt;size-8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;border-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="n"&gt;border-size-1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="n"&gt;bg-tertiary&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;padding-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="n"&gt;size-5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="o"&gt;&amp;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;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;sticky&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;top&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This part is a bit magical for me; we’ll break this down piece by piece again. You may see some reused styles, such as &lt;code&gt;display: flex;&lt;/code&gt; - that is because, in my reset, I don’t like to do much nesting or truncating so that I can easily see what is happening if I need to fix any issues.&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="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;line-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1440px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;text-rendering&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;optimizeSpeed&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;-webkit-font-smoothing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;antialiased&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;Since I work from a mobile-first approach, as I encourage most to do, I make my content into a column from a meta-level using &lt;code&gt;display: flex;&lt;/code&gt; and &lt;code&gt;flex-direction: column;&lt;/code&gt;. Though this is how the page is typically rendered, I’ve run into some weird things in the past and prefer to add two lines of code to ensure it looks how I expect.&lt;/p&gt;

&lt;p&gt;Next, I add some defaults that I prefer:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;line-height: 1.5;&lt;/code&gt; - a basic default recommended for better reading experiences and accessibility. This is unnecessary for large font and headings, which you’ll see get over-written later.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;margin: 0 auto;&lt;/code&gt; - centers all visible content on the page. This is necessary when you take into account the following style.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;max-width: 1440px&lt;/code&gt; - I find that a page width of 1440px works well for me as it limits how far people have to move their heads to see both ends of your website. However, as much as people enjoy massive ultra-wide displays, I don’t think having the header navigation spanning 34” is helpful, nor is it good looking.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;padding: 0 1rem;&lt;/code&gt; - this adds padding to the left and right sides of the body, which is great for mobile browsing. Otherwise, you’d have no space between the content and where the screen ends.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;text-rendering: optimizeSpeed;&lt;/code&gt; - The browser emphasizes rendering speed over legibility and geometric precision when drawing text. It disables kerning and ligatures.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;-webkit-font-smoothing: antialiased;&lt;/code&gt; - I can’t explain this any better than &lt;a href="https://www.joshwcomeau.com/css/custom-css-reset/#digit-font-smoothing" rel="noopener noreferrer"&gt;Josh&lt;/a&gt;; however, know it only applies to computers running macOS.&lt;/p&gt;



&lt;h2&gt;
  
  
  Part 3: Inner-Element Styles
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/*-----Element Styles-----*/&lt;/span&gt;
&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;'list'&lt;/span&gt;&lt;span class="o"&gt;],&lt;/span&gt;
&lt;span class="nt"&gt;ol&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;'list'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;list-style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;img&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;picture&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;video&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;canvas&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;svg&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="nb"&gt;block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;h3&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;h4&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;h5&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;h6&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;overflow-wrap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;break-word&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;h3&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;line-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.15&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;small&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;b&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;strong&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bolder&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;sub&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;sup&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;75%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;line-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;relative&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;vertical-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;baseline&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;sub&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;-0.25em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;sup&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;-0.5em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="nd"&gt;:not&lt;/span&gt;&lt;span class="o"&gt;([&lt;/span&gt;&lt;span class="nt"&gt;class&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;text-decoration-skip-ink&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;span class="nt"&gt;a&lt;/span&gt;&lt;span class="nd"&gt;:is&lt;/span&gt;&lt;span class="o"&gt;([&lt;/span&gt;&lt;span class="nt"&gt;class&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;text-decoration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;input&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;textarea&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;select&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;inherit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;pointer&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;
  
  
  Improving Accessibility and Improving Styling
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;'list'&lt;/span&gt;&lt;span class="o"&gt;],&lt;/span&gt;
&lt;span class="nt"&gt;ol&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;'list'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;list-style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&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 removes the &lt;code&gt;list-style&lt;/code&gt; on any &lt;code&gt;ol&lt;/code&gt; or &lt;code&gt;ul&lt;/code&gt; with an attribute of &lt;code&gt;role=‘list'&lt;/code&gt;. While this rule wouldn’t be necessary if CSS didn’t remove the semantics and a11y of lists with the &lt;code&gt;list-style&lt;/code&gt; removed, we at least have a solution with this rule applied. You can read more about this in Scott O’Hara’s article &lt;a href="https://www.scottohara.me/blog/2019/01/12/lists-and-safari.html" rel="noopener noreferrer"&gt;“Fixing” Lists&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Improving Working with Images
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;img&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;picture&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;video&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;canvas&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;svg&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="nb"&gt;block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&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 rule is relatively straightforward - it makes any image render as a block element and removes its ability to break outside of its container by settings its &lt;code&gt;max-width&lt;/code&gt; to 100%.&lt;/p&gt;
&lt;h3&gt;
  
  
  Baseline Text Styles
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;h3&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;h4&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;h5&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;h6&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;overflow-wrap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;break-word&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;h3&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;line-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.15&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;The first rule encourages the browser to break lines on words rather than insert hyphens, and “…will only create a break if an entire word cannot be placed on its own line without overflowing...” - As per the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/overflow-wrap" rel="noopener noreferrer"&gt;MDN&lt;/a&gt;. This - in my opinion - is a stylistic choice rather than a &lt;em&gt;must-have&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The second rule above reduces the &lt;code&gt;line-height&lt;/code&gt; of heading elements &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt;, and &lt;code&gt;&amp;lt;h3&amp;gt;&lt;/code&gt;. As per the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/line-height#accessibility_concerns" rel="noopener noreferrer"&gt;MDN&lt;/a&gt;, only the &lt;em&gt;main paragraph content&lt;/em&gt; must have a &lt;code&gt;line-height&lt;/code&gt; of 1.5. While still maintaining accessibility, headings may have a slightly smaller &lt;code&gt;line-height&lt;/code&gt; as the larger font sizes associated with them create more white space, thus possibly leading to header lines being spread too far apart.&lt;/p&gt;
&lt;h3&gt;
  
  
  Preferred Styles
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;small&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;b&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;strong&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bolder&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;sub&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;sup&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;75%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;line-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;relative&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;vertical-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;baseline&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;sub&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;-0.25em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;sup&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;-0.5em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="nd"&gt;:not&lt;/span&gt;&lt;span class="o"&gt;([&lt;/span&gt;&lt;span class="nt"&gt;class&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;text-decoration-skip-ink&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;span class="nt"&gt;a&lt;/span&gt;&lt;span class="nd"&gt;:is&lt;/span&gt;&lt;span class="o"&gt;([&lt;/span&gt;&lt;span class="nt"&gt;class&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;text-decoration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;input&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;textarea&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;select&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;inherit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;pointer&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;The rules above are preferred styles that also do away with any browser inconsistencies. We’ll go through these quickly as they are relatively straightforward.&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="nt"&gt;small&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80%&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;Sets &lt;code&gt;font-size&lt;/code&gt; of any text inside the HTML &lt;code&gt;&amp;lt;small&amp;gt;&lt;/code&gt; tag to 80% of the regular size for that element. For example, if we have a &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; tag with a regular size of &lt;code&gt;1rem&lt;/code&gt; or &lt;code&gt;16px&lt;/code&gt;, the &lt;code&gt;&amp;lt;small&amp;gt;&lt;/code&gt; size is &lt;code&gt;0.8rem&lt;/code&gt;, or &lt;code&gt;12.8px&lt;/code&gt;.&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="nt"&gt;b&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;strong&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bolder&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;Old Microsoft Edge (before it was Chromium-based) and Safari render the &lt;code&gt;&amp;lt;b&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;strong&amp;gt;&lt;/code&gt; tags differently from other browsers, this rule sets a standard boldness (&lt;code&gt;font-weight&lt;/code&gt;) to display any text wrapped in those tags.&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="nt"&gt;sub&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;sup&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;75%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;line-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;relative&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;vertical-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;baseline&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;sub&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;-0.25em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;sup&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;-0.5em&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;Prevent &lt;code&gt;&amp;lt;sub&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;sup&amp;gt;&lt;/code&gt; elements from affecting the &lt;code&gt;line-height&lt;/code&gt; in all browsers.&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="nt"&gt;a&lt;/span&gt;&lt;span class="nd"&gt;:not&lt;/span&gt;&lt;span class="o"&gt;([&lt;/span&gt;&lt;span class="nt"&gt;class&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;text-decoration-skip-ink&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;span class="nt"&gt;a&lt;/span&gt;&lt;span class="nd"&gt;:is&lt;/span&gt;&lt;span class="o"&gt;([&lt;/span&gt;&lt;span class="nt"&gt;class&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;text-decoration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&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;The first rule assigns default styles (&lt;code&gt;text-decoration: underline;&lt;/code&gt;) to any &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; without a class. The second rule applies &lt;code&gt;text-decoration: none;&lt;/code&gt; to any &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; &lt;em&gt;with&lt;/em&gt; a class. This is incredibly useful in reducing the number of times you might need to repeat these rules to get the styling you’d like.&lt;/p&gt;

&lt;p&gt;The critical thing to remember when using these rules and get the most out of them - to &lt;a href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself#:~:text=%22Don't%20repeat%20yourself%22,data%20normalization%20to%20avoid%20redundancy." rel="noopener noreferrer"&gt;keep your code DRY&lt;/a&gt;) - is to &lt;em&gt;never&lt;/em&gt; apply a class to an anchor tag where you’d like to maintain default styling.&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="nt"&gt;input&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;textarea&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;select&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;inherit&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 rule tells the &lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;texture&amp;gt;&lt;/code&gt;, and &lt;code&gt;&amp;lt;select&amp;gt;&lt;/code&gt; elements to use or &lt;em&gt;inherit&lt;/em&gt; the same font as their parent element. By default, these will use a different font which, for me, is unwanted.&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="nt"&gt;button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;pointer&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;The above removes the default &lt;code&gt;background&lt;/code&gt; and &lt;code&gt;border&lt;/code&gt; of buttons and ensures the cursor becomes a 👆🏻 to suggest something will happen when you click it.&lt;/p&gt;



&lt;h2&gt;
  
  
  Part 4: Fixing Browser Inconsistencies
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/*-----Browser Inconsistancy Fixes-----*/&lt;/span&gt;
&lt;span class="c"&gt;/* Correct the inability to style clickable types in iOS and Safari */&lt;/span&gt;
&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;input&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;'button'&lt;/span&gt;&lt;span class="o"&gt;],&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;'reset'&lt;/span&gt;&lt;span class="o"&gt;],&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;'submit'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;-webkit-appearance&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;button&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/*
1. Correct the odd appearance in Chrome and Safari.
2. Correct the outline style in Safari.
*/&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;'search'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;-webkit-appearance&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;textfield&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/* 1 */&lt;/span&gt;
  &lt;span class="nl"&gt;outline-offset&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;-2px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/* 2 */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Remove the inner padding in Chrome and Safari on macOS */&lt;/span&gt;
&lt;span class="nd"&gt;::-webkit-search-decoration&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;-webkit-appearance&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Correct the cursor style of increment and decrement buttons in Safari */&lt;/span&gt;
&lt;span class="nd"&gt;::-webkit-inner-spin-button&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nd"&gt;::-webkit-outer-spin-button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;height&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;span class="c"&gt;/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Change font properties to 'inherit' in Safari.
*/&lt;/span&gt;
&lt;span class="nd"&gt;::-webkit-file-upload-button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;-webkit-appearance&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;button&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/* 1 */&lt;/span&gt;
  &lt;span class="nl"&gt;font&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;inherit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/* 2 */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Remove the inner border and padding in Firefox */&lt;/span&gt;
&lt;span class="nd"&gt;::-moz-focus-inner&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;border-style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Restore the focus styles unset by the previous rule */&lt;/span&gt;
&lt;span class="nd"&gt;:-moz-focusring&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;outline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;dotted&lt;/span&gt; &lt;span class="n"&gt;ButtonText&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;The CSS rules above I saw on &lt;a href="https://kentcdodds.com/" rel="noopener noreferrer"&gt;Kent C. Dodds’&lt;/a&gt; new site and thought, “If he’s got them, they are there for a reason,” and thought I’d throw them in my CSS reset. They all do something to “fix” browser styling, “correct,” or make different browsers consistent with the others. Most of these apply to Safari on iOS and macOS, which I’d argue are the new Internet Explorer.&lt;/p&gt;

&lt;p&gt;Read the comments in the code above to learn more about each rule.&lt;/p&gt;



&lt;h2&gt;
  
  
  Part 5: Increasing Accessibility
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/*-----Media Queries-----*/
@media (prefers-reduced-motion: reduce) {
  html:focus-within {
    scroll-behavior: auto;
  }

  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The above media query is something I consider a &lt;em&gt;must-have&lt;/em&gt; for all projects. This is because it respects users that prefer reduced motion when viewing websites, mobile apps, and operating systems - basically, any piece of software.&lt;/p&gt;

&lt;p&gt;Some people have reported experiencing bouts of motion sickness and vertigo when they see too much motion in software partially caused by &lt;a href="https://www.a11yproject.com/posts/understanding-vestibular-disorders/" rel="noopener noreferrer"&gt;vestibular disorders&lt;/a&gt;.&lt;/p&gt;



&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;Phew, that was a lot!&lt;/p&gt;

&lt;p&gt;So there you have it, a CSS Reset that is a conglomeration of the resets of two well-known developers, &lt;a href="https://piccalil.li/blog/a-modern-css-reset/" rel="noopener noreferrer"&gt;Andy Bell&lt;/a&gt; and &lt;a href="https://www.joshwcomeau.com/css/custom-css-reset/" rel="noopener noreferrer"&gt;Josh Comeau&lt;/a&gt;, and some borrowed code from Kent C. Dodds’ &lt;a href="https://kentcdodds.com/" rel="noopener noreferrer"&gt;new site&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;While the code snippets I used from Kent’s website are more for fixing browser inconsistencies (a lot for Safari), Josh’s CSS Reset focuses a lot on making the browser easier/better to build in, while Andy’s does the same, and then some.&lt;/p&gt;

&lt;p&gt;It is important to note that there is no single correct way to do a CSS Reset, which is why you can see that while the two of them share similarities, they are different enough that I feel they achieve slightly different things in the end. This could, of course, be reflective of each developer’s style, or there may be additional tools such as frameworks or CSS Libraries that we do not see.&lt;/p&gt;

&lt;p&gt;Feel free to &lt;a href="https://github.com/TheRyanFurrer/css-reset" rel="noopener noreferrer"&gt;view the reset on GitHub&lt;/a&gt; and use it in your projects! Or you may wish to modify it to your liking. As I update the reset, the GitHub repo will also be updated. I'd love to hear your thoughts on this, so feel free to reach out to me on &lt;a href="https://twitter.com/TheRyanFurrer" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; or via my &lt;a href="https://theryanfurrer.dev/contact.html" rel="noopener noreferrer"&gt;portfolio&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/TheRyanFurrer/css-reset" rel="noopener noreferrer"&gt;View it on GitHub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>html</category>
      <category>css</category>
      <category>beginners</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>Weekly Summary: 7/18 - 7/24</title>
      <dc:creator>Ryan Furrer</dc:creator>
      <pubDate>Sun, 25 Jul 2021 19:09:43 +0000</pubDate>
      <link>https://dev.to/ryandotfurrer/weekly-summary-7-18-7-24-56ce</link>
      <guid>https://dev.to/ryandotfurrer/weekly-summary-7-18-7-24-56ce</guid>
      <description>&lt;p&gt;Welcome to the fifth installment in my weekly summary series, where I give quick recaps of what I worked on the previous week to keep myself accountable.&lt;/p&gt;

&lt;p&gt;First, let's go over my weekly schedule:&lt;/p&gt;

&lt;h2&gt;
  
  
  Current Weekly Schedule
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Monday - Thursday&lt;/strong&gt;: Study from 6:00pm - 8:00pm-ish. Sometimes I go until 9pm depending on how I feel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Friday&lt;/strong&gt;: Study from 1:00pm - 4:00pm. I like to give myself more time to study when I can, and working half-days on Fridays for my current job leaves a significant time for extra coding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Saturday&lt;/strong&gt;: Study from 7:30am - 9:30am. I give myself at least 2 hours on Saturdays, even though I often get more time in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sunday&lt;/strong&gt;: Day off This is my day to recover, get energized and prepare for the coming week!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All this works with my personal goal of studying / coding 2 hours a day. I would like to do more, but I don't have the mental bandwidth to do more, usually, throughout the week.&lt;/p&gt;

&lt;p&gt;I don't always stick to this schedule, but I try my best to do so. Now then, let's get to it!&lt;/p&gt;

&lt;h2&gt;
  
  
  Sunday, July 18th
&lt;/h2&gt;

&lt;p&gt;Sunday I published the 2nd issue of the &lt;a href="https://www.getrevue.co/profile/theryanfurrer/issues/coding-catchup-issue-2-693885" rel="noopener noreferrer"&gt;Coding Catchup Newsletter&lt;/a&gt; with help from &lt;a href="https://www.getrevue.co/" rel="noopener noreferrer"&gt;Revue&lt;/a&gt;! While I am still deciding what format I'd like to use with my newsletter, I believe the 2nd issue was much better than merely republishing my blog posts as an email - I think I can provide more value than that - what do you think?&lt;/p&gt;

&lt;h2&gt;
  
  
  Monday, July 19th
&lt;/h2&gt;

&lt;p&gt;Monday was a productive day, which was a nice way to kick off the week! I signed up for &lt;a href="https://cloudinary.com/" rel="noopener noreferrer"&gt;Cloudinary&lt;/a&gt; to host the images on my &lt;a href="https://furrever.wedding/" rel="noopener noreferrer"&gt;wedding website&lt;/a&gt;, so it is easier to serve the most appropriately sized images for anyone visiting the site. This should help site performance and save data for those on mobile phones.&lt;/p&gt;

&lt;p&gt;I also added my wedding site as a featured project to my &lt;a href="https://theryanfurrer.dev/#projects" rel="noopener noreferrer"&gt;portfolio&lt;/a&gt;. I think it's a complete site that shows off what I can do, and I'm proud of it!&lt;/p&gt;

&lt;p&gt;I finished up my night by studying React for 40 minutes on &lt;a href="https://www.udemy.com/course/react-redux/?utm_source=adwords&amp;amp;utm_medium=udemyads&amp;amp;utm_campaign=React_v.PROF_la.EN_cc.US_ti.7450&amp;amp;utm_content=deal4584&amp;amp;utm_term=_._ag_79286082406_._ad_532133511517_._kw__._de_c_._dm__._pl__._ti_dsa-774930034049_._li_9004513_._pd__._&amp;amp;matchtype=b&amp;amp;gclid=Cj0KCQjwl_SHBhCQARIsAFIFRVWCGPE14FkrzGOZX8uKX5oB5C_5RNlqElpY1QH08j-jzV9Ti2CUd-EaAu72EALw_wcB" rel="noopener noreferrer"&gt;Udemy&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tuesday, July 20th
&lt;/h2&gt;

&lt;p&gt;I originally planned to hit React hard, but due to my current work environment continually getting worse and my unhappiness increasing, I thought it wise to get my resume going. While I don't feel ready to begin applying to jobs, I could at least have the resume put together. I can fill in the details when I am ready to begin applying.&lt;/p&gt;

&lt;p&gt;Thank you, &lt;a href="https://twitter.com/jsjoeio" rel="noopener noreferrer"&gt;Joe Previte&lt;/a&gt;, for being a huge help! He helped take it from overwhelming to doable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wednesday, July 21st
&lt;/h2&gt;

&lt;p&gt;I took another night to work on my resume. I used &lt;a href="https://affinity.serif.com/en-us/publisher/" rel="noopener noreferrer"&gt;Affinity Publisher&lt;/a&gt; to design and develop it. If you are interested in learning more about how I did it, let me know!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F9eyxorzcyqfzhyepoyr2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F9eyxorzcyqfzhyepoyr2.jpg" alt="Ryan Furrer's resume draft" width="800" height="1035"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Thursday, July 22nd
&lt;/h2&gt;

&lt;p&gt;Finally, I completed my resume - except the part where it is complete lol. As I develop more resume-worthy projects, I'll update it to feature those, but for now I am pleased with how it looks. Before I closed my laptop, I started working on a new project I have in mind, but you will have to wait and see more in the future.&lt;/p&gt;

&lt;h2&gt;
  
  
  Friday, July 23rd
&lt;/h2&gt;

&lt;p&gt;Friday I put my previously mentioned project aside and began a different one - a fake eCommerce site that I'll be building with React. I started this while on a Discrod call with a friend in the UK who also needs to build something new for his portfolio. While he is well-versed in &lt;a href="https://angularjs.org/" rel="noopener noreferrer"&gt;Angular&lt;/a&gt; and a much more experienced developer than me, it was cool to build alongside someone like that.&lt;/p&gt;

&lt;p&gt;We bounced ideas off one another, and I definitely picked up a thing or two I can transfer into my own practices. We're trying to make co-building a regular thing to help us ship more projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Saturday, July 24th
&lt;/h2&gt;

&lt;p&gt;Saturday, I continued working on that new React project. Anything new is exciting, and I want to keep building with it! I want/need to watch more of the Udemy course, but simply trying new things was fun. However, I also continued watching the React course, because that's how I'll learn faster, I believe.&lt;/p&gt;

&lt;h2&gt;
  
  
  Moving Forward
&lt;/h2&gt;

&lt;p&gt;This week, I truly believe I can make significant progress with React. Getting exposed to it has opened my eyes to how powerful it can be, but also how much there is to learn...which could be overwhelming. I'm doing my best to push forward and continue building, rather than letting myself be intimidated.&lt;/p&gt;

&lt;p&gt;That's all I've got for last week! If you don’t already, I’d love you to follow my journey to becoming a web developer on &lt;a href="https://twitter.com/TheRyanFurrer" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;, where I’ve committed to and post updates daily! Come and say hi, I’d love to support you.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>productivity</category>
      <category>codenewbie</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Designing and Developing My Portfolio - v3</title>
      <dc:creator>Ryan Furrer</dc:creator>
      <pubDate>Sun, 25 Jul 2021 17:56:03 +0000</pubDate>
      <link>https://dev.to/ryandotfurrer/designing-and-developing-my-portfolio-v3-2ln3</link>
      <guid>https://dev.to/ryandotfurrer/designing-and-developing-my-portfolio-v3-2ln3</guid>
      <description>&lt;h2&gt;
  
  
  The Why
&lt;/h2&gt;

&lt;p&gt;I had previously built a decent portfolio, but with the "re-branding," which I recently, made, along with my re-focus on learning code, I thought it wise to create a new home on the Internet. Something I was proud of to house my work while learning more and prepare to apply for my first web development job.&lt;/p&gt;

&lt;p&gt;I already want to make changes to my site, but I * have to * concentrate elsewhere if I want to actually get a job in this area. Further refinements can be made in the future, but I can't let myself be distracted. In the end, it is useless to have a &lt;em&gt;nice&lt;/em&gt; portfolio, but nothing to fill it with.&lt;/p&gt;

&lt;p&gt;I say this because I don't think I'll ever feel 100% complete with my portfolio, but I can get it to the point where I'm content to share it with the world - so I've done exactly that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Portfolio Versions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  v1 - Published February 2019
&lt;/h3&gt;

&lt;p&gt;This was built about a month after I started learning HTML and CSS. It's nothing special, but it was the first web page I had built in full. None of the projects were ever completed, but this was the first thing I was excited to code. (link no longer available)&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://ryan-furrer-v2.netlify.app/" rel="noopener noreferrer"&gt;v2&lt;/a&gt; - Published in August 2019
&lt;/h3&gt;

&lt;p&gt;v2 was built about 6 months after the "completion" of v1. I learned a lot in this time, which, I believe, can be observed in the design language. Looking at it now, I see many things that need refinement, but I remember being pleased with the way this one came together at the time.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://theryanfurrer.dev/" rel="noopener noreferrer"&gt;v3&lt;/a&gt; - Brand new!
&lt;/h3&gt;

&lt;p&gt;v3 was recently completed and announced to the world on 7/2/21, which is &lt;em&gt;quite&lt;/em&gt; some time since August 2019. A lot has happened over the years, and I will not make excuses for my insufficient progress... I was simply not disciplined enough to do the work that needs to be done to change careers as I want.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1411129302662402052-897" src="https://platform.twitter.com/embed/Tweet.html?id=1411129302662402052"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1411129302662402052-897');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1411129302662402052&amp;amp;theme=dark"
  }



&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;HTML
As with everything I build from scratch, I like to focus on using semantic HTML, as it helps greatly with accessibility and organization. If you're not using semantic HTML in your projects, you're not helping anyone.&lt;/li&gt;
&lt;li&gt;CSS (SCSS)
I &lt;em&gt;love&lt;/em&gt; using &lt;a href="https://sass-lang.com/" rel="noopener noreferrer"&gt;SCSS&lt;/a&gt; and it's definitely my preferred method for writing CSS these days. If you're not familiar with SCSS, it "...is a stylesheet language that’s compiled to CSS. It allows you to use variables, nested rules, mixins, functions, and more, all with a fully CSS-compatible syntax."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That said, if you are new to front-end work, please do your due diligence and learn regular CSS before anything else in the CSS world. It is powerful and is a prerequisite, in my opinion, for any CSS frameworks, stylesheet languages like SASS, etc.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JavaScript (future endeavors)
While I am still learning JavaScript, I have a few ideas on how to implement it in my site. A theme-switcher is #1, but also some fun easter eggs!&lt;/li&gt;
&lt;li&gt;Deployed on Netlify
I &lt;em&gt;love&lt;/em&gt; &lt;a href="https://www.netlify.com/" rel="noopener noreferrer"&gt;Netlify&lt;/a&gt; for so many reasons, but the #1 reason is how simple and quick it is to get a new project deployed onto the web. There are other options, like &lt;a href="https://vercel.com/" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt;, but for now I am loyal to Netlify.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Design
&lt;/h2&gt;

&lt;p&gt;When designing my portfolio, I knew that I wanted something clean, but not necessarily minimal. I love minimalist designs, but I didn't want that to limit my portfolio. I also knew I wanted to refine the card design I used on &lt;a href="https://coding-catchup-v2.netlify.app/" rel="noopener noreferrer"&gt;Coding Catchup v2&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.loom.com/share/7c830247c89c401f81dd67754f01f285" rel="noopener noreferrer"&gt;&lt;br&gt;
    &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.loom.com%2Fsessions%2Fthumbnails%2F7c830247c89c401f81dd67754f01f285-with-play.gif" width="800" height="400"&gt;&lt;br&gt;
Watch on Loom&lt;br&gt;
&lt;/a&gt; - Hover effect on v2 of Coding Catchup&lt;/p&gt;

&lt;p&gt;So first I thought about what colors I would like to use...&lt;/p&gt;

&lt;h3&gt;
  
  
  The Colors
&lt;/h3&gt;

&lt;p&gt;My original goal was to identify a brand color for me and one for my tech blog Coding Catchup. I chose purple for myself as an evolution of the indigo color that I featured in the previous version of my portfolio.&lt;/p&gt;

&lt;p&gt;v2 main color: #646FCB&lt;br&gt;
v3 main color: #AD96E9&lt;/p&gt;

&lt;p&gt;As for Coding Catchup, I've had my eyes on this sort of green-blue color for a while and decided to run with it.&lt;/p&gt;

&lt;p&gt;v1 main color: #3FC8A7&lt;br&gt;
v3 main color: #96E9D8&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fw30bgiwzfa5q5mtlsgbb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fw30bgiwzfa5q5mtlsgbb.png" alt="Color Palette for my portfolio site and Coding Catchup" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Little did I realize these two colors actually work well together, and the Coding Catchup green is now featured on my portfolio site as an accent color. I think of this as a type of harmonious binding in my two main projects - I like it!&lt;/p&gt;

&lt;h3&gt;
  
  
  The Content
&lt;/h3&gt;

&lt;p&gt;Content, layout and structure are pretty straightforward. As a single-page app, I simply have to link to different IDs on the page, like Projects, About and Contact Me.&lt;/p&gt;

&lt;p&gt;I chose to place my projects first, so it's the first thing (technically second thing) that someone notices when visiting my site. In the Projects section, there are cards containing information about each of my projects. At the time of writing, I am featuring 3 Projects: &lt;a href="http://codingcatchup.com/" rel="noopener noreferrer"&gt;Coding Catchup&lt;/a&gt;, the &lt;a href="http://theryanfurrer.dev/" rel="noopener noreferrer"&gt;Portfolio&lt;/a&gt; itself, and my &lt;a href="http://furrever.wedding/" rel="noopener noreferrer"&gt;Wedding&lt;/a&gt; website.&lt;/p&gt;

&lt;p&gt;Next up is the “About” section where visitors can learn more about me - pretty self-explanatory! I’m not good at writing about myself, so this will undergo some revisions for sure.&lt;/p&gt;

&lt;p&gt;Lastly, is the “Contact Me” section. This is simply a contact form connected via Netlify Forms, which again makes it &lt;em&gt;so simple&lt;/em&gt;. Netlify even has integrated spam protection, which, while I am sure it won't stop every bit, is good enough for me at the moment.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Assembly
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Content First
&lt;/h3&gt;

&lt;p&gt;As I worked through this, I had a basic design in mind, so it was easy for me to insert all HTML and style later. Having said that, it hurts me to continue adding content when my navigation bar still looks like a standard list. But I trusted the process, and frankly, it was pretty fast... not that the site is huge lol.&lt;/p&gt;

&lt;p&gt;After putting all the content together, it was time to make it look better.&lt;/p&gt;

&lt;h3&gt;
  
  
  Styling Second
&lt;/h3&gt;

&lt;p&gt;Again, coming into this with an idea of a design and color scheme helped immensely. Hell, I had already picked out my colors and fonts, so I got to work creating my SCSS variables, linking to Google Fonts for &lt;a href="https://fonts.google.com/specimen/Poppins?query=popp" rel="noopener noreferrer"&gt;Poppins&lt;/a&gt; and &lt;a href="https://fonts.google.com/specimen/Open+Sans?query=open+sa" rel="noopener noreferrer"&gt;Open Sans&lt;/a&gt;, and prettying up my new portfolio. Oh, and I of course created a CSS Reset using &lt;a href="https://piccalil.li/" rel="noopener noreferrer"&gt;Andy Bell's&lt;/a&gt; &lt;a href="https://github.com/andy-piccalilli/modern-css-reset" rel="noopener noreferrer"&gt;Modern CSS Reset.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When styling the site, as with most other projects, I started with the mobile site and then built larger from there. For me, I prefer starting small and building out for a few reasons.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Mobile traffic is &lt;em&gt;much&lt;/em&gt; higher than desktop traffic, so I had to make sure everything looked good there first.&lt;/li&gt;
&lt;li&gt;Mobile layouts are typically clear and straight forward. It's just a column of content, whereas larger screens, including tablets, laptops and desktops, allow you to have a little more fun with your designs and layouts.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;From there, I made sure everything was responsive and looked good across as many devices and browsers worth checking. Currently, the site is simple, with only one media query for screen size breakpoints.&lt;/p&gt;

&lt;h3&gt;
  
  
  Finishing Touches
&lt;/h3&gt;

&lt;p&gt;The last thing I've done was add what I like to think of as finishing touches - things that merely make for a nicer experience. These are things like the &lt;code&gt;:hover&lt;/code&gt; styles on links, navigation items, my logo, etc., but also the outline on my projects and the contact form. Just some things to add a sense of polish to the site.&lt;/p&gt;

&lt;p&gt;Although I am not 100% satisfied with it, I have to build new projects to be featured on my site! In my opinion, the portfolio should grow with the developer, and so far I think v3 shows I've grown... even a little.&lt;/p&gt;

&lt;h2&gt;
  
  
  Extras
&lt;/h2&gt;

&lt;p&gt;After the main site was built, there were just a few things left to do, these included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Build a success page users see after submitting a message via the form.&lt;/p&gt;

&lt;p&gt;This was done easily with the Netlify docs on their &lt;a href="https://docs.netlify.com/forms/setup/" rel="noopener noreferrer"&gt;form setup&lt;/a&gt;. It isn't anything fancy, but at least it matches the rest of the site's styles.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a "Links" page&lt;/p&gt;

&lt;p&gt;Again, a very simple page that I wanted to create to easily have all my links in one place. There are services out there that allow you to do this without code, like &lt;a href="http://bio.link/" rel="noopener noreferrer"&gt;bio.link&lt;/a&gt;, but I wanted it to match the look and feel of the rest of the website, and it's easy enough to do it myself.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Forward subdomains to respective pages&lt;/p&gt;

&lt;p&gt;Again, it's simple, but something that makes it easier to remember different links and seems a little more professional - in my opinion.&lt;/p&gt;

&lt;p&gt;I have 3 domains currently forwarded:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://blog.theryanfurrer.dev/" rel="noopener noreferrer"&gt;blog.theryanfurrer.dev&lt;/a&gt; points to &lt;a href="http://codingcatchup.com/" rel="noopener noreferrer"&gt;codingcatchup.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://links.theryanfurrer.dev/" rel="noopener noreferrer"&gt;links.theryanfurrer.dev&lt;/a&gt; points to &lt;a href="http://theryanfurrer.dev/pages/links.html" rel="noopener noreferrer"&gt;theryanfurrer.dev/pages/links.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://timeline.theryanfurrer.dev/" rel="noopener noreferrer"&gt;timeline.theryanfurrer.dev&lt;/a&gt; points to my &lt;a href="https://www.polywork.com/theryanfurrer" rel="noopener noreferrer"&gt;Polywork&lt;/a&gt; profile&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;That's all I've got for now. I hope you enjoyed reading about my process, and I hope you choose to return for more! Feel free to contact me &lt;a href="https://theryanfurrer.dev/index.html#contact-me" rel="noopener noreferrer"&gt;via my website&lt;/a&gt; or on &lt;a href="https://twitter.com/TheRyanFurrer" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; if you have any questions or want to say hello.&lt;/p&gt;

&lt;p&gt;There is always more work to be done, but only so many hours in the day! My next project (at the moment) is an e-commerce site built with React. This is new for me, but I am enjoying it so far. Subscribe for more weekly updates, project summaries, and tech articles, and/or follow me on Twitter!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>html</category>
      <category>css</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>Weekly Summary: 7/11 - 7/17</title>
      <dc:creator>Ryan Furrer</dc:creator>
      <pubDate>Sun, 18 Jul 2021 14:29:03 +0000</pubDate>
      <link>https://dev.to/ryandotfurrer/weekly-summary-7-11-7-17-338i</link>
      <guid>https://dev.to/ryandotfurrer/weekly-summary-7-11-7-17-338i</guid>
      <description>&lt;p&gt;Welcome to the fourth installment in my weekly summary series, where I give quick recaps of what I worked on the previous week to keep myself accountable.&lt;/p&gt;

&lt;p&gt;First, let's go over my weekly schedule:&lt;/p&gt;

&lt;h2&gt;
  
  
  Current Weekly Schedule
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Monday - Thursday&lt;/strong&gt;: Study from 6:00pm - 8:00pm-ish.
Sometimes I go until 9pm depending on how I feel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Friday&lt;/strong&gt;: Study from 1:00pm - 4:00pm
I like to give myself more time to study when I can, and working half-days on Fridays for my current job leaves a significant time for extra coding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Saturday&lt;/strong&gt;: Study from 7:30am - 9:30am
I give myself at least 2 hours on Saturdays, even though I often get more time in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sunday&lt;/strong&gt;: Day off
This is my day to recover, get energized and prepare for the coming week!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All this works with my personal goal of studying / coding 2 hours a day. I would like to do more, but I don't have the mental bandwidth to do more, usually, throughout the week.&lt;/p&gt;

&lt;p&gt;I don't always stick to this schedule, but I try my best to do so.&lt;br&gt;
Now then, let's get to it!&lt;/p&gt;

&lt;h2&gt;
  
  
  Sunday, July 11th
&lt;/h2&gt;

&lt;p&gt;Completed the code re-factoring of my &lt;a href="http://furrever.wedding/" rel="noopener noreferrer"&gt;wedding website&lt;/a&gt;. I normally don't like to do work on Sundays, but with last week being a light week of coding, I believed it was wise to add the extra day.&lt;/p&gt;

&lt;h2&gt;
  
  
  Monday, July 12th
&lt;/h2&gt;

&lt;p&gt;Putzed around with Gatsby plugins and failed to get one working that would allow me to embed tweets on &lt;a href="http://codingcatchup.com/" rel="noopener noreferrer"&gt;Coding Catchup&lt;/a&gt; - I will try this again in the near future!&lt;/p&gt;

&lt;p&gt;Published last week's Weekly Summary on &lt;a href="http://codingcatchup.com/" rel="noopener noreferrer"&gt;Coding Catchup&lt;/a&gt; and &lt;a href="http://dev.to/"&gt;Dev.to&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Worked on a new blog post about building my &lt;a href="http://theryanfurrer.dev/" rel="noopener noreferrer"&gt;portfolio&lt;/a&gt; - coming soon!&lt;/p&gt;

&lt;h2&gt;
  
  
  Tuesday, July 13th
&lt;/h2&gt;

&lt;p&gt;Studied React&lt;/p&gt;

&lt;p&gt;Added more content to my &lt;a href="http://furrever.wedding/" rel="noopener noreferrer"&gt;wedding website&lt;/a&gt; - a &lt;a href="https://www.honeyfund.com/" rel="noopener noreferrer"&gt;honeymoon fund&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fkhkjzk57px14n2ctgouj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fkhkjzk57px14n2ctgouj.png" alt="Screenshot of https://furrever.wedding/pages/details.html" width="800" height="318"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Wednesday, July 14th
&lt;/h2&gt;

&lt;p&gt;Studied React&lt;/p&gt;

&lt;h2&gt;
  
  
  Thursday, July 15th
&lt;/h2&gt;

&lt;p&gt;Brainstormed ideas for React projects.&lt;br&gt;
While this could be an easy thing to do and simply commit to building the "go-to" projects like to-do lists, calculators, etc., I want to do more than that...&lt;/p&gt;

&lt;p&gt;That being said, I also need to start building and cannot get caught in "tutorial or course hell." That is, merely consuming content on &lt;em&gt;how&lt;/em&gt; to build things, but never actually doing it.&lt;/p&gt;

&lt;p&gt;I also squeezed in some studying of React - I found a free resource by &lt;a href="https://twitter.com/kentcdodds" rel="noopener noreferrer"&gt;Kent C. Dodds&lt;/a&gt; who created the acclaimed &lt;a href="https://epicreact.dev/" rel="noopener noreferrer"&gt;Epic React&lt;/a&gt; so I thought I'd give it a shot. This is hosted on &lt;a href="http://egghead.io/" rel="noopener noreferrer"&gt;egghead.io&lt;/a&gt; - "&lt;a href="https://egghead.io/courses/the-beginner-s-guide-to-react" rel="noopener noreferrer"&gt;The Beginner's Guide to React&lt;/a&gt;" - I only just started, but am expecting to get through it all early next week!&lt;/p&gt;

&lt;h2&gt;
  
  
  Friday, July 16th
&lt;/h2&gt;

&lt;p&gt;Friday was a light night - I had a hectic week and needed some downtime with my fiancée. Regardless, I still added some more content to my wedding website - this time it was the hotel information for our guests! I think the site is 99.9% complete and can't see myself making radical changes or adding a ton more to it. I had other wedding stuff to take care of this night, which added to the light night of coding.&lt;/p&gt;

&lt;p&gt;Today also concluded my 2nd stint of working in &lt;a href="http://dip.chat/" rel="noopener noreferrer"&gt;dip.chat&lt;/a&gt; - an accountability group for web developers built by &lt;a href="https://twitter.com/jsjoeio/status/1416054213809901568?s=20" rel="noopener noreferrer"&gt;Joe Previte&lt;/a&gt;. I cannot recommend dip.chat enough - or even just having an accountability-buddy - some way to keep yourself accountable has been &lt;em&gt;huge&lt;/em&gt; for me these last 2 months.&lt;/p&gt;

&lt;h2&gt;
  
  
  Saturday, July 17th
&lt;/h2&gt;

&lt;p&gt;Finished writing up this blog post and scheduled it for publishing.&lt;br&gt;
Wrote out my weekly newsletter, which I am still experimenting with. I am trying out a different format this week, rather than simply making the body of email contain this same blog post.&lt;/p&gt;

&lt;p&gt;I also continued to work on my blog post about building my new portfolio. I ran out of time to study React, but there is always next week!&lt;/p&gt;

&lt;h2&gt;
  
  
  Moving Forward
&lt;/h2&gt;

&lt;p&gt;This week I am trying to dive deeper into React. I'm almost done reviewing what I had learned previously in my &lt;a href="https://www.udemy.com/course/react-redux/" rel="noopener noreferrer"&gt;Udemy course&lt;/a&gt; so that I feel more confident moving forward in it. I am also racking my brain for websites/apps that I could begin building to create not only portfolio projects, but eventually turn them into real products.&lt;/p&gt;

&lt;p&gt;As my former passion in my life, I want to build something for musicians. It would be so fulfilling for me to provide value for the friends and colleagues who have helped me along the way by eliminating a pain-point for them. We'll see what happens in the coming months!&lt;/p&gt;

&lt;p&gt;If you don’t already, I’d love you to follow my journey to becoming a web developer on &lt;a href="https://twitter.com/TheRyanFurrer" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; where I’ve committed to and post updates daily! Come and say hi, I’d love to support you.&lt;/p&gt;

</description>
      <category>100daysofcode</category>
      <category>codenewbie</category>
      <category>productivity</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Weekly Summary: 7/4 - 7/10</title>
      <dc:creator>Ryan Furrer</dc:creator>
      <pubDate>Mon, 12 Jul 2021 21:28:44 +0000</pubDate>
      <link>https://dev.to/ryandotfurrer/weekly-summary-7-4-7-10-1hd4</link>
      <guid>https://dev.to/ryandotfurrer/weekly-summary-7-4-7-10-1hd4</guid>
      <description>&lt;p&gt;Welcome to the 3rd installment in my "Weekly Summary" series where I provide quick recaps for what I worked on the previous week to help keep myself accountable. &lt;/p&gt;

&lt;p&gt;First, let's go over my weekly schedule:&lt;/p&gt;

&lt;h2&gt;
  
  
  Current Weekly Schedule
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Monday - Thursday&lt;/strong&gt;: Study from 6:00pm - 8:00pm-ish. 
I'll go until 9 depending on how I'm feeling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Friday&lt;/strong&gt;: Study from 1:00pm - 4:00pm
I like to give myself more time to study when I can and working half-day Fridays for my current job is a great way to get in some extra time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Saturday&lt;/strong&gt;: Study from 7:30am - 9:30am
I give myself at least 2 hours on Saturdays even though I can often get in more time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sunday&lt;/strong&gt;: Day off
This is my day to recoup, get energized, and prepare for the coming week!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This all works with my personal goal of studying/coding 2 hours per day. I would love to do more but I don't have the mental bandwidth throughout the week to do more, typically. &lt;/p&gt;

&lt;p&gt;I don't always get to stick to this schedule but I try my best to do so.&lt;br&gt;
Now then, let's get to it!&lt;/p&gt;
&lt;h2&gt;
  
  
  Monday, July 5th
&lt;/h2&gt;

&lt;p&gt;Monday I was off as Independence Day was observed and it's a national holiday in the US. I caught up on some emails/newsletters that were piling up in my inbox, posted last week's "Weekly Summary," and sent out my first newsletter via Revue! While this contained last week's "Weekly Summary" and I don't have much of &lt;/p&gt;

&lt;p&gt;I also built our a link sharing page on my website that I have placed in my social media channels that links to my portfolio, blog, twitter, etc.&lt;/p&gt;
&lt;h2&gt;
  
  
  Tuesday, July 6th
&lt;/h2&gt;

&lt;p&gt;Friends from out of state were in town so I took the night off and enjoyed dinner and catching up with them. While no coding was done, I thoroughly enjoyed the White Castle we ate 😋&lt;/p&gt;
&lt;h2&gt;
  
  
  Wednesday, July 7th
&lt;/h2&gt;

&lt;p&gt;Wednesday was a bit tough for me...it was not the night I planned on having as I had to stop what I was doing to be there for my fiancée through a panic attack which also means being there for her the rest of the night.&lt;/p&gt;

&lt;p&gt;Before that, however, I got in some studying React. Not a very productive night but things happen and you just have to adapt.&lt;/p&gt;
&lt;h2&gt;
  
  
  Thursday, July 8th
&lt;/h2&gt;

&lt;p&gt;Thursday was fun! I got new switches for my mechanical keyboard so I installed those before diving into studying React. &lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1413276585554333702-48" src="https://platform.twitter.com/embed/Tweet.html?id=1413276585554333702"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1413276585554333702-48');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1413276585554333702&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  Friday, July 9th
&lt;/h2&gt;

&lt;p&gt;Friday was a fun day for me! I messed around in React and Gatsby a bit to learn it more in-depth. While I don't plan on using Gatsby for future projects on my portfolio, Coding Catchup is built on it so the more I learn the better, in my opinion.&lt;/p&gt;

&lt;p&gt;I also created my own blog cover images to be more personalized. Though basic, I'd prefer using my own that I created in Affinity Designer. Previously I was using &lt;a href="https://coverview.vercel.app/" rel="noopener noreferrer"&gt;CoverView&lt;/a&gt; by &lt;a href="https://rutikwankhade.dev/" rel="noopener noreferrer"&gt;Rutik Wankhade&lt;/a&gt; which worked well, but I wanted to create something I had total control over.&lt;/p&gt;

&lt;h2&gt;
  
  
  Saturday, July 10th
&lt;/h2&gt;

&lt;p&gt;On Saturday I had to do some updating to my Wedding website, however, upon opening VS Code I saw how messy everything was. The HTML was not as semantic as I'd like and the SCSS was a garbled mess, so I chose to rewrite it from the ground up!&lt;/p&gt;

&lt;p&gt;I spent Saturday only worrying about the mobile site as making it responsive wouldn't take too much. &lt;/p&gt;

&lt;h2&gt;
  
  
  Moving Forward
&lt;/h2&gt;

&lt;p&gt;I have to finish my wedding website, that is first and foremost, as our wedding is in October and invites are going out &lt;em&gt;very&lt;/em&gt; soon. Other than that I plan on doing some more writing this week and actually diving deep into React again, life-permitting.&lt;/p&gt;

&lt;p&gt;If you don’t already, I’d love for you to follow my journey to becoming a web developer on &lt;a href="https://twitter.com/TheRyanFurrer" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; where I’ve committed to and post updates daily! Come and say hi, I’d love to support you.&lt;/p&gt;

</description>
      <category>100daysofcode</category>
      <category>codenewbie</category>
      <category>productivity</category>
      <category>devjournal</category>
    </item>
  </channel>
</rss>
