<?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: Tyler V.</title>
    <description>The latest articles on DEV Community by Tyler V. (@terabytetiger).</description>
    <link>https://dev.to/terabytetiger</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%2F92516%2F3548d800-1ac1-40b7-8aec-3bb16f0f253f.jpg</url>
      <title>DEV Community: Tyler V.</title>
      <link>https://dev.to/terabytetiger</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/terabytetiger"/>
    <language>en</language>
    <item>
      <title>[Boost]</title>
      <dc:creator>Tyler V.</dc:creator>
      <pubDate>Tue, 24 Mar 2026 20:21:42 +0000</pubDate>
      <link>https://dev.to/terabytetiger/-4j6i</link>
      <guid>https://dev.to/terabytetiger/-4j6i</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/mrmatthogg/vibe-coding-is-bad-news-for-good-ideas-1j8g" class="crayons-story__hidden-navigation-link"&gt;Vibe Coding Is Bad News For Good Ideas&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/mrmatthogg" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F341679%2Fcfd1819a-efa4-4cfd-a57a-bc9e642b3e7b.jpg" alt="mrmatthogg profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/mrmatthogg" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Matt Hogg
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Matt Hogg
                
              
              &lt;div id="story-author-preview-content-3372713" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/mrmatthogg" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F341679%2Fcfd1819a-efa4-4cfd-a57a-bc9e642b3e7b.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Matt Hogg&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/mrmatthogg/vibe-coding-is-bad-news-for-good-ideas-1j8g" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 19&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/mrmatthogg/vibe-coding-is-bad-news-for-good-ideas-1j8g" id="article-link-3372713"&gt;
          Vibe Coding Is Bad News For Good Ideas
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/watercooler"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;watercooler&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/softwaredevelopment"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;softwaredevelopment&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/mrmatthogg/vibe-coding-is-bad-news-for-good-ideas-1j8g" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;2&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/mrmatthogg/vibe-coding-is-bad-news-for-good-ideas-1j8g#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            7 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>ai</category>
      <category>watercooler</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Updating some metadata and found this post - still relevant! 🏆</title>
      <dc:creator>Tyler V.</dc:creator>
      <pubDate>Mon, 24 Mar 2025 14:43:18 +0000</pubDate>
      <link>https://dev.to/terabytetiger/updating-some-metadata-and-found-this-post-still-relevant-18bm</link>
      <guid>https://dev.to/terabytetiger/updating-some-metadata-and-found-this-post-still-relevant-18bm</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/terabytetiger" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F92516%2F3548d800-1ac1-40b7-8aec-3bb16f0f253f.jpg" alt="terabytetiger"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/terabytetiger/asking-better-questions-4el5" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Asking better questions&lt;/h2&gt;
      &lt;h3&gt;Tyler V. ・ Sep 2 '21&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#codenewbie&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>beginners</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>Great read about AI!</title>
      <dc:creator>Tyler V.</dc:creator>
      <pubDate>Tue, 04 Feb 2025 15:26:54 +0000</pubDate>
      <link>https://dev.to/terabytetiger/great-read-about-ai-1080</link>
      <guid>https://dev.to/terabytetiger/great-read-about-ai-1080</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/brob" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F173278%2F96678344-7d51-41ca-8ff4-78343d865e05.jpg" alt="brob"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/brob/does-our-technology-still-work-for-us-55e2" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Does our technology still work for us?&lt;/h2&gt;
      &lt;h3&gt;Bryan Robinson ・ Feb 4&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#ai&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#ux&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>ai</category>
      <category>ux</category>
    </item>
    <item>
      <title>Awesome Collection of topics + blog posts</title>
      <dc:creator>Tyler V.</dc:creator>
      <pubDate>Wed, 04 Dec 2024 16:59:04 +0000</pubDate>
      <link>https://dev.to/terabytetiger/awesome-collection-of-topics-blog-posts-4od0</link>
      <guid>https://dev.to/terabytetiger/awesome-collection-of-topics-blog-posts-4od0</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/florianrappl" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F268296%2Feb6a1ad0-17d3-4302-9c44-a263a666b072.jpg" alt="florianrappl"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/florianrappl/whats-hot-in-web-dev-42ng" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;What's Hot in Web Dev?&lt;/h2&gt;
      &lt;h3&gt;Florian Rappl ・ Dec 4 '24&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#frontend&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#node&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>The Road to Publishing an Android App</title>
      <dc:creator>Tyler V.</dc:creator>
      <pubDate>Wed, 31 Jul 2024 12:18:01 +0000</pubDate>
      <link>https://dev.to/terabytetiger/the-road-to-publishing-an-app-2c2g</link>
      <guid>https://dev.to/terabytetiger/the-road-to-publishing-an-app-2c2g</guid>
      <description>&lt;p&gt;Something that's long been on my bucket list as a developer has been to publish an Android app on the Play Store. While I've never had a concrete idea for what I wanted to the app to do, I've taken some time working through the beginner tutorials for Kotlin, Flutter, NativeScript, and React Native. &lt;/p&gt;

&lt;p&gt;But as I've found to often be the case, the solution will come to me while solving a problem for myself. &lt;/p&gt;

&lt;h2&gt;
  
  
  The "Problem"
&lt;/h2&gt;

&lt;p&gt;If you're a frequent Instagram user, you've probably seen the seamless carousel posts where a single panorama is broken apart into multiple images in the 1:1 square aspect ratio that Instagram uses so that as you swipe through it the panorama flows from image to image. &lt;/p&gt;

&lt;p&gt;While there are multiple apps out there that can do this, I found them to be rather polluted with ads and tended to favor more artistic approaches that involved multiple images with additional templating and styling applied. &lt;/p&gt;

&lt;p&gt;So I did a Pro Developer Move™ - built something over the course of multiple days instead of sitting through 45 seconds of ads! &lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution
&lt;/h2&gt;

&lt;p&gt;The how isn't particularly important to this story, but the TL;DD (Too long; Didn't Develop) is: I dropped &lt;a href="https://advanced-cropper.github.io/vue-advanced-cropper/" rel="noopener noreferrer"&gt;this cropper component&lt;/a&gt; into the page with a second invisible cropper that does some math to generate the images for the user in the background. &lt;a href="https://github.com/TerabyteTiger/swipeypanorama" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So I had my app, &lt;a href="https://swipeypanorama.terabytetiger.com/" rel="noopener noreferrer"&gt;Swipey Panorama&lt;/a&gt; and deployed the website for a few friends to take a test drive with and after getting the thumbs up that it seemed to be working, started phase 2 of my master plan - adding Progressive Web App (PWA) support so I could install the site on my phone for easy use. &lt;/p&gt;

&lt;h2&gt;
  
  
  Finding Treasure
&lt;/h2&gt;

&lt;p&gt;While refreshing myself on what exactly had to go into the &lt;code&gt;manifest.json&lt;/code&gt; and service worker files, I stumbled upon &lt;a href="https://www.pwabuilder.com/" rel="noopener noreferrer"&gt;PWA Builder&lt;/a&gt; - which happened to include a section about deploying a PWA to various app stores! Could it be this simple? Just a few clicks and I could have an app? &lt;/p&gt;

&lt;p&gt;Well, yes ... but also no. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Generating&lt;/em&gt; the app/files would in fact be rather simple. &lt;em&gt;Publishing&lt;/em&gt; the app/files to the app store would not be quite as simple as the single button press that was needed to generate the files. &lt;/p&gt;

&lt;h2&gt;
  
  
  Lost! In the Play Store Developer Console!
&lt;/h2&gt;

&lt;p&gt;As someone who has used google.com before and would describe the experience as about as simple as it gets - The Play Store Developer Console is the exact opposite experience. There are quite a few pages that require your attention to get your app set up, and none of them link to each other (as far as I could tell at least). &lt;/p&gt;

&lt;p&gt;But I was determined and despite the most user-unfriendly experience I think I've ever had, I eventually had everything set up and was left with "Deploy your first release" with a link that took me to the Releases overview page: &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%2F50yufafpuzy52a2zlitw.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%2F50yufafpuzy52a2zlitw.png" alt="The releases overview page, which notably does not include a way to initiate a new release" width="800" height="497"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After searching this page up and down multiple times, eventually I somehow found my say to the App Bundle Explorer - which is where you can actually upload a new release version. It took less time to figure this part out - but you upload the App bundle (&lt;code&gt;.aab&lt;/code&gt; file, not &lt;code&gt;.apk&lt;/code&gt; - which can be used to install the app on a local device). &lt;/p&gt;

&lt;h2&gt;
  
  
  Updating your app
&lt;/h2&gt;

&lt;p&gt;Just when I thought I had everything rolling, one of my testers immediately found a bug (which I was vaguely aware could happen, but I thought it was going to be limited to PC users and could just fix after the fact). I made the fixes, deployed the website, and rebuilt the package to upload to the Play store. After getting what I think was every possible error - here's a list of items that you need in order to make updates to your app: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;Version Code&lt;/code&gt; needs to be set to a unique number on the PWA Builder screen &lt;/li&gt;
&lt;li&gt;The &lt;code&gt;Version Name&lt;/code&gt; needs to be different &lt;/li&gt;
&lt;li&gt;Your &lt;code&gt;Signing Key Info&lt;/code&gt; needs to match - This can be found in the &lt;code&gt;signing-key-info.txt&lt;/code&gt; file that's downloaded when you first build your app. You also need the &lt;code&gt;signing.keystore&lt;/code&gt; file to upload to PWA Builder. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once uploaded and reviewed, you'll be able to deploy the updates to your Testing/Production release. &lt;/p&gt;

&lt;h2&gt;
  
  
  Test out Swipey Panorama:
&lt;/h2&gt;

&lt;p&gt;Website: &lt;a href="https://swipeypanorama.terabytetiger.com/" rel="noopener noreferrer"&gt;https://swipeypanorama.terabytetiger.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://play.google.com/apps/testing/com.terabytetiger.swipeypanorama.twa" rel="noopener noreferrer"&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%2Fhp5hct8ezvhq2fpki8ac.png" alt="Get it on Google Play Badge" width="800" height="144"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Understanding Loops - A Tangible Example</title>
      <dc:creator>Tyler V.</dc:creator>
      <pubDate>Tue, 18 Jun 2024 13:57:26 +0000</pubDate>
      <link>https://dev.to/terabytetiger/understanding-loops-a-tangible-example-2o0p</link>
      <guid>https://dev.to/terabytetiger/understanding-loops-a-tangible-example-2o0p</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/cs"&gt;DEV Computer Science Challenge v24.06.12: One Byte Explainer&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Explainer
&lt;/h2&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%2Fxihugelj71cll6qnctpv.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%2Fxihugelj71cll6qnctpv.png" alt="Image of a short JavaScript function that we'll be stepping through in the guide. First, it sets the age variable to 25 (or whatever your age is), then has a comment to grab a piece of paper and draw a birthday cake. Then there's a short while loop that while age is greater than 0, draw a candle then subtract 1 from the age variable. Outside of the loop is another comment that it's celebration time." width="540" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1 - Setup
&lt;/h3&gt;

&lt;p&gt;Get paper, draw a cake, and set &lt;code&gt;age&lt;/code&gt; to your age.&lt;/p&gt;

&lt;h3&gt;
  
  
  2 - Do Loop
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;age&lt;/code&gt; isn't 0, so draw a candle and subtract 1 from &lt;code&gt;age&lt;/code&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  3 - Checkup
&lt;/h3&gt;

&lt;p&gt;Is &lt;code&gt;age&lt;/code&gt; still greater than 0? Go to step 2&lt;br&gt;
Otherwise, go to 4.&lt;/p&gt;

&lt;h3&gt;
  
  
  4 - 🎉
&lt;/h3&gt;

&lt;p&gt;Celebration time! &lt;/p&gt;




&lt;h2&gt;
  
  
  Additional Context
&lt;/h2&gt;

&lt;p&gt;I didn't include markdown in my count - ended up at 248 according to VS Code: &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%2F0oix7d94bw3wqlazjx1l.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%2F0oix7d94bw3wqlazjx1l.png" alt="Image of text highlighted and showing 248 characters were selected" width="706" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>cschallenge</category>
      <category>computerscience</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Google IDX - The Best Flutter Beginner Experience</title>
      <dc:creator>Tyler V.</dc:creator>
      <pubDate>Fri, 07 Jun 2024 19:27:08 +0000</pubDate>
      <link>https://dev.to/terabytetiger/google-idx-the-best-flutter-beginner-experience-4j70</link>
      <guid>https://dev.to/terabytetiger/google-idx-the-best-flutter-beginner-experience-4j70</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is not sponsored, and I am not an affiliate&lt;/em&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  What is IDX
&lt;/h2&gt;

&lt;p&gt;Announced in a blog post titled &lt;a href="https://idx.dev/blog/article/introducing-project-idx" rel="noopener noreferrer"&gt;Introducing Project IDX, An Experiment to Improve Full-stack, Multiplatform App Development&lt;/a&gt; during August 2023, the Google team presented the idea of a new VS Code web-based editor that would include AI features and in-browser app previews to help improve Developer experience and promising "seamless integration with popular Google tools and products like Flutter and Firebase" (&lt;a href="https://idx.dev/blog/article/start-building-with-project-idx-today" rel="noopener noreferrer"&gt;Erin Kidwell, Start Building with Project IDX Today&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why Flutter didn't "click" before
&lt;/h2&gt;

&lt;p&gt;I've poked at the idea of using Flutter in the past, and even managed to cobble together a prototype that was able to use a Barcode reader widget (Flutter's Component equivalent for those of us used to things like Vue or React). But every time I've visited Flutter in the past there's been XXX things stopping me from ever really getting into it: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Setting up Android Studio&lt;/li&gt;
&lt;li&gt;Configuring Android Studio&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For me personally, when I work on random side projects, I like to make things harder for myself by often doing my development across 2 devices. With Android Studio seeming to never quite be happy on my main development device, I never felt inclined to do the setup on my second machine. The last time I tried Flutter, there was a day where I had my app functioning and loading on my USB connected phone when I shut down for the day. The next morning when I started up, the app was throwing all kinds of weird errors about things not being able to load, so I dropped it. &lt;/p&gt;

&lt;h2&gt;
  
  
  How IDX solved my issues
&lt;/h2&gt;

&lt;p&gt;When IDX was announced, I was vaguely interested, but didn't really have a specific use case planned for it. I signed up for early access and forgot it existed until Google I/O where it was announced as available for everyone. This week, I finally had both the time and desire to poke around with a new language/framework and decided it'd be a good time to try IDX and Flutter. If IDX couldn't get me through the beginnings of learning Flutter, I don't think anything ever would be able to. &lt;/p&gt;

&lt;p&gt;So, what makes IDX work so well? The fact that going from literally nothing to a "Hello, World" app that's running with 0 Android Studio configuration is a button click, a project name, and about 1 minute away! &lt;/p&gt;

&lt;p&gt;The amount of time I had previously spent just trying to get Android Studio set up or waiting for Flutter's installation + project initialization to run, I was already through a full tutorial and working on the follow-up practice project. &lt;/p&gt;

&lt;p&gt;While I don't love the AI additions (mostly because it seems to like to recommend functions that don't actually exist...) the ability to focus on the code and not the environment setup has been so enjoyable as someone that just wants to practice working with the language for now. I'm sure someday I'll be back setting things up on my local device and wishing Android Studio would just work, this is a great way to test out a new language without having to struggle through the configuration just to find out if I even like working with that language. &lt;/p&gt;

</description>
      <category>mobile</category>
      <category>flutter</category>
      <category>development</category>
    </item>
    <item>
      <title>An Afternoon with SVGs | Frontend Challenge Entry</title>
      <dc:creator>Tyler V.</dc:creator>
      <pubDate>Thu, 28 Mar 2024 15:12:05 +0000</pubDate>
      <link>https://dev.to/terabytetiger/an-afternoon-with-svgs-frontend-challenge-entry-3c90</link>
      <guid>https://dev.to/terabytetiger/an-afternoon-with-svgs-frontend-challenge-entry-3c90</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for DEV Challenge v24.03.20, Glam Up My Markup: Camp Activities&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I've been looking for a small project to do that would let me play with &lt;a href="https://gsap.com" rel="noopener noreferrer"&gt;Greensock (GSAP)&lt;/a&gt;, specifically a bit with some SVG files I generated with &lt;a href="https://www.coreldraw.com/en/product/vector/" rel="noopener noreferrer"&gt;Corel Vector&lt;/a&gt;. When I saw the frontend challenge and had an afternoon at work with downtime between a few projects, I knew it'd be a great opportunity to explore a bit! &lt;/p&gt;

&lt;p&gt;Since my focus was on the GSAP piece (and limiting myself to less than 1 work day to complete [8 hours minus any urgent issues that cropped up]), I didn't do much in terms of functionality, but rather focus on my goal of "make it look neat with animations" (super specific, I know). &lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;(Looks best in full screen) &lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/TerabyteTiger/embed/rNbwXxL?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;After seeing that the theme was Summer Camp oriented, I immediately had the idea to create a tent with a campfire outside of it adding animation to make the fire glow and a tent flap that would rustle (which didn't make it in 😅). So I set to creating the shapes in Gravit. Since I thought the fire would look best with a dark/night setting, I also created a star shape and an oval for the ground - then exported everything as &lt;code&gt;.svg&lt;/code&gt; files. &lt;/p&gt;

&lt;p&gt;Next up was to start working on the Codepen file - I dropped in the HTML and started Googling for "How to import SVGs with JavaScript". Turns out that this is a non-trivial thing to do if the files aren't hosted somewhere 🙃 So I copied the SVG paths into the bottom of the HTML file since breaking them apart and importing them piecewise via JS didn't feel like a productive use of my limited time.&lt;/p&gt;

&lt;p&gt;Once they started rendering, I began on my CSS - giving the form a white background and position the SVG elements. Then I moved my window to the side and ran into an issue - the SVG I was using for the ground I had positioned using negative values, and when the screen got smaller the ground would adjust further and further down until it was no longer showing in the window at all. My original ground looked 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%2Fhs9yn2en0edg06x5bd3y.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%2Fhs9yn2en0edg06x5bd3y.png" alt="a green oval that's about 2 times wider than it is tall" width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So to make my alignment easier (aka be able to be set with &lt;code&gt;bottom: 0&lt;/code&gt; instead of negative units) I clipped the path down to this (which is the version that's in the demo): &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%2Fo2u3uqsdta8t929guym4.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%2Fo2u3uqsdta8t929guym4.png" alt="A green semi-circle that looks like a wide small hill on the horizon" width="800" height="106"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next I spruced up my form's visuals a bit by heading to &lt;a href="https://fonts.google.com/" rel="noopener noreferrer"&gt;Google Fonts&lt;/a&gt; and finding one that had camping vibes - eventually landing on Amatic SC. Then I had the wild idea of making the form look like a piece of paper, so that I could make the submit button fold the paper up into an envelope or paper airplane and fly off screen if it was submitted successfully (This was EXTREMELY high hopes and I didn't even get around to trying to start this animation in the time I allotted myself 😂). I started by trying to find a crumpled paper look on sites like &lt;a href="https://heropatterns.com/" rel="noopener noreferrer"&gt;Hero Patterns&lt;/a&gt;, but eventually found myself on this codepen: &lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/enbee81/embed/ExKJWzW?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;In the interest of saving time, I decided this would give enough of the paper look without requiring too much excess work - huge thanks to enbee81 🙌🏻 While looking at how the CSS worked and updating the colors to match my background, I realized that I could use the radial gradients to give some depth to my sky, which ended up like this:&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;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;radial-gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ellipse&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="nb"&gt;top&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;#001333&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;transparent&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; 
    &lt;span class="n"&gt;radial-gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ellipse&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="nb"&gt;bottom&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;#001333&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;transparent&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; 
    &lt;span class="n"&gt;radial-gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ellipse&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="nb"&gt;right&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;#584C86&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;transparent&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; 
    &lt;span class="n"&gt;radial-gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ellipse&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="nb"&gt;left&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;#584C86&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;#001333&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;Now, as the user scrolled down the page the sky would "change". &lt;/p&gt;

&lt;p&gt;It was around this time that an issue came up and I stopped work on this for the day - notably I haven't gotten to any GSAP animations yet 😅 So the next morning I had an hour between meetings and started the most fun part of the project! &lt;/p&gt;

&lt;p&gt;The first thing I tried was using a "timeline" - which would be a span of time for my animations to run on:&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;gsap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;timeline&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;paused&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;repeat&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="na"&gt;yoyo&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="c1"&gt;// repeat set to -1 causing the timeline to repeat infinite times&lt;/span&gt;
&lt;span class="c1"&gt;// yoyo makes the animations play, then play in reverse back to the initial state&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This was working, but I didn't like that all my animations were tied to a single block of time - so all the stars would start to twinkle at the same time, but then the stars on shorter times would stay static until all the animations finished, then they'd play in reverse and "hang" in a static state longer than I wanted. &lt;/p&gt;

&lt;p&gt;Next I swapped to using &lt;code&gt;to&lt;/code&gt; so I could specify the "Target state" for each SVG file.&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="nx"&gt;gsap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#star-1&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="na"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;1.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;duration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;repeat&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="na"&gt;yoyo&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This block tells Star 1 to grow to 1.5x size, over the duration of 17 seconds, repeating infinitely, and with the "rewind" effect each time it completed the change. &lt;/p&gt;

&lt;p&gt;The final addition I made was to give the fire a burning glow effect with a drop-shadow:&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="nx"&gt;gsap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#fire&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,{&lt;/span&gt;&lt;span class="na"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;drop-shadow(0px -1px 5px rgba(255, 107, 30, 1))&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="na"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;drop-shadow(0px -5px 7px rgba(255, 60, 24, 1))&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;duration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;2.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;repeat&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="na"&gt;yoyo&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This time I used &lt;code&gt;gsap.fromTo&lt;/code&gt; so I could specify additional effects to start from and go to. I start with a small orange drop shadow, then it grows and changes to a slightly more red color, before looping back to the original shadow over each 5 second loop (2.5 seconds each way). &lt;/p&gt;

&lt;p&gt;A final issue I was running into here was I wanted to make the drop shadow much larger than the fire, but making it larger caused it to get clipped to a bounding box, which I'm guessing has something to do with the SVG setup - but this was a good stopping point and I'm happy with the results for the time I spent on it. &lt;/p&gt;

&lt;p&gt;If I had unlimited time to work on this, I would have tried to solve the fire glow issue, added a flap to the tent, and added some kind of animation on submission of the form. I also briefly had considered making some kind of change to the scene based on the activity dropdown selection which could have been neat. &lt;/p&gt;

&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://choosealicense.com/licenses/mit/" rel="noopener noreferrer"&gt;MIT License Tyler V. 2024&lt;/a&gt;&lt;/p&gt;

</description>
      <category>frontendchallenge</category>
      <category>devchallenge</category>
      <category>css</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Testing Svelte on the job</title>
      <dc:creator>Tyler V.</dc:creator>
      <pubDate>Thu, 14 Mar 2024 18:26:04 +0000</pubDate>
      <link>https://dev.to/terabytetiger/testing-svelte-on-the-job-3pbb</link>
      <guid>https://dev.to/terabytetiger/testing-svelte-on-the-job-3pbb</guid>
      <description>&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;I've been working with Vue (mostly 2 with a bit of 3 mixed in recently) at work for ~5 years now, and since we're starting to evaluate things like migrating to Vue 3 I knew when this small project came across my desk it would be the perfect opportunity to dip my toes in Svelte.  &lt;/p&gt;

&lt;p&gt;I mostly followed the &lt;a href="https://learn.svelte.dev/tutorial/welcome-to-svelte" rel="noopener noreferrer"&gt;interactive tutorial from SvelteKit&lt;/a&gt; with modifications to match what I needed. &lt;/p&gt;

&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;The app I built was to function as the admin side of a URL shortener (something like &lt;a href="https://bitly.com/" rel="noopener noreferrer"&gt;bit.ly&lt;/a&gt;) so that one of our teams can convert long bookmarks into more shareable links so we can generate QR codes that another department on our team would use in their day-to-day tasks. &lt;/p&gt;

&lt;p&gt;This is a very straightforward small app, and only took me about 1 day's work to squeeze it in between the other things I do during the day. &lt;/p&gt;

&lt;h2&gt;
  
  
  What I liked
&lt;/h2&gt;

&lt;h3&gt;
  
  
  JS/HTML split files
&lt;/h3&gt;

&lt;p&gt;As someone that really likes Vue 2, it won't be a surprise that I liked the split of HTML and JS being completely disjoined into 2 files - although having to include a script to access the &lt;code&gt;data&lt;/code&gt; seems like something that should be automatically happening. &lt;/p&gt;

&lt;h3&gt;
  
  
  HTML &lt;code&gt;#each&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;I liked the &lt;code&gt;#each&lt;/code&gt; approach to looping HTML elements - I think it's a bit more obvious what's happening than how Vue uses &lt;code&gt;v-for&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight svelte"&gt;&lt;code&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="k"&gt;#each&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;allUrlDocs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;doc&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/url/{doc._id}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="k"&gt;/each&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What I didn't like
&lt;/h2&gt;

&lt;h3&gt;
  
  
  File Names
&lt;/h3&gt;

&lt;p&gt;Regardless of how nice the development experience was, my biggest gripe with Svelte is the singular reason I won't be using it in the future - the file naming structure is painfully bad. &lt;/p&gt;

&lt;p&gt;Using the folders as a way to include the routing auto-magically is great - but then having to stuff every folder with &lt;code&gt;+page.server.js&lt;/code&gt; and &lt;code&gt;+page.svelte&lt;/code&gt; immediately leads to confusion regarding which file is which. Having to read the subfolder names from these tabs had me pulling my hair out: &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%2Fgb8d2iwovaiwspasesn4.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%2Fgb8d2iwovaiwspasesn4.png" alt="4 VS code tabs that are all called " width="713" height="44"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And having to collapse/open folder in order to figure out which &lt;code&gt;+page.svelte&lt;/code&gt; I was actually trying to open was constantly breaking my concentration. &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%2Fljer2e5e6heh8l6co5nt.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%2Fljer2e5e6heh8l6co5nt.png" alt="a VS Code sidebar showing multiple files with the same names" width="279" height="153"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Build/Deploy Process
&lt;/h3&gt;

&lt;p&gt;For our internal apps, we use IIS to deploy our apps locally on our network. Svelte seems like it'd be a delight to use if using a tool like Netlify, but for local deploys the process seems needlessly complicated. &lt;/p&gt;

&lt;p&gt;I know us using IIS made this even more complicated than it needed to be, but compared to the tutorial docs which were clear and easy to follow, the build docs and terminal output were very confusing about what exactly &lt;code&gt;yarn build&lt;/code&gt; was doing. &lt;/p&gt;

</description>
      <category>svelte</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Dev.to and "The Missing Middle" Economics</title>
      <dc:creator>Tyler V.</dc:creator>
      <pubDate>Mon, 18 Dec 2023 14:59:21 +0000</pubDate>
      <link>https://dev.to/terabytetiger/devto-and-the-missing-middle-economics-59ip</link>
      <guid>https://dev.to/terabytetiger/devto-and-the-missing-middle-economics-59ip</guid>
      <description>&lt;p&gt;If you've spent any amount of time on Dev.to in the past year, you've certainly noticed the uptick of low-quality "listicle" articles (often referring to the low quality click-bait type articles in a "Top 5" style). Or if you haven't noticed it yourself, you've probably seen other users complaining about the uptick - even making the top 7 posts published last week [Dec 11th, 2023]. &lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/rgolawski" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F583582%2F9ac3fb2e-27cc-446d-960b-772ab9d0b77b.jpeg" alt="rgolawski"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/rgolawski/the-conundrum-of-the-top-x-articles-l55" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;The Conundrum of the "Top X" Articles 🤔&lt;/h2&gt;
      &lt;h3&gt;Rafał Goławski ・ Dec 8 '23&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#discuss&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;



&lt;div class="ltag__link"&gt;
  &lt;a href="/best_codes" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F1192466%2F53d79dec-5f31-432e-b1e5-5a1caad6bc01.png" alt="best_codes"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/best_codes/25-reasons-you-must-know-why-listicles-are-bad-for-devto-1hok" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;🚨 🚀 25 Reasons (You MUST Know!!) Why *Some* “Listicles” Are BAD for dev.to 🤯 👿 🚨&lt;/h2&gt;
      &lt;h3&gt;Best Codes ・ Dec 11 '23&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#sad&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#help&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;While this trend may or may not have been exaggerated with the increasing availability of AI tools, this concern about listicles has been a discussion point on Dev.to for a few years. This past weekend while listening to the &lt;a href="https://www.relay.fm/cortex/150" rel="noopener noreferrer"&gt;Cortex Podcast&lt;/a&gt;, Host &lt;a href="https://www.youtube.com/channel/UC2C_jShtL725hvbm1arSV9w" rel="noopener noreferrer"&gt;CGP Grey&lt;/a&gt; mentioned an economic phenomenon called "The Missing Middle" and how it related to the landscape of YouTube this past year, and it made me think about the listicle situation on Dev.to and how it might be less of a problem and more of a natural economic occurrence for a growing platform. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Disclaimer for Economic students - I know that this isn't exactly how the missing middle is intended to be used, but I couldn't find better phrasing for it and &lt;a href="https://www.governing.com/assessments/the-missing-middle-in-american-life-can-we-get-it-back" rel="noopener noreferrer"&gt;this article&lt;/a&gt; was the closest thing I could find. If you know a more appropriate phrasing for what I'm explaining please let me know in the comments 🙏🏻 For readers interested in the specifics of Missing Middle Housing, check &lt;a href="https://en.wikipedia.org/wiki/Missing_middle_housing" rel="noopener noreferrer"&gt;the Wikipedia page&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  So what is "The Missing Middle"?
&lt;/h2&gt;

&lt;p&gt;Originally, this was about the housing market and the loss of options in the middle class range, but applied at a higher level this is the phenomenon where over time, a market goes from having a variety of selection in the low, middle, and high quality range - but over time the middle quality options start to disappear as the supplier trends towards either the low or high quality side of things. &lt;/p&gt;

&lt;p&gt;This can be for a variety of reasons - in the housing market partially this was caused by changes in zoning laws/requirements making housing harder to build. For online content on platforms like YouTube or Dev.to it can be because of what the algorithm rewards. CGP Grey calls out that there's been a trend on YouTube where users are favoring either short form content (Shorts) or particularly long form content (4-hour documentary deep diving some obscure interest). I particularly like the 2-axis spectrum that he proposes, one axis for effort and one axis for length, where the points that the algorithm is rewarding most is the extremes of the axis - Short + High Effort, Short + Low Effort, Long + Low Effort, and Long + High Effort.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note that Effort isn't necessarily the exact right word here, but is a "close enough" word to describe something along the lines of "doing the research and validating that everything is going to be accurate for the reader" &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Naturally, the most content is going to be created in the Short + Low Effort extreme since that requires the least amount of time/effort to create - which I think applies fairly directly to the Listicle situation here. But the high-effort content still exists - the Top 7 posts each week often has a few articles that I find interesting and will read through - the question becomes how can interested readers find that content outside of the Top 7 posts each week? &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%2Fwh7dfu5aoras2ller5ds.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%2Fwh7dfu5aoras2ller5ds.png" alt="Chart illustrating a Effort vs Length space and a cloud for " width="377" height="344"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I don't necessarily have any profound new addition to the situation, but thought it was interesting that it aligns so closely to what creators on other platforms are experiencing, as well as the physical space as well. &lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>Creating your own Links page in Nuxt</title>
      <dc:creator>Tyler V.</dc:creator>
      <pubDate>Thu, 16 Mar 2023 17:52:23 +0000</pubDate>
      <link>https://dev.to/terabytetiger/creating-your-own-links-page-in-nuxt-2kgc</link>
      <guid>https://dev.to/terabytetiger/creating-your-own-links-page-in-nuxt-2kgc</guid>
      <description>&lt;p&gt;This is a quick code sample of how I created &lt;a href="https://terabytetiger.com/links" rel="noopener noreferrer"&gt;my own "Where to find me" page for my blog&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;I'm using &lt;a href="https://nuxtjs.org/" rel="noopener noreferrer"&gt;Nuxt&lt;/a&gt;, &lt;a href="https://fontawesome.com/" rel="noopener noreferrer"&gt;Font Awesome&lt;/a&gt;, and &lt;a href="https://v2.tailwindcss.com/" rel="noopener noreferrer"&gt;Tailwind (v2)&lt;/a&gt; but with minor adjustments you can adapt this to any stack of your liking 😊&lt;/p&gt;

&lt;h2&gt;
  
  
  My Social Component
&lt;/h2&gt;

&lt;p&gt;I already had this component that I was using to show a list of Font Awesome Icons with links to my various social accounts around the internet and figured I would reuse it for my new links page. &lt;/p&gt;

&lt;p&gt;After initial setup I realized I didn't have a way to link from my links page back to my actual blog, so I added it as a link and an &lt;code&gt;isHome()&lt;/code&gt; computed property to check if the user was already on my home page or not.&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;template&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;"max-w-4xl mx-auto py-4 text-center"&lt;/span&gt;&lt;span class="nt"&gt;&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;"my-4 text-3xl font-display font-bold"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      Find me around the internet
    &lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;ul&lt;/span&gt;
      &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"flex flex-wrap justify-around max-w-lg mx-auto text-center list-none"&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;v-if=&lt;/span&gt;&lt;span class="s"&gt;"isHome"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"w-1/2 md:w-1/4 mt-4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://terabytetiger.com/"&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;font-awesome-icon&lt;/span&gt;
              &lt;span class="na"&gt;:icon=&lt;/span&gt;&lt;span class="s"&gt;"['fas', 'home']"&lt;/span&gt;
              &lt;span class="na"&gt;:style=&lt;/span&gt;&lt;span class="s"&gt;"{
                fontSize: '3rem',
              }"&lt;/span&gt;
              &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-purple-0"&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;
          Blog
        &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"w-1/2 md:w-1/4 mt-4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://dev.to/terabytetiger"&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;font-awesome-icon&lt;/span&gt;
              &lt;span class="na"&gt;:icon=&lt;/span&gt;&lt;span class="s"&gt;"['fab', 'dev']"&lt;/span&gt;
              &lt;span class="na"&gt;:style=&lt;/span&gt;&lt;span class="s"&gt;"{
                fontSize: '3rem',
              }"&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;
          Dev.to
        &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"w-1/2 md:w-1/4 mt-4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://github.com/TerabyteTiger"&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;font-awesome-icon&lt;/span&gt;
              &lt;span class="na"&gt;:icon=&lt;/span&gt;&lt;span class="s"&gt;"['fab', 'github']"&lt;/span&gt;
              &lt;span class="na"&gt;:style=&lt;/span&gt;&lt;span class="s"&gt;"{
                fontSize: '3rem',
              }"&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;
          Github
        &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"w-1/2 md:w-1/4 mt-4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"me"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://dftba.club/@TerabyteTiger"&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;font-awesome-icon&lt;/span&gt;
              &lt;span class="na"&gt;:icon=&lt;/span&gt;&lt;span class="s"&gt;"['fab', 'mastodon']"&lt;/span&gt;
              &lt;span class="na"&gt;:style=&lt;/span&gt;&lt;span class="s"&gt;"{
                fontSize: '3rem',
              }"&lt;/span&gt;
              &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-blue-700"&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;
          Mastodon
        &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"w-1/2 md:w-1/4 mt-4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://www.instagram.com/t.vanblargan/"&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;font-awesome-icon&lt;/span&gt;
              &lt;span class="na"&gt;:icon=&lt;/span&gt;&lt;span class="s"&gt;"['fab', 'instagram']"&lt;/span&gt;
              &lt;span class="na"&gt;:style=&lt;/span&gt;&lt;span class="s"&gt;"{
                fontSize: '3rem',
              }"&lt;/span&gt;
              &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-pink-500"&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;
          Instagram
        &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"w-1/2 md:w-1/4 mt-4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://www.youtube.com/channel/UCZeMnP2XoSh724u4v8Oskwg"&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;font-awesome-icon&lt;/span&gt;
              &lt;span class="na"&gt;:icon=&lt;/span&gt;&lt;span class="s"&gt;"['fab', 'youtube']"&lt;/span&gt;
              &lt;span class="na"&gt;:style=&lt;/span&gt;&lt;span class="s"&gt;"{
                fontSize: '3rem',
              }"&lt;/span&gt;
              &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-red-500"&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;
          YouTube
        &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/ul&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;/template&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;script&amp;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="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Social&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;computed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;isHome&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="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;$route&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fullPath&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/&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;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Over time as my usage of different social medias ebbs and flows, I tend to update my list and comment in/out the various links so that only sites I'm active on are listed. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Links Page Layout
&lt;/h2&gt;

&lt;p&gt;Once I had my &lt;code&gt;Social&lt;/code&gt; component configured, I added a new Layout that would exclude my normal Header and Footer from the links page to keep it minimalistic.&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;template&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;"bg-gradient-to-br from-blue-400 to-purple-400 w-screen h-screen p-12"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;Nuxt&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;/template&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Links Page
&lt;/h2&gt;

&lt;p&gt;Next I set up my Links page to be a simple card with the &lt;code&gt;Social&lt;/code&gt; component and a fun shaped profile picture at the top.&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;template&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;""&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt;
      &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"/profileImg.png"&lt;/span&gt;
      &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"(your alt text goes here)"&lt;/span&gt;
      &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"rounded-full h-48 mx-auto mb-8 py-4 filter drop-shadow-2xl"&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;class=&lt;/span&gt;&lt;span class="s"&gt;"bg-white mx-auto w-7/8 lg:w-1/2 rounded-lg p-4 filter drop-shadow-2xl"&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;Social&amp;gt;&amp;lt;/Social&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&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/template&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;script&amp;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="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;layout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;links&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="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that is all it took to get a central location I could link to from various social accounts! &lt;/p&gt;

</description>
      <category>vue</category>
      <category>social</category>
    </item>
    <item>
      <title>Adding Netlify Redirects to your Nuxt Blog</title>
      <dc:creator>Tyler V.</dc:creator>
      <pubDate>Tue, 22 Feb 2022 15:48:21 +0000</pubDate>
      <link>https://dev.to/terabytetiger/adding-netlify-redirects-to-your-nuxt-blog-3449</link>
      <guid>https://dev.to/terabytetiger/adding-netlify-redirects-to-your-nuxt-blog-3449</guid>
      <description>&lt;p&gt;During &lt;a href="https://terabytetiger.com/lessons/migrate-from-gridsome-to-nuxt" rel="noopener noreferrer"&gt;my migration from Gridsome to Nuxt&lt;/a&gt; I mentioned that I was having issues getting the &lt;code&gt;deep:true&lt;/code&gt; part of the &lt;a href="https://content.nuxtjs.org/" rel="noopener noreferrer"&gt;Nuxt Context module&lt;/a&gt; working, and took The Lazy Dev™ approach and just didn't use it, essentially flattening my directory structure. Unfortunately, this led to the shortening of my blog posts URLs, which has consequences when &lt;a href="https://search.google.com/search-console/about" rel="noopener noreferrer"&gt;Google Search Console&lt;/a&gt; suddenly thinks the pages are gone! &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%2Fnww5m1w33c2zikw8j1yv.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%2Fnww5m1w33c2zikw8j1yv.png" alt="Google Search Console dashboard showing a few days of minimal clicks and during the same time frame, a bunch of page errors being reported." width="800" height="699"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thankfully, all that was required was to add redirects from my old (and now broken) links to the correct URLs. However, I didn't want to create and maintain a growing list of post redirects since one of the reasons for migrating to &lt;a href="https://nuxtjs.org/" rel="noopener noreferrer"&gt;Nuxt&lt;/a&gt; was to decrease my number of steps required to go from draft to posted. &lt;/p&gt;

&lt;h2&gt;
  
  
  Enter Netlify Redirects
&lt;/h2&gt;

&lt;p&gt;After my poking around Google Search Console for a bit to figure out what was happening, I realized that when I removed the article subdirectory from the content directory, I had in fact updated all of the blog post URLs, removing the &lt;code&gt;articles/&lt;/code&gt; from my old URLs. To fix this, I needed a way to tell Google that any urls that started with &lt;code&gt;TerabyteTiger.com/lessons/articles/postName&lt;/code&gt; needed to map to &lt;code&gt;TerabyteTiger.com/lessons/postName&lt;/code&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  Create &lt;code&gt;_redirects&lt;/code&gt; in &lt;code&gt;static/&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;To begin fixing this issue, we need to create a file called &lt;code&gt;_redirects&lt;/code&gt; - Note that there is no file extension! This will need to remain intact after running our build process, so we want this to be located in our &lt;code&gt;static/&lt;/code&gt; directory. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Create a file called &lt;code&gt;_redirects&lt;/code&gt; - Note that there is no file extension!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Add URLs to remap
&lt;/h3&gt;

&lt;p&gt;Once we create our &lt;code&gt;_redirects&lt;/code&gt; file, we'll add our first column - the URLs to remap. For me this looked like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/lessons/articles/*
/blog/*
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;/blog/&lt;/code&gt; was an old url pattern, but I figured might as well catch those as well. Note that at the end of these, there is a &lt;code&gt;*&lt;/code&gt; to indicate that we still want to catch anything that meets this pattern, even if it has additional characters following the last &lt;code&gt;/&lt;/code&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  Add &lt;code&gt;:splat&lt;/code&gt; redirects
&lt;/h3&gt;

&lt;p&gt;Now we'll add a tab or two at the end of each line and follow that with the new URL to direct to.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/lessons/articles/*     /lessons/:splat
/blog/*                 /lessons
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On the first line, you'll notice we're using &lt;code&gt;:splat&lt;/code&gt; - this will return everything that was caught by the &lt;code&gt;*&lt;/code&gt; in our first column, so &lt;code&gt;/lessons/articles/myBlogPost&lt;/code&gt; will become &lt;code&gt;/lessons/myBlogPost&lt;/code&gt; and &lt;code&gt;/lessons/articles/2022/postName&lt;/code&gt; will become &lt;code&gt;/lessons/2022/postName&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;A few days after publishing these updates, my Search Console was back to normal 🎉&lt;/p&gt;

&lt;p&gt;For more information see &lt;a href="https://docs.netlify.com/routing/redirects/" rel="noopener noreferrer"&gt;Netlify's Redirects and Rewrites docs&lt;/a&gt;! &lt;/p&gt;

</description>
      <category>netlify</category>
      <category>blogging</category>
      <category>seo</category>
      <category>nuxt</category>
    </item>
  </channel>
</rss>
