<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[A Blog by Ty]]></title><description><![CDATA[This is a blog about my journey and adventures in software development, technology, and continued learning.]]></description><link>https://blog.tylerevan.dev</link><generator>RSS for Node</generator><lastBuildDate>Tue, 21 Apr 2026 18:50:58 GMT</lastBuildDate><atom:link href="https://blog.tylerevan.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Five Years Into My Career]]></title><description><![CDATA[This one is going to be pretty straightforward. I am now five years into my career as a software engineer, and there are some lessons I have learned that I think could benefit others who are entering this field or are only a few years in.
My Backgrou...]]></description><link>https://blog.tylerevan.dev/five-years-into-my-career</link><guid isPermaLink="true">https://blog.tylerevan.dev/five-years-into-my-career</guid><category><![CDATA[Career]]></category><category><![CDATA[learning]]></category><category><![CDATA[code]]></category><dc:creator><![CDATA[Tyler Boyd]]></dc:creator><pubDate>Wed, 31 Jul 2024 20:19:46 GMT</pubDate><content:encoded><![CDATA[<p>This one is going to be pretty straightforward. I am now five years into my career as a software engineer, and there are some lessons I have learned that I think could benefit others who are entering this field or are only a few years in.</p>
<h3 id="heading-my-background"><strong>My Background</strong></h3>
<p>Before we go further into some of the lessons I've learned, I want to bring you up to speed on how I got here. I have been playing video games and building computers since I was seven or eight years old. I took my first coding class in high school, a semester class learning Java, I believe. When I got to college, I couldn't decide what I wanted to do and ended up graduating with a degree in business administration. A couple of years into the job force, I missed coding and thought I'd give that a shot since I wasn't super into my data entry job at a flooring company. I didn't have the ability at that time to go back to college for a computer science degree, so I went the route of a twenty-four-week coding bootcamp. Over the course of those weeks, I gained a working understanding of how to create websites that I would describe, looking back, as the bare minimum.</p>
<p>I spent the next year or so trying to teach myself the things that the bootcamp did not. They taught me how, but we didn't have the time to learn why. Seven months after I graduated from the bootcamp, I got my first job as a software engineer, working at a company local to Kansas City. My daily work involved using HTML, CSS, and JavaScript to build small improvements to our external website. I worked under a senior engineer, alongside a small team of five. I continued to try to learn and grow as I went, but I got comfortable quickly with what I was doing. This leads to the first of the lessons I have learned in my five years as a developer.</p>
<h3 id="heading-the-why-actually-matters"><strong>The Why Actually Matters</strong></h3>
<p>The first lesson I want to discuss is that the why actually matters. I was comfortable in my first two years just knowing that I knew how to build a website. I knew how to make it look good. I knew how to make it do stuff and how to allow users to interact with my websites. I knew that if I copied in some code, I could connect my website to a database. But as I grew more comfortable with how I could accomplish these things, I realized that I didn't know why my code did certain things. I didn't know how the internet worked or what JavaScript was doing under the hood. I didn't understand what happened when people landed on my website. I knew what they'd see and what they'd be able to do, but I did not know what was actually happening. Upon this realization, I came to the decision that I didn't care. I didn't care that I didn't understand why. I knew how, and that was enough to get me a good job to pay the bills.</p>
<p>Ignorance was bliss, but it was short-lived. As I got further into different languages, joined different communities, and took in different content in the programming realm, I realized quickly that at my current trajectory, my skills and abilities were permanently capped by my lack of understanding of why. I learned that eventually, the why and the how to do certain things were tied closely together. This was a hard lesson, but I realized that at that moment in time, I was a bad programmer. But that's okay because everybody is bad when they start. But I was capping my growth by refusing to dive into the why. In order to get good, you have to realize first that you are bad. And that's why this lesson was so vital to learn. So I started learning why. Instead of watching tutorial videos only, I started reading documentation. Instead of only copying and pasting, I started writing stuff on my own, failing and growing the whole way. Instead of thinking that the understanding of data structures and algorithms was not relevant to actually doing the job, I started pursuing an understanding of computer science.</p>
<p>I still have a long way to go. I still have understanding to build up. But I'm better today than I was yesterday. I know more about the why now than I did before, and that has made me a better programmer. Turns out, understanding how a computer handles memory does, in fact, allow you to create better software.</p>
<h3 id="heading-new-does-not-mean-best"><strong>New Does Not Mean Best</strong></h3>
<p>The second lesson is that new stuff is not always better. Now, this one can be applied outside of software and our jobs, but I'm going to stick to that context to the best of my ability.</p>
<p>I have struggled my whole adult life with always needing the new thing. I needed the new MacBook, the new iPhone, the new TV, the new car. And that consumeristic attitude bled into my programming. Every couple of hours, a new JavaScript framework comes out. And I would rewrite apps and sites in the new frameworks because it was shiny and new and better. And sometimes, new stuff is just fundamentally better. But I turned into the guy that's always changing my toolsets to use the newest stuff. Because new is always better. Except, it's not. Us web devs are now realizing that client-side heavy single-page applications are not actually always what is best. Sometimes, instead of using React and Redux, several different libraries, and a few UI plugins, we can actually just serve HTML with a simple node server. Now, depending on what you're doing, the full framework solution is needed. But if we always use what's new just for the sake of it, we are going to have a ton of bloated, over-engineered websites that destroy the experience of the user.</p>
<p>The lesson is when new things come out, we should try them. Install the new tool, download the new language, create a todo app with the new framework. Explore the new things, and to call back to the first lesson, maybe even dig into what makes the thing work. But then, make a decision on whether or not to bring that new thing into your toolset based on parameters outside of just the fact that it's new. Decide on those parameters for yourself. Maybe it's speed, memory usage, developer experience. Just don't let your deciding factor be how new something is. Because you can make the same great CLI tool coding on a 10-year-old laptop running Arch Linux that you can on a brand new M3 MacBook Pro. You can make a great personal website using React. But you can make a great personal website using HTMX and Go.</p>
<p>The summary of this lesson is to bring in more parameters to your decision-making on a tool or language than just how new and fancy it is. Because sometimes, Neovim can write your software just as well as VSCode with 234 plugins.</p>
<h3 id="heading-in-conclusion"><strong>In Conclusion</strong></h3>
<p>This got longer than I was expecting, so I'm going to put a few more lessons I've learned into a second post. I hope that these lessons benefited someone.</p>
<p>To the person just learning how to code - it's okay to not know everything. Everyone starts knowing nothing. Just write some code, and understand a little more today than you did yesterday. Enjoy the journey.</p>
<p>To the people who are a few years in - If you're like me, and somewhere between your first lines of code and now, you got complacent and stopped learning, don't feel bad. If you are okay where you are, that's alright. Enjoy the space, and make yourself some good cash. But if you're realizing you want to dig deeper, go after it! Go figure out some things you don't actually know, and learn something.</p>
<p>To the people that have more experience than me - I'd appreciate your input. If you can give advice and criticism without being rude or gatekeeping, please give me that advice. I have so much to learn, and I am always open to those who are paving the path ahead of me sending some wisdom my way.</p>
<p>Thanks for reading!</p>
]]></content:encoded></item><item><title><![CDATA[Creating the Perfect SvelteKit Template Project]]></title><description><![CDATA[Why Use GitHub Template Repos?
As a freelance web developer, I searched for a while to find a way to quickly spin up new web projects. Most of my clients require fully custom web applications, so it became apparent pretty quickly that I needed to spe...]]></description><link>https://blog.tylerevan.dev/creating-the-perfect-sveltekit-template-project</link><guid isPermaLink="true">https://blog.tylerevan.dev/creating-the-perfect-sveltekit-template-project</guid><category><![CDATA[Svelte]]></category><category><![CDATA[Tailwind CSS]]></category><category><![CDATA[GitHub]]></category><category><![CDATA[templates]]></category><category><![CDATA[JavaScript]]></category><dc:creator><![CDATA[Tyler Boyd]]></dc:creator><pubDate>Thu, 20 Jul 2023 17:40:56 GMT</pubDate><content:encoded><![CDATA[<h3 id="heading-why-use-github-template-repos">Why Use GitHub Template Repos?</h3>
<p>As a freelance web developer, I searched for a while to find a way to quickly spin up new web projects. Most of my clients require fully custom web applications, so it became apparent pretty quickly that I needed to speed up the startup process on a new project. Sure, I could write a script that scaffolds out a new project, but when I found out about GitHub template repos, it was obvious that for me and my work, it was the way to go. If you are unfamiliar, you can check out GitHub's documentation on the feature <a target="_blank" href="https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-template-repository">here</a>. Essentially, you can create a repository as you normally would, with all the source code for your project, and then mark the repository as a template. You and others can then go to that repo, and create a new repository that is a copy of that repo you made. This means you set up the perfect project template once, update it in one place, and use it as many times as you want.</p>
<h3 id="heading-why-use-sveltekit">Why Use SvelteKit?</h3>
<p><a target="_blank" href="https://kit.svelte.dev/">SvelteKit</a> is an open-source meta-framework that uses Svelte and Vite to allow developers to create web applications quickly and efficiently, with an excellent developer experience, and enough built-in features to make it powerful, but still light and flexible. Svelte places immense focus on the "HTML first, JavaScript if needed" approach to web development, which by default means we are sending smaller bundles to the client. SvelteKit is an open-source project and is backed by a very responsive core group of maintainers. It is also supported directly by Vercel, which makes deploying your apps as simple as possible (which we'll get to later). This makes SvelteKit a fantastic choice for freelance web developers.</p>
<h3 id="heading-getting-our-template-started">Getting Our Template Started</h3>
<p>We will start by creating a brand new SvelteKit app locally (for this, you'll need <a target="_blank" href="https://nodejs.org/en">node and npm</a> installed on your machine). Run the following command in your terminal.</p>
<pre><code class="lang-bash">npm create svelte@latest name-of-your-app
</code></pre>
<p>I named my app <code>sveltekit-template</code>, but feel free to be more original.</p>
<p>You will then be walked through a short setup cli. When asked about a Svelte app template, we'll choose <code>'Skeleton project'</code>. Next, we'll decide to use type checking with JavaScript with JSDoc comments implementation (which is recommended by the project creators if you are needing type checking). For the additional options choices, I use prettier for code formatting but feel free to use your discretion here.</p>
<p>To finish our initial setup, we'll run the following commands in our terminal.</p>
<pre><code class="lang-bash"><span class="hljs-built_in">cd</span> name-of-your-app
npm install
git init &amp;&amp; git add -A &amp;&amp; git commit -m <span class="hljs-string">"Initial Commit"</span>
npm run dev -- --open
</code></pre>
<p>If we have successfully set up this project, you should now have a barebones SvelteKit app running on localhost:5173. We will not be going into depth on how to develop in SvelteKit in this post, because that is for another post (stay tuned for that one).</p>
<h3 id="heading-adding-tailwindcss">Adding TailwindCSS</h3>
<p>Regardless of the continued debate on tech Twitter about the usefulness of Tailwind, I truly enjoy the experience of using it in my projects. Style configurations are easy to set up, and the utility classes are easy to remember, easy to use, and allow me to style components quicker than any other CSS-based tool I have used. You can learn more about TailwindCSS <a target="_blank" href="https://tailwindcss.com/">here</a>!</p>
<p>To start configuring Tailwind in our template, start by running the following in your terminal, from the root directory of your project.</p>
<pre><code class="lang-bash">npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p
</code></pre>
<p>This will install a few packages we will need and creates two new files in our project root.</p>
<p>We will next need to edit <code>the svelte.config.js</code> file, found at the root of your project.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> adapter <span class="hljs-keyword">from</span> <span class="hljs-string">'@sveltejs/adapter-auto'</span>;
<span class="hljs-comment">/* add this --&gt; */</span> <span class="hljs-keyword">import</span> { vitePreprocess } <span class="hljs-keyword">from</span> <span class="hljs-string">'@sveltejs/kit/vite'</span> 

<span class="hljs-comment">/** <span class="hljs-doctag">@type <span class="hljs-type">{import('@sveltejs/kit').Config}</span> </span>*/</span>

<span class="hljs-keyword">const</span> config = {
    <span class="hljs-attr">kit</span>: {
        <span class="hljs-attr">adapter</span>: adapter()
    },
    <span class="hljs-comment">/* add this --&gt; */</span> preprocess: vitePreprocess()
};

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> config;
</code></pre>
<p>Next, we will update the <code>tailwind.config.js</code> file, adding our file types to the content property.</p>
<pre><code class="lang-javascript"><span class="hljs-comment">/** <span class="hljs-doctag">@type <span class="hljs-type">{import('tailwindcss').Config}</span> </span>*/</span>
<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> {
  <span class="hljs-attr">content</span>: [<span class="hljs-string">'./src/**/*.{html, js, svelte, ts}'</span>],
  <span class="hljs-attr">theme</span>: {
    <span class="hljs-attr">extend</span>: {},
  },
  <span class="hljs-attr">plugins</span>: [],
}
</code></pre>
<p>We are almost ready to use Tailwind! The last thing to do before we test it out, we need to create a new file called <code>app.css</code> in the <code>/src</code> directory. Add the following code to that file.</p>
<pre><code class="lang-css"><span class="hljs-keyword">@tailwind</span> base;
<span class="hljs-keyword">@tailwind</span> components;
<span class="hljs-keyword">@tailwind</span> utilities;
</code></pre>
<p>We are ready to test our configuration! Create a file called <code>+layout.svelte</code> in the <code>/src/routes</code> directory. Add the following code to that file.</p>
<pre><code class="lang-svelte"><span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span></span><span class="javascript">
    <span class="hljs-keyword">import</span> <span class="hljs-string">"../app.css"</span>
</span><span class="xml"><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>

<span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">h3</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"text-blue-600"</span>&gt;</span>This should be blue!<span class="hljs-tag">&lt;/<span class="hljs-name">h3</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>

<span class="hljs-tag">&lt;<span class="hljs-name">slot</span> /&gt;</span></span>
</code></pre>
<p>Now, we can go ahead and run our app! Run the following command, and go to localhost:5173.</p>
<pre><code class="lang-bash">npm run dev
</code></pre>
<p>If the text we added at the top of the page is now blue, you have correctly set up TailwindCSS! Important to note, due to how CSS is handled in SvelteKit, we only have to import the <code>app.css</code> file in the layout. All pages you create that use that layout (which will be all new pages by default) will automatically have tailwind imported through that layout files import statement.</p>
<h3 id="heading-final-tweaks-to-the-template">Final Tweaks To The Template</h3>
<p>The last thing I did before turning this project into a GitHub template repo, was just make a few tweaks to SvelteKit to make it even friendlier to use.</p>
<p>First, inside the <code>/src/lib</code> directory, I deleted the <code>index.js</code> file they put there as a placeholder. I then added a components directory and a services directory there. I placed <code>README.md</code> files in these directories so git would pick them up.</p>
<p>Finally, I updated the <code>svelte.config.js</code> and the <code>jsconfig.json</code> files to handle my preferred alias overwrites.</p>
<pre><code class="lang-javascript"><span class="hljs-comment">/* svelte.config.js */</span>

<span class="hljs-keyword">import</span> adapter <span class="hljs-keyword">from</span> <span class="hljs-string">'@sveltejs/adapter-auto'</span>;
<span class="hljs-keyword">import</span> { vitePreprocess } <span class="hljs-keyword">from</span> <span class="hljs-string">'@sveltejs/kit/vite'</span>;
<span class="hljs-keyword">import</span> path <span class="hljs-keyword">from</span> <span class="hljs-string">'path'</span>;

<span class="hljs-comment">/** @type {import('@sveltejs/kit').Config} */</span>
<span class="hljs-keyword">const</span> config = {
    <span class="hljs-attr">kit</span>: {
        <span class="hljs-attr">adapter</span>: adapter(),
        <span class="hljs-attr">alias</span>: {
            <span class="hljs-string">'@comps'</span>: path.resolve(<span class="hljs-string">'./src/lib/components'</span>),
            <span class="hljs-string">'@lib'</span>: path.resolve(<span class="hljs-string">'./src/lib'</span>),
            <span class="hljs-string">'@services'</span>: path.resolve(<span class="hljs-string">'./src/lib/services'</span>)
        }
    },
    <span class="hljs-attr">preprocess</span>: vitePreprocess()
};

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> config;
</code></pre>
<pre><code class="lang-json"><span class="hljs-comment">/* jsconfig.json */</span>

{
    <span class="hljs-attr">"extends"</span>: <span class="hljs-string">"./.svelte-kit/tsconfig.json"</span>,
    <span class="hljs-attr">"compilerOptions"</span>: {
        <span class="hljs-attr">"allowJs"</span>: <span class="hljs-literal">true</span>,
        <span class="hljs-attr">"checkJs"</span>: <span class="hljs-literal">true</span>,
        <span class="hljs-attr">"esModuleInterop"</span>: <span class="hljs-literal">true</span>,
        <span class="hljs-attr">"forceConsistentCasingInFileNames"</span>: <span class="hljs-literal">true</span>,
        <span class="hljs-attr">"resolveJsonModule"</span>: <span class="hljs-literal">true</span>,
        <span class="hljs-attr">"skipLibCheck"</span>: <span class="hljs-literal">true</span>,
        <span class="hljs-attr">"sourceMap"</span>: <span class="hljs-literal">true</span>,
        <span class="hljs-attr">"strict"</span>: <span class="hljs-literal">true</span>,
        <span class="hljs-attr">"baseUrl"</span>: <span class="hljs-string">"."</span>,
        <span class="hljs-attr">"paths"</span>: {
            <span class="hljs-attr">"@comps"</span>: [<span class="hljs-string">"src/lib/components"</span>],
            <span class="hljs-attr">"@lib"</span>: [<span class="hljs-string">"src/lib"</span>],
            <span class="hljs-attr">"@services"</span>: [<span class="hljs-string">"src/lib/services"</span>]
        }
    }
}
</code></pre>
<p>These updates will allow you to use the alias tooling SvelteKit provides to import components and other files throughout your app.</p>
<p>So, if we are importing a button component into one of our pages, we could import the following</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> Button <span class="hljs-keyword">from</span> <span class="hljs-string">'@comps/button/button.svelte'</span>
</code></pre>
<p>instead of</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> Button <span class="hljs-keyword">from</span> <span class="hljs-string">'../../../lib/components/button/button.svelte'</span>
</code></pre>
<h3 id="heading-turning-this-project-into-a-github-template-repo">Turning This Project Into A GitHub Template Repo</h3>
<p>Go ahead and commit all of our changes to your local Git repo, and then add this whole repo to GitHub as you normally would. Finally, you can go into your repo on GitHub, go into the settings for this specific repository, and you can check the 'Template Repository' option near the top of the general settings tab.</p>
<p>You've done it! You officially have a fantastic template to use for new web projects, utilizing modern tools like SvelteKit and TailwindCSS.</p>
<p>To test it out, go create a new repo from GitHub's website. Near the top, you'll see a dropdown labeled 'Repository Template', which defaults to no template. If you did everything correctly, if you click on that dropdown, you should see the name of your template repo as an option. Select that, give your new project a name, and click 'Create Repository.' You now have a brand new repo, with its source code, that is an exact match of our template. Now all you have to do is clone that new project locally, run <code>npm install</code> in the directory locally, and all the setup we have done on the template is already done for you.</p>
<h3 id="heading-summary">Summary</h3>
<p>Thanks for following along! I appreciate the read, and hopefully, you gained some value from walking through this with me. I use this particular template whenever a freelance client needs a custom website because I can spin it up in literal minutes, and start development right away. And using tools like SvelteKit and TailwindCSS helped me create really beautiful and performant websites quicker than with any other tools I have used. I highly recommend giving this stack a try in your next web project!</p>
<p><a target="_blank" href="https://github.com/tboyd4/sveltekit-template">Link to my GitHub SvelteKit + TailwindCSS Template Repo</a></p>
]]></content:encoded></item></channel></rss>