<?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: Trae Zeeofor</title>
    <description>The latest articles on DEV Community by Trae Zeeofor (@trae_z).</description>
    <link>https://dev.to/trae_z</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%2F373632%2Fc65c8400-85ec-475f-bf72-29ca8582007d.png</url>
      <title>DEV Community: Trae Zeeofor</title>
      <link>https://dev.to/trae_z</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/trae_z"/>
    <language>en</language>
    <item>
      <title>The Misconceptions of Tech Work | The Future of Work in Africa</title>
      <dc:creator>Trae Zeeofor</dc:creator>
      <pubDate>Mon, 09 Mar 2026 20:47:51 +0000</pubDate>
      <link>https://dev.to/trae_z/the-misconceptions-of-tech-work-the-future-of-work-in-africa-2egn</link>
      <guid>https://dev.to/trae_z/the-misconceptions-of-tech-work-the-future-of-work-in-africa-2egn</guid>
      <description>&lt;p&gt;On February 12, 2026, I had the privilege of being a guest on the 𝗕𝗿𝗮𝘇𝗲𝗻 𝗘𝘅𝗰𝗵𝗮𝗻𝗴𝗲 𝗣𝗼𝗱𝗰𝗮𝘀𝘁 with 𝗩𝗮𝗻𝗲𝘀𝘀𝗮 𝗘𝗺𝗲𝗮𝗱𝗶.&lt;/p&gt;

&lt;p&gt;The episode is titled: “𝙏𝙝𝙚 𝙈𝙞𝙨𝙘𝙤𝙣𝙘𝙚𝙥𝙩𝙞𝙤𝙣𝙨 𝙤𝙛 𝙏𝙚𝙘𝙝 𝙒𝙤𝙧𝙠 | 𝙏𝙝𝙚 𝙁𝙪𝙩𝙪𝙧𝙚 𝙤𝙛 𝙒𝙤𝙧𝙠 𝙞𝙣 𝘼𝙛𝙧𝙞𝙘𝙖.”&lt;/p&gt;

&lt;p&gt;The interview has since been published, and you can watch it here: &lt;a href="https://www.youtube.com/watch?v=VM7Ldjn0u2M" rel="noopener noreferrer"&gt;“https://www.youtube.com/watch?v=VM7Ldjn0u2M”&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’m not usually a public-facing person, but this was refreshing and fun to do. I hope to do more conversations like this in the future around my career and tech.&lt;/p&gt;

&lt;p&gt;Some of the topics we covered include:&lt;br&gt;
My background and transition into tech (3:50)&lt;br&gt;
Misconceptions about tech work (12:20)&lt;br&gt;
Challenges and risks in digital work in Nigeria (18:28)&lt;br&gt;
The role of government and hopes for the future (24:25)&lt;/p&gt;

&lt;p&gt;There are also short-form clips from the episode on the podcast’s pages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://brazen.home.blog/2026/02/28/the-misconceptions-of-tech-work-the-future-of-work-in-africa" rel="noopener noreferrer"&gt;“https://brazen.home.blog/2026/02/28/the-misconceptions-of-tech-work-the-future-of-work-in-africa”&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/@brazenexchangepod" rel="noopener noreferrer"&gt;“https://www.youtube.com/@brazenexchangepod”&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.instagram.com/brazenexchangepodcast" rel="noopener noreferrer"&gt;“https://www.instagram.com/brazenexchangepodcast”&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>futureofwork</category>
      <category>brazenexchange</category>
      <category>nigeriantech</category>
      <category>techinafrica</category>
    </item>
    <item>
      <title>The 48-Hour Infrastructure Overhaul: From Vercel to a Modular Stack</title>
      <dc:creator>Trae Zeeofor</dc:creator>
      <pubDate>Fri, 06 Mar 2026 14:23:58 +0000</pubDate>
      <link>https://dev.to/trae_z/the-48-hour-infrastructure-overhaul-from-vercel-to-a-modular-stack-3bk</link>
      <guid>https://dev.to/trae_z/the-48-hour-infrastructure-overhaul-from-vercel-to-a-modular-stack-3bk</guid>
      <description>&lt;p&gt;The last 48 hours have been intense. I received a &lt;strong&gt;“quota usage” warning from Vercel regarding image optimization&lt;/strong&gt;, which sent me down a rabbit hole of debugging. After cross-referencing documentation for &lt;strong&gt;Vercel&lt;/strong&gt;, &lt;strong&gt;Next.js&lt;/strong&gt;, &lt;strong&gt;Cloudflar&lt;/strong&gt;e, and &lt;strong&gt;PayloadCMS&lt;/strong&gt;, I finally optimized my &lt;strong&gt;Cache-Control headers&lt;/strong&gt;. It’s a common headache when working across multiple layers, since settings can conflict with or override one another.&lt;/p&gt;

&lt;p&gt;Cleaning up the &lt;strong&gt;database fetching cache cod&lt;/strong&gt;e is a minor follow-up task that I’ll wrap up today.&lt;/p&gt;

&lt;p&gt;I’ve since migrated the app from &lt;strong&gt;Vercel to Railway&lt;/strong&gt; to keep costs under control. The transition had its challenges, but the setup is now stable. &lt;strong&gt;Railway&lt;/strong&gt; handles application deployment, database hosting, and custom domain origin, while &lt;strong&gt;Cloudflare&lt;/strong&gt; manages DNS and blob storage. &lt;strong&gt;Zoho&lt;/strong&gt; remains my email host, &lt;strong&gt;Namecheap&lt;/strong&gt; continues to act as the registrar, and the code repository of course still lives on &lt;strong&gt;GitHub&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The long-term goal is to eventually consolidate everything onto a &lt;strong&gt;self-managed VPS&lt;/strong&gt;, but for now this architecture is a massive step forward.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>railwayapp</category>
      <category>vercel</category>
      <category>cloudfare</category>
    </item>
    <item>
      <title>From Notion to Google Drive: A Version Control Decision</title>
      <dc:creator>Trae Zeeofor</dc:creator>
      <pubDate>Fri, 30 Jan 2026 22:34:12 +0000</pubDate>
      <link>https://dev.to/trae_z/from-notion-to-google-drive-a-version-control-decision-246e</link>
      <guid>https://dev.to/trae_z/from-notion-to-google-drive-a-version-control-decision-246e</guid>
      <description>&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%2F6gled34vvtwhp1az3hm7.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%2F6gled34vvtwhp1az3hm7.png" alt="Notion to Google Drive" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I started using &lt;strong&gt;Notion&lt;/strong&gt; in &lt;strong&gt;February 2021&lt;/strong&gt; for my coding notes and as a digital jotter, after moving away from a &lt;strong&gt;local Microsoft Excel&lt;/strong&gt; setup. In &lt;strong&gt;December 2023&lt;/strong&gt;, I was introduced to &lt;strong&gt;Google Drive&lt;/strong&gt; (&lt;strong&gt;Google Docs&lt;/strong&gt; and &lt;strong&gt;Google Sheets&lt;/strong&gt;) while executing a small gig with &lt;strong&gt;Dave Partner (David Chimezie Ozoalor)&lt;/strong&gt;. Since then, I’ve been using both tools consistently to organize my notes and occasionally share documents.&lt;/p&gt;

&lt;p&gt;As of &lt;strong&gt;January 2026&lt;/strong&gt;, it’s time for the next installment: completely abandoning Notion and migrating everything to Google Drive.&lt;/p&gt;

&lt;p&gt;The reason is simple, and it comes down to one killer feature: Google Drive’s &lt;strong&gt;Version History&lt;/strong&gt;. It’s essentially a &lt;strong&gt;Git-like version control&lt;/strong&gt; system for documents, giving you the ability to revisit and recover previous work at any point. As a software developer, version control is non-negotiable. It’s an absolute necessity!&lt;/p&gt;

&lt;p&gt;While Notion tries to approximate this with its &lt;strong&gt;Trash functionality&lt;/strong&gt;, it falls short. Google Drive’s Version History does this properly and reliably.&lt;/p&gt;

&lt;p&gt;Google Docs and Google Sheets will also cover the template workflows I enjoyed in Notion. And since I never used Notion as a website builder, there’s nothing I’ll miss on that front.&lt;/p&gt;

&lt;p&gt;So yeah. It’s time to migrate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;P/S: Correction&lt;/strong&gt;. Notion does have Version History. But free accounts are allowed only 7 days of page history. You need to upgrade to a paid plan to access older versions. Whereas Google allows access beyond 7 days for free! &lt;strong&gt;Go figure!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>notion</category>
      <category>googledrive</category>
      <category>versioncontrol</category>
      <category>knowledgemanagement</category>
    </item>
    <item>
      <title>Marketing, Free Tiers, and the Tools Junior Devs Grow Into Seniors With</title>
      <dc:creator>Trae Zeeofor</dc:creator>
      <pubDate>Wed, 01 Oct 2025 09:55:00 +0000</pubDate>
      <link>https://dev.to/trae_z/marketing-free-tiers-and-the-tools-junior-devs-grow-into-seniors-with-4m03</link>
      <guid>https://dev.to/trae_z/marketing-free-tiers-and-the-tools-junior-devs-grow-into-seniors-with-4m03</guid>
      <description>&lt;p&gt;I remember recent discussions in a developer community I belong to about MongoDB’s marketing efforts in Nigeria, and how they seemed somewhat misplaced given our market strengths and the fact that relational databases often perform better in real-world use cases. But I’ve noticed a few things lately:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Edidiong Asikpo&lt;/strong&gt;, a well-known Nigerian tech lead, joined MongoDB as a Developer Advocate about 8 months ago.
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A good number of recent &lt;strong&gt;freeCodeCamp.org YouTube tutorials around Artificial Intelligence&lt;/strong&gt; use MongoDB as their database of choice.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;PayloadCMS&lt;/strong&gt; (a Next.js-based headless CMS I’m currently specializing in) lists MongoDB as one of its recommended databases, alongside PostgreSQL and SQLite.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I’m currently building an app with &lt;strong&gt;Turso (SQLite) and Prisma&lt;/strong&gt;, and the contrast is clear: while the tech itself is solid, resources are scarce. Most of my guidance comes from documentation and LLMs, since there’s a real lack of beginner-friendly tutorials, courses, and articles on this stack. It highlights how much marketing, community content, and accessible learning materials can shape a technology’s adoption.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I suspect the popularity of the old &lt;strong&gt;MERN stack&lt;/strong&gt; was largely driven by MongoDB’s marketing push and its generous free tier. Today, if you’re learning relational databases, you’ll most likely end up on &lt;strong&gt;Supabase (PostgreSQL)&lt;/strong&gt;, since it’s one of the few free and accessible services for hobby projects (with &lt;strong&gt;Neon&lt;/strong&gt; also starting to gain traction).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Basically, as with any skill development, the work you put in today might feel small, but it compounds over time. The junior devs of today will be the senior devs of tomorrow. And the tools they grow up with, will be the ones they know best.&lt;/p&gt;

</description>
      <category>database</category>
      <category>mongodb</category>
      <category>freetier</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Responsive Layouts Done Right: The Critical Role of max-width</title>
      <dc:creator>Trae Zeeofor</dc:creator>
      <pubDate>Wed, 04 Jun 2025 05:57:23 +0000</pubDate>
      <link>https://dev.to/trae_z/responsive-layouts-done-right-the-critical-role-of-max-width-8m6</link>
      <guid>https://dev.to/trae_z/responsive-layouts-done-right-the-critical-role-of-max-width-8m6</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;If we’re going to talk about &lt;code&gt;max-width&lt;/code&gt;, let’s define it properly first. The &lt;code&gt;max-width&lt;/code&gt; CSS property sets the maximum width of an element. It prevents the width of that element (and its content) from exceeding a specific value, even if there's more space available.&lt;/p&gt;

&lt;p&gt;In today’s digital world, we’re building for a wide range of screen sizes: phones, tablets, laptops, desktops. As web developers, we’re expected to make sites look good and work well across all of them. This is where &lt;code&gt;max-width&lt;/code&gt; becomes a crucial part of your responsive layout toolbox.&lt;/p&gt;

&lt;p&gt;If you’ve ever zoomed in or out in your browser or used developer tools to simulate different screen sizes, you’ve seen how your layout can break when it's not properly handled. It’s easy to unknowingly design just for your own screen, but once you start testing, the need for &lt;code&gt;max-width&lt;/code&gt; becomes clear fast.&lt;/p&gt;

&lt;p&gt;Media queries let you adjust layout styles at different screen widths (often using &lt;code&gt;min-width&lt;/code&gt;), but they’re only part of the picture. &lt;code&gt;max-width&lt;/code&gt; ensures your layout doesn’t stretch too far on large screens, helping maintain visual balance and readability.&lt;/p&gt;

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

&lt;p&gt;As a web developer, your job is to deliver results that meet varied client expectations. Some clients want minimalist layouts; others prefer dense, data-rich views. You’ve got to accommodate all of that, and a strong, responsive layout is your foundation.&lt;/p&gt;

&lt;p&gt;From my experience, there are three main ways developers use &lt;code&gt;max-width&lt;/code&gt; when building responsive layouts. And honestly, none of them should be used in isolation. The best approach is to mix and match based on the project. But this isn’t something to figure out later. Laying a solid foundation early makes future maintenance much easier and helps avoid the pain of tech debt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preparatory Steps
&lt;/h2&gt;

&lt;p&gt;Before diving into layout styles, there are a few setup steps that apply across the board. I’m working from the perspective of a Next.js developer using Tailwind CSS, but the principles here apply no matter the tech stack. It’s all just HTML and CSS at the core.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In your root layout (usually in the &lt;code&gt;/app&lt;/code&gt; folder for Next.js), set your &lt;code&gt;html&lt;/code&gt; and &lt;code&gt;body&lt;/code&gt; tags to take up the full width of the viewport. This ensures you're working with all the horizontal space the device offers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Page width should be defined at the route or route layout level, not globally, so you can fine-tune the experience per page.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Consider using multiple layouts for different routes. This gives you the flexibility to tweak content structure per page instead of being stuck with one layout that works in one place but not another.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Let headers and footers span full width (like the root &lt;code&gt;html&lt;/code&gt; and &lt;code&gt;body&lt;/code&gt; elements) for consistency.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Approach 1: Fixed Max Width (Most Common)
&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%2F90l54tnj47kf9705j9tm.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%2F90l54tnj47kf9705j9tm.png" alt="Fixed Max Width" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first and most common method is to set a fixed &lt;code&gt;max-width&lt;/code&gt;, usually 1440px, and center your content. This means your content won't expand beyond 1440px, no matter how wide the screen gets. The extra space on either side just shows the background color or background image.&lt;/p&gt;

&lt;p&gt;This approach is used by most major websites: Al Jazeera, CNN, Flutterwave, Paystack, and others. It gives you predictability and keeps your design clean across devices. While some older sites go narrower, 1440px is a solid standard that offers enough breathing room for modern content.&lt;/p&gt;

&lt;h2&gt;
  
  
  Approach 2: Multi-Column Grid with Fixed Total Width
&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%2F75qgllexwqa5qp718af1.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%2F75qgllexwqa5qp718af1.png" alt="Multi-Column Grid with Fixed Total Width" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The second approach is a multi-column layout, typically two or three columns each with a fixed width. For example, one aligned left, one centered, and maybe one on the right. Together, their widths add up to the same total (often 1440px). As the screen gets wider, the spacing between columns grows, but the columns themselves stay the same width.&lt;/p&gt;

&lt;p&gt;This layout is less common, probably less than 5% of sites. But you’ll see it on platforms like Reddit, Facebook, and Instagram.&lt;/p&gt;

&lt;h2&gt;
  
  
  Approach 3: Fixed + Fluid Column Combo
&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%2Faodr6143o0fbz2op6tlo.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%2Faodr6143o0fbz2op6tlo.png" alt="Fixed + Fluid Column Combo" width="800" height="639"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This one is rare, but powerful when used right. You have two columns: one fixed (or with a &lt;code&gt;max-width&lt;/code&gt;) and one fluid. The fluid column grows as the window gets wider. You’ll see this in layouts that prioritize a single stream of content, like Gmail’s inbox view or YouTube’s video gallery.&lt;/p&gt;

&lt;p&gt;This layout works well when one section of your page is the clear focus and needs the majority of the space, with less important or secondary info off to the side.&lt;/p&gt;

&lt;h2&gt;
  
  
  Best Practice Checklist
&lt;/h2&gt;

&lt;p&gt;No matter which layout you choose, a few things always apply:&lt;/p&gt;

&lt;p&gt;1 Keep widths consistent across components on the same page. Don’t pair a 1024px &lt;code&gt;max-width&lt;/code&gt; component with a 1280px &lt;code&gt;max-width&lt;/code&gt; sibling component, it’ll look messy.&lt;/p&gt;

&lt;p&gt;2 Combine media queries with &lt;code&gt;max-width&lt;/code&gt; for the best experience. Media queries handle changes as the screen grows, while &lt;code&gt;max-width&lt;/code&gt; keeps layout under control as screens get large.&lt;/p&gt;

&lt;p&gt;3 Tailwind’s built-in breakpoints are perfect for this. Build mobile-first at 320px minimum width, then scale up at the breakpoints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;sm&lt;/code&gt; (640px) minimum width&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;md&lt;/code&gt; (768px) minimum width&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;lg&lt;/code&gt; (1024px) minimum width&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;xl&lt;/code&gt; (1280px) minimum width&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;2xl&lt;/code&gt; (1536px) minimum width&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With the right layout strategy and a smart use of &lt;code&gt;max-width&lt;/code&gt;, you can make your site feel polished, stable, and readable on every screen size.&lt;/p&gt;

</description>
      <category>responsivedesign</category>
      <category>weblayouts</category>
      <category>maxwidth</category>
      <category>mediaqueries</category>
    </item>
    <item>
      <title>Breaking into Tech at Midlife: A Nigerian’s Career Transition Story</title>
      <dc:creator>Trae Zeeofor</dc:creator>
      <pubDate>Thu, 13 Feb 2025 07:12:02 +0000</pubDate>
      <link>https://dev.to/trae_z/breaking-into-tech-at-midlife-a-nigerians-career-transition-story-4ghi</link>
      <guid>https://dev.to/trae_z/breaking-into-tech-at-midlife-a-nigerians-career-transition-story-4ghi</guid>
      <description>&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%2Fclehapmenkid65b0vsfj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fclehapmenkid65b0vsfj.jpg" alt="Juggling Tech and Fatherhood. Circa January 2024" width="800" height="800"&gt;&lt;/a&gt;&lt;em&gt;Juggling Tech and Fatherhood. Circa January 2024&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1 Introduction
&lt;/h2&gt;

&lt;p&gt;Like a mature spinster eventually finding a husband, on January 6, 2025, at the ancient age of 41, and a little over two and a half years into my self-study journey, I was finally adjudged to have learned enough code to land a job where someone agreed to pay me regularly for writing it professionally.&lt;/p&gt;

&lt;p&gt;This milestone was especially sweet, given that, through the years since being bitten by the tech bug, I must have read countless stories of others who had made the leap into tech. Now, I'm thrilled to at last be on the other side, with my own story to tell.&lt;/p&gt;

&lt;h2&gt;
  
  
  2 My Past Career
&lt;/h2&gt;

&lt;p&gt;Since earning my BSc, I’ve had a diverse and nomadic career, primarily in sales, with stints in videography, teaching, and compliance. I’ve worked full-time at over ten companies and have a strong track record of securing jobs on merit. Throughout my career, I’ve led teams across multiple roles, managed subordinates effectively, and consistently met or exceeded targets.&lt;/p&gt;

&lt;p&gt;However, in hindsight, I see that I wasn’t without flaws. While I thoroughly understood my job responsibilities, I struggled with office politics. I failed to grasp a crucial truth: managing downlines is essential for survival, but managing uplines is the key to thriving. To truly unlock one’s full career potential, being liked—or even loved—by peers and bosses is just as important as competence.&lt;/p&gt;

&lt;p&gt;Looking deeper, I suspect this challenge traces back to my childhood. Having been bullied extensively as a child and teen, I became a loner. While this had its benefits—I never succumbed to peer pressure and have never smoked or done drugs—it also made bonding and teamwork difficult. I often prioritized my own path over building goodwill with colleagues, and in the long run, these missteps stunted my professional growth.&lt;/p&gt;

&lt;p&gt;Reading &lt;strong&gt;Adedeji Olowe&lt;/strong&gt;’s reflections on his early career struggles resonated deeply with me. His story felt strikingly familiar and reinforced many of my own realizations. (Read his story here: &lt;a href="https://dejiolowe.com/2024/12/11/let-he-who-is-without-sin-cast-the-first-stone" rel="noopener noreferrer"&gt;“https://dejiolowe.com/2024/12/11/let-he-who-is-without-sin-cast-the-first-stone”&lt;/a&gt;)&lt;/p&gt;

&lt;h2&gt;
  
  
  3 Personal State Of Mind
&lt;/h2&gt;

&lt;p&gt;I've always had a natural enthusiasm for tech—I wrote my first HTML and CSS codes around 2002. However, with little guidance, I never pursued it seriously. Sales was fulfilling, but ultimately, it felt like a generic skill—one that anyone could be trained in within days.&lt;/p&gt;

&lt;p&gt;As I grew older, I began to truly believe in the saying: "&lt;em&gt;If you want an easier life, learn to solve harder problems&lt;/em&gt;." That mindset became the driving force behind my decision to embrace tech—a field where I believed I could create impactful solutions, tackle more complex challenges, and ultimately retire well off.&lt;/p&gt;

&lt;p&gt;To develop my tech skills, I drew inspiration from my fitness journey. Since August 2020, I’ve been a dedicated calisthenics practitioner, hitting the gym at least three times a week. Both tech and fitness are romanticized and filled with hype—many start, but fewer than 10% follow through. I've witnessed this at the gym, and I've seen it in tech with two of my earliest study buddies who eventually dropped off. But I made fitness a lifestyle through unwavering commitment and consistency. I knew that if I could master calisthenics, I could apply the same discipline to mastering tech.&lt;/p&gt;

&lt;p&gt;Becoming a first-time father in July 2023 was a pivotal moment that further fueled my motivation to stay focused on my goals. My aim is to provide a better life for my son than I had, so he can, in turn, build a brighter future for his own children and community.&lt;/p&gt;

&lt;p&gt;I chose the self-taught path not only because I'm a bit frugal (lol), but also because, in tech, knowledge cannot be mechanically transmitted—it can only be acquired through deep self-study. Ultimately, you're responsible for your own success. Furthermore, web development isn’t a field defined by certifications—it’s about evidence-based skills. I’ve always believed that JavaScript—and software development in general—isn’t something best learned in tech schools or boot camps. At best, they’re appetizers. True mastery comes from making it a lifestyle and consistently working on it day and night for months or even years.&lt;/p&gt;

&lt;p&gt;Throughout this journey, I’ve kept &lt;strong&gt;Ekpa Ntan&lt;/strong&gt;’s (a senior colleague I met earlier &lt;a href="https://www.linkedin.com/in/ekpa-ntan-3571299b/" rel="noopener noreferrer"&gt;“https://www.linkedin.com/in/ekpa-ntan-3571299b/”&lt;/a&gt;) words close to heart: &lt;em&gt;'Never stop learning, never stop practicing, never stop improving. It's better to be prepared and not have opportunities yet than to spot opportunities and not be sufficiently qualified for them”&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  4 My Coding Journey
&lt;/h2&gt;

&lt;p&gt;Everyone's coding journey is unique, with some progressing faster than others. My own journey has been long and winding, marked by periods of intense focus punctuated by distractions. However, in April 2022, circumstances changed, and I made the decision to commit to learning full-time.&lt;/p&gt;

&lt;p&gt;A personal setback in December 2022—when my car was stolen—further galvanized my determination. I doubled down on my efforts, adopting a “do or die” mentality, driven by the promise of future rewards far surpassing this loss.&lt;/p&gt;

&lt;p&gt;It’s important to note that the bar for entering the tech industry has risen significantly. The skills that were sufficient for landing a job in 2016 are no longer enough; today, you need to know at least 10 times more to be competitive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4A. My Coding Timeline&lt;/strong&gt;&lt;br&gt;
I’ve always embraced project-based learning, which is the standard in web development. I’ve built projects based on what I’ve learned and estimate that I’ve deployed over 100 finished apps to GitHub at one point or another (though many of the earlier ones have since been deleted). My initial projects were mostly sourced from &lt;strong&gt;FrontendMentor&lt;/strong&gt; &lt;a href="https://frontendmentor.io/" rel="noopener noreferrer"&gt;“https://frontendmentor.io/”&lt;/a&gt;, and I highly recommend them.&lt;/p&gt;

&lt;p&gt;Here’s a brief overview of my journey:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;April – June 2022: Brushed up on HTML &amp;amp; CSS over two months while learning intermittently.&lt;/li&gt;
&lt;li&gt;Mid to Late 2022: Focused on JavaScript, building projects consistently. My WhatsApp friends can testify—I spammed them with countless project links for feedback.&lt;/li&gt;
&lt;li&gt;Early 2023: Started learning React, Next.js, TypeScript, and Tailwind CSS, building projects along the way.&lt;/li&gt;
&lt;li&gt;First Interviews (Early 2023): Quickly realized I needed to upskill significantly to be job-ready.&lt;/li&gt;
&lt;li&gt;November 2023: Began grinding LeetCode daily for consistency.&lt;/li&gt;
&lt;li&gt;Late 2023: Started backend development with Node.js, Express, and MongoDB (MERN stack).&lt;/li&gt;
&lt;li&gt;Early 2024: Landed an unpaid internship for three months, which exposed me to real-world tech environments.&lt;/li&gt;
&lt;li&gt;Mid 2024: Expanded into SQL, relational databases, ORMs, API development, testing, and authentication.&lt;/li&gt;
&lt;li&gt;Q3 2024: Earned my first pay from coding (converting Figma designs to code—though I didn’t deliver 100%). Also started interviewing more seriously.&lt;/li&gt;
&lt;li&gt;Q4 2024: Interview-heavy phase, applying more strategically, improving my performance, and continuously upskilling.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4B. How Coding Became a Lifestyle&lt;/strong&gt;&lt;br&gt;
Tech became more than just a career path—it became my lifestyle. I actively participated in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mark Essien’s HNG Internship (2023)&lt;/li&gt;
&lt;li&gt;Multiple Chingu cohorts (pair programming &amp;amp; team projects)&lt;/li&gt;
&lt;li&gt;Tech spaces on Twitter, engaging in discussions and networking&lt;/li&gt;
&lt;li&gt;Tech-focused YouTube channels, absorbing valuable insights&lt;/li&gt;
&lt;li&gt;Discord &amp;amp; Telegram coding communities, learning and sharing knowledge&lt;/li&gt;
&lt;li&gt;Numerous physical &amp;amp; online interviews, including take-home assessments&lt;/li&gt;
&lt;li&gt;Extensive use of AI for learning &amp;amp; productivity&lt;/li&gt;
&lt;li&gt;Countless hobby projects &amp;amp; technical writing, refining my skills&lt;/li&gt;
&lt;li&gt;Optimized my Twitter and LinkedIn connections to center around the tech industry, engaging mainly with developers, engineers, and tech enthusiasts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By late 2024, all this effort culminated in my first official coding job. It was a long road of relentless learning, continuous self-improvement, and unwavering determination.&lt;/p&gt;

&lt;h2&gt;
  
  
  5 Learning Resource Recommendations
&lt;/h2&gt;

&lt;p&gt;For full-stack web development, I relied heavily on the following three interactive and free resources:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;freeCodeCamp&lt;/strong&gt; &lt;a href="https://www.freecodecamp.org/learn" rel="noopener noreferrer"&gt;“https://www.freecodecamp.org/learn”&lt;/a&gt;.&lt;br&gt;
&lt;strong&gt;Codecademy&lt;/strong&gt; &lt;a href="https://www.codecademy.com/catalog" rel="noopener noreferrer"&gt;“https://www.codecademy.com/catalog”&lt;/a&gt;.&lt;br&gt;
&lt;strong&gt;Scrimba&lt;/strong&gt; &lt;a href="https://v2.scrimba.com/courses" rel="noopener noreferrer"&gt;“https://v2.scrimba.com/courses”&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In addition to these resources, I generously utilized &lt;strong&gt;YouTube&lt;/strong&gt; tutorials and courses to dive deeper into specific topics as needed.&lt;/p&gt;

&lt;p&gt;For career path guidance and a comprehensive roadmap, I frequently referred to &lt;strong&gt;The Odin Project&lt;/strong&gt; &lt;a href="https://www.theodinproject.com/paths" rel="noopener noreferrer"&gt;“https://www.theodinproject.com/paths”&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As I gained more experience, I began relying more on &lt;strong&gt;official documentation&lt;/strong&gt; as a primary learning resource. Reading and consulting documentation became an essential part of my education, helping me understand frameworks, libraries, and best practices directly from the source.&lt;/p&gt;

&lt;h2&gt;
  
  
  6 Practical Reality of Software Development
&lt;/h2&gt;

&lt;p&gt;Acquiring new skills, whether for a career change or otherwise, is a process that takes time. Be wary of anyone promising instant results, such as learning X in 90 days and making big money. These claims are often designed to exploit desperation and extract payment for courses or other resources.&lt;/p&gt;

&lt;p&gt;Many Nigerians who made a midlife career change after relocating abroad (Japa) can attest that success didn't come overnight. It took them time, often a couple of years, to find balance and stability. The key is to stay resolute and focused on long-term goals.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6A. The Two-Part Journey of Learning to Code&lt;/strong&gt;&lt;br&gt;
Learning to code is a two-part journey:&lt;br&gt;
&lt;strong&gt;The first and hardest part&lt;/strong&gt; – Becoming skilled enough to land your first job.&lt;br&gt;
&lt;strong&gt;The second, lifelong part&lt;/strong&gt; – Committing to continuous learning so you can grow, stay relevant, and maybe even "blow". I’m all in for both!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6B. Navigating Tech as a Midlife Career Changer&lt;/strong&gt;&lt;br&gt;
Be prepared for disrespect, especially in Nigeria, where cheap labor is abundant. Keep your eyes on the end goal and stay the course.&lt;br&gt;
Your first job won’t be glamorous, but it gets you in the door. The key difference? You’ll be writing production-ready code, not just hobby projects.&lt;br&gt;
Humble beginnings are part of the process. They build your experience and propel your skillset—a necessary rite of passage.&lt;br&gt;
If you persist, the sky's the limit! Options include freelancing (Upwork, etc.), applying for high-paying remote jobs, or emigrating as a skilled worker. Either way, software development makes you a highly sought-after professional.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6C. Dealing With Ageism&lt;/strong&gt;&lt;br&gt;
Ageism exists. (I’m the oldest person in my branch and likely among the oldest persons in my company.) While it can be challenging, it’s not impossible to thrive in spite of it.&lt;/p&gt;

&lt;p&gt;Stay humble. De-emphasize age in your CV and personal branding. What matters is what you can do, not how old you are.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6D. Ideal vs. Reality of Transitioning to Tech&lt;/strong&gt;&lt;br&gt;
The best time to transition is during your university days, NYSC, or as a job seeker, when you don’t have heavy financial responsibilities.&lt;/p&gt;

&lt;p&gt;If you’re older, you must make extreme sacrifices, devoting most of your time and attention to code. Plus have other sources of income to sustain yourself while learning.&lt;/p&gt;

&lt;p&gt;Expect it to take at least anywhere from 1 to 3 years before you can minimally sustain yourself with your tech earnings.&lt;/p&gt;

&lt;p&gt;And If you can’t keep the hunger away long enough to focus and learn tech, you honestly won’t make it.&lt;/p&gt;

&lt;h2&gt;
  
  
  7 My Job story
&lt;/h2&gt;

&lt;p&gt;I’ll never forget the path that led me to my current role. Ironically, the same company that hired me had previously rejected me for a volunteer position. That rejection was a stark reminder of my desperation at the time—I was applying to every opportunity that crossed my path, regardless of fit, just to gain interview experience.&lt;/p&gt;

&lt;p&gt;This wasn’t my first time applying twice to the same company. In fact, I had reached the interview stage twice at two other companies before ultimately failing both times.&lt;/p&gt;

&lt;p&gt;However, perseverance eventually paid off. Here’s a brief timeline of my final application and hiring process: Everything was done remotely prior to hiring. But work is onsite.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;November 16, 2024&lt;/strong&gt; – Submitted my first application for a different role, but the interview was unsuccessful.&lt;br&gt;
&lt;strong&gt;December 25, 2024&lt;/strong&gt; – Reapplied to the company.&lt;br&gt;
&lt;strong&gt;December 27, 2024&lt;/strong&gt; – Attended my first interview.&lt;br&gt;
&lt;strong&gt;December 31, 2024&lt;/strong&gt; – Completed a take-home test.&lt;br&gt;
&lt;strong&gt;January 3, 2025&lt;/strong&gt; – Participated in a review session for the take-home project.&lt;br&gt;
&lt;strong&gt;January 6, 2025&lt;/strong&gt; – Started work on an initial three-month contract.&lt;/p&gt;

&lt;p&gt;This experience reinforced an important lesson: rejection isn’t failure—it’s just a step in the process. Keep learning, keep improving, and keep trying. Eventually, the right door will open.&lt;/p&gt;

&lt;h2&gt;
  
  
  8 Real-Life Stories of Resilience in Tech
&lt;/h2&gt;

&lt;p&gt;The current tech landscape is undeniably challenging. Layoffs, remote work shifts, and AI-driven automation have made it easier for companies to outsource tasks, increasing job uncertainty. However, for many African developers, our lower capital costs make us attractive outsourcing candidates—creating opportunities despite the global downturn.&lt;/p&gt;

&lt;p&gt;Even in the U.S., I’ve seen several experienced tech YouTubers I follow navigate layoffs and eventually find new jobs in 2024, proving that persistence pays off. Here are some of their their inspiring stories:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chris Sean&lt;/strong&gt;: "It Took Me 9 Months To Get A New Tech Job | Life as a Web Developer 2024" (July 9, 2024) &lt;a href="https://www.youtube.com/watch?v=Vt2TwifKh30&amp;amp;t=22s&amp;amp;ab_channel=ChrisSean" rel="noopener noreferrer"&gt;“https://www.youtube.com/watch?v=Vt2TwifKh30&amp;amp;t=22s&amp;amp;ab_channel=ChrisSean”&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cody Codes&lt;/strong&gt;: "I got a Software Engineering Job in the WORST job market (2024)" (October 10, 2024) &lt;a href="https://www.youtube.com/watch?v=IUVRsUiBMb8&amp;amp;ab_channel=CodyCodes" rel="noopener noreferrer"&gt;“https://www.youtube.com/watch?v=IUVRsUiBMb8&amp;amp;ab_channel=CodyCodes”&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Namanh Kapur&lt;/strong&gt;: "Laid Off to Senior Software Engineer at LinkedIn (My Story)" (November 27, 2024) &lt;a href="https://www.youtube.com/watch?v=AdWM3q8fiHE&amp;amp;t=2s&amp;amp;ab_channel=NamanhKapur" rel="noopener noreferrer"&gt;“https://www.youtube.com/watch?v=AdWM3q8fiHE&amp;amp;t=2s&amp;amp;ab_channel=NamanhKapur”&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bukola&lt;/strong&gt;: "I Got An Offer | Job Searching In A Tough Tech Market Ep 4" (January 5, 2025) &lt;a href="https://www.youtube.com/watch?v=B9Ky_EN6Z2s&amp;amp;ab_channel=Bukola" rel="noopener noreferrer"&gt;“https://www.youtube.com/watch?v=B9Ky_EN6Z2s&amp;amp;ab_channel=Bukola”&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These stories reinforce a simple truth: where there’s a will, there’s a way.&lt;/p&gt;

&lt;p&gt;To successfully navigate today’s job market, it’s essential to:&lt;br&gt;
✅ Save money to weather uncertain periods.&lt;br&gt;
✅ Diversify income streams to reduce reliance on a single job.&lt;br&gt;
✅ Stay adaptable and continuously learn new skills.&lt;/p&gt;

&lt;p&gt;The tech industry is tough, but resilience and strategy can make all the difference.&lt;/p&gt;

&lt;h2&gt;
  
  
  9 Heartfelt Shout-Outs
&lt;/h2&gt;

&lt;p&gt;I'd like to extend my heartfelt gratitude to the following individuals who have supported me throughout my journey:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My wife, Neky&lt;/strong&gt; – For making this journey possible in every way.&lt;br&gt;
&lt;strong&gt;Solomon Ekrebe&lt;/strong&gt; &lt;a href="https://www.linkedin.com/in/krebedev/" rel="noopener noreferrer"&gt;“https://www.linkedin.com/in/krebedev/”&lt;/a&gt; – For always lending a listening ear and providing guidance from Day 1.&lt;br&gt;
&lt;strong&gt;Obinna Akunne&lt;/strong&gt; &lt;a href="https://www.linkedin.com/in/obinna-akunne-080b5273/" rel="noopener noreferrer"&gt;“https://www.linkedin.com/in/obinna-akunne-080b5273/”&lt;/a&gt; – My cousin, for being a real-life example of the possibilities before me.&lt;br&gt;
&lt;strong&gt;Chinonso Ani&lt;/strong&gt; &lt;a href="https://www.linkedin.com/in/chinonso-ani/" rel="noopener noreferrer"&gt;“https://www.linkedin.com/in/chinonso-ani/”&lt;/a&gt; – For giving me the privilege of my first real work experience simulations.&lt;br&gt;
&lt;strong&gt;All four of my living siblings&lt;/strong&gt; – For loving me unconditionally.&lt;/p&gt;

&lt;p&gt;Thank you all for your encouragement and motivation. I couldn’t have done it without you.&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
      <category>webdev</category>
      <category>techcareerjourney</category>
      <category>selftaughtdeveloper</category>
    </item>
    <item>
      <title>Efficient Shortlisting in Programming (Software Development) hiring</title>
      <dc:creator>Trae Zeeofor</dc:creator>
      <pubDate>Sun, 24 Nov 2024 11:04:03 +0000</pubDate>
      <link>https://dev.to/trae_z/efficient-shortlisting-in-programming-software-development-hiring-18o4</link>
      <guid>https://dev.to/trae_z/efficient-shortlisting-in-programming-software-development-hiring-18o4</guid>
      <description>&lt;p&gt;The subject matter refers. This is a subjective take based on my cumulative experiences during my career transition to tech. I'm confident that, if applied, it proves true for about 90% of entry-level or junior tech roles' job application feedback any candidate would receive.&lt;/p&gt;

&lt;p&gt;Tech as a profession is highly remote-friendly. When all is said and done, it’s just you, your table, your chair, and your computer. You muse over logic, give instructions to your computer based on that logic, and await results. It’s a career path of constant learning, application of learnings, and continuous engagement.&lt;/p&gt;

&lt;p&gt;Time is, therefore, extremely valuable for everyone in tech—be it an employer creating jobs, an employee fulfilling them, or an aspiring employee seeking to fill those roles.&lt;/p&gt;

&lt;p&gt;Efficient tech hiring should, consequently, eliminate time wastage. Employers want to be excited and confident that the hiring process will yield successful outcomes. They aim to ensure that candidates they carve out time to interview are reasonably sound in their fundamentals and capable of getting the job done. Efficient shortlisting avoids engaging with every Tom, Dick, and Harry screaming for a tech internship or job. Instead, it seeks out those who go the extra mile to prepare and demonstrate readiness. Employers intentionally prune candidates to streamline the process before committing time to interviews.&lt;/p&gt;

&lt;p&gt;From this perspective, I confidently assert that if a candidate wants to assess whether a job they’re applying for will be worth it—both in terms of career growth and remuneration—the &lt;strong&gt;first stage of recruitment&lt;/strong&gt; for such a job would typically include one of the following:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1 A take-home coding assignment&lt;/strong&gt; to complete a task.&lt;br&gt;
&lt;strong&gt;2 A technical coding test&lt;/strong&gt; to gauge skill. Platforms like TestGorilla, a talent assessment site for skills-based hiring, are widely used for this purpose.&lt;br&gt;
&lt;strong&gt;3 A technical interview conducted online&lt;/strong&gt;, featuring a barrage of on-the-spot technical questions related to everyday work responsibilities, designed to clearly evaluate the candidate's skill-based suitability for the role.&lt;/p&gt;

&lt;p&gt;In this "T-Pain economy," if you apply for a programming job where the recruiter sets a physical interview as the first hurdle, it’s a red flag. Such roles are likely to undervalue your potential and view you as easily dispensable. Furthermore, these positions are unlikely to push you to your full capabilities or foster meaningful career growth.&lt;/p&gt;

</description>
      <category>programmingjobs</category>
      <category>careergrowth</category>
      <category>remotework</category>
      <category>techhiring</category>
    </item>
    <item>
      <title>Integrating Tailwind CSS into Vanilla HTML/JS Projects</title>
      <dc:creator>Trae Zeeofor</dc:creator>
      <pubDate>Mon, 05 Aug 2024 06:23:13 +0000</pubDate>
      <link>https://dev.to/trae_z/integrating-tailwind-css-into-vanilla-htmljs-projects-4ag1</link>
      <guid>https://dev.to/trae_z/integrating-tailwind-css-into-vanilla-htmljs-projects-4ag1</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br&gt;
This article contains technical language intended for programmers who are familiar with the term Tailwind CSS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Power of React and Tailwind CSS&lt;/strong&gt;&lt;br&gt;
For React.js-loving web developers, and by extension other framework users, Tailwind CSS has been revolutionary. React already makes coding easier by allowing you to write your HTML and JavaScript together in one file, and Tailwind CSS takes it further by also allowing you to include CSS in the mix. This creates a very efficient trinity for building web applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Transitioning to Vanilla HTML and JavaScript&lt;/strong&gt;&lt;br&gt;
However, there comes a time when we're forced away from frameworks and faced with the option of building with vanilla HTML and JavaScript, as I was recently for a small gig. This made me look into the documentation to confirm if Tailwind CSS was also compatible with vanilla HTML and JavaScript. I was happy to find out it was.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tailwind CSS with Vanilla HTML and JavaScript&lt;/strong&gt;&lt;br&gt;
Looking at the documentation, there are two ways to get this done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Play CDN Approach&lt;/strong&gt;&lt;br&gt;
First, there's the simple but crude “Play CDN” (Content Delivery Network) approach where you simply include an external script linking to the Tailwind CSS library in your HTML head section. This method, however, is only for development purposes and not suited for production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The CLI Tool Approach&lt;/strong&gt;&lt;br&gt;
Then, there is the production-recommended approach where you install Tailwind CSS in your application via the CLI (Command-Line Interface) tool. The CLI approach is way more performant and is what I eventually used to get the job done. But I won't lie, getting it done satisfactorily was not a straightforward process. The documentation was not explicit enough, and it took the combined effort of the &lt;a href="https://tailwindcss.com/docs/installation" rel="noopener noreferrer"&gt;documentation itself&lt;/a&gt;, a &lt;a href="https://www.youtube.com/watch?v=arftp8kFBBg" rel="noopener noreferrer"&gt;YouTube tutorial on the matter&lt;/a&gt;, explanations from the senior developer who gave me the contract, and my own process analytics as a very knowledge-seeking junior developer to be able to successfully get the installation and, by extension, the job done. Hence this technical writing post to make things easier for you who are also trying to get the same done for the first time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-by-Step Guide&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqxdvz1qan5k3mosd1fza.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%2Fqxdvz1qan5k3mosd1fza.png" alt="Project structure" width="800" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1 Create a Project Folder&lt;/strong&gt;: First, you need to create a project folder on your computer to host your app repository. Inside the project folder, create a &lt;code&gt;“src”&lt;/code&gt; folder to host core files as is conventionally done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2 Create Necessary Files&lt;/strong&gt;: In the src folder, create the following empty files: &lt;code&gt;index.html&lt;/code&gt;, &lt;code&gt;input.css&lt;/code&gt;, and &lt;code&gt;output.css&lt;/code&gt;. &lt;code&gt;index.html&lt;/code&gt; is your application entry point holding your project's HTML. &lt;code&gt;input.css&lt;/code&gt; will hold a few lines of Tailwind configurations and other custom CSS classes you create for situations where Tailwind utility classes alone are inadequate. The &lt;code&gt;output.css&lt;/code&gt; will hold the transpiled vanilla CSS from &lt;code&gt;input.css&lt;/code&gt;, your &lt;code&gt;tailwind.config.js&lt;/code&gt; file, and other utility classes provided by the Tailwind framework. Yes, just like TypeScript is transpiled to JavaScript for production purposes, Tailwind CSS needs to be transpiled to vanilla CSS to work in production.&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%2F6wkwiwbbsxdtoxj2sddn.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%2F6wkwiwbbsxdtoxj2sddn.png" alt="Install Tailwind CSS" width="726" height="202"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3 Install Tailwind CSS&lt;/strong&gt;:&lt;br&gt;
First, run &lt;code&gt;npm install -D tailwindcss&lt;/code&gt;&lt;br&gt;
This command installs Tailwind CSS as a development dependency in your project using npm (Node Package Manager). You can also use Yarn or Bun package managers.&lt;br&gt;
Then run &lt;code&gt;npx tailwindcss init&lt;/code&gt;&lt;br&gt;
This command uses &lt;code&gt;npx&lt;/code&gt; (a package runner tool that comes with &lt;code&gt;npm&lt;/code&gt;) to initialize a Tailwind CSS configuration file in your project. Running this command creates a &lt;code&gt;tailwind.config.js&lt;/code&gt; file, which you can customize to configure Tailwind's settings and extend its default configuration. This process also creates a &lt;code&gt;package.json&lt;/code&gt; file for your app.&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%2F7utqgl4yb97lg8edlw0m.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%2F7utqgl4yb97lg8edlw0m.png" alt="Configure Your Template Paths" width="730" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4 Configure Your Template Paths&lt;/strong&gt;: Add the paths to all of your template files in your &lt;code&gt;tailwind.config.js&lt;/code&gt; file:&lt;br&gt;
&lt;code&gt;content: ["./src/**/*.{html,js}"],&lt;/code&gt;&lt;br&gt;
This is the essence of creating the src folder because, like is done in React or Next.js, Tailwind expects it as the path where your core app files reside.&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%2Fszmj9amg6vf4npd5hfwg.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%2Fszmj9amg6vf4npd5hfwg.png" alt="Add the Tailwind Directives to Your input.css File" width="729" height="241"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5 Add the Tailwind Directives to Your input.css File&lt;/strong&gt;: Add the &lt;code&gt;@tailwind&lt;/code&gt; directives for each of Tailwind’s layers to your main CSS file. This is just like is done when using Tailwind in frameworks like React/Next.js.&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%2Fu3cymb3pxmo8j5w8zzuu.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%2Fu3cymb3pxmo8j5w8zzuu.png" alt="Start the Tailwind CLI Build Process" width="800" height="110"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkvrbzhxuvohsxd30b9we.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%2Fkvrbzhxuvohsxd30b9we.png" alt="script in package.json" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6 Start the Tailwind CLI Build Process&lt;/strong&gt;: Run the CLI tool to scan your template files for classes and build your CSS:&lt;br&gt;
&lt;code&gt;npx tailwindcss -i ./src/input.css -o ./src/output.css --watch&lt;/code&gt;&lt;br&gt;
Note that whenever you make changes to your &lt;code&gt;tailwind.config&lt;/code&gt; and maybe &lt;code&gt;input.css&lt;/code&gt; file, your app will need to rebuild to stay updated. It’s not efficient to always have to type out or copy and paste this command, so it's wise to create a script in &lt;code&gt;package.json&lt;/code&gt; that holds this command. That way, you can easily trigger the build process by simply running the command &lt;code&gt;npm run dev&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1n3aoubgijuoafz2i9ap.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%2F1n3aoubgijuoafz2i9ap.png" alt="Start Using Tailwind in Your HTML" width="732" height="610"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7 Start Using Tailwind in Your HTML&lt;/strong&gt;: Add your compiled CSS file to the &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; and start using Tailwind’s utility classes to style your content. Go ahead and use Tailwind CSS utility classes to style. If using VS Code, you can install the Tailwind CSS IntelliSense extension to give &lt;code&gt;class&lt;/code&gt; suggestions and confirmation as you type.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8 See the End Result of Your Code&lt;/strong&gt;: You can simply do that by opening your &lt;code&gt;index.html&lt;/code&gt; in your browser. You can also use the Live Server VS Code extension if you want instead of this. When pushing the repo to production on GitHub, be sure to create a &lt;code&gt;.gitignore&lt;/code&gt; file so unnecessary files will be excluded when you initialize git.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion and Final Thoughts&lt;/strong&gt;&lt;br&gt;
There you go, thanks for coming to my TED Talk. Feel free to read my other articles and make sure you stay creative and stay building!&lt;/p&gt;

</description>
      <category>tailwindcss</category>
      <category>cssframeworks</category>
      <category>vanillahtml</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Mathematics: Timeless Wisdom in a Changing Tech World</title>
      <dc:creator>Trae Zeeofor</dc:creator>
      <pubDate>Fri, 21 Jun 2024 12:35:51 +0000</pubDate>
      <link>https://dev.to/trae_z/mathematics-timeless-wisdom-in-a-changing-tech-world-53nf</link>
      <guid>https://dev.to/trae_z/mathematics-timeless-wisdom-in-a-changing-tech-world-53nf</guid>
      <description>&lt;p&gt;Trying to get familiar with binary trees and linked lists data structures over the past few days brought me to the realization that, unlike programming languages and technologies, mathematics is timeless. P.S. Data structures are deeply rooted in mathematical concepts.&lt;/p&gt;

&lt;p&gt;The same textbooks I inherited from my father decades ago, which he himself used half a century ago, I could easily pass down to my son to use in a couple of years' time, and he would still find them immensely useful. For these data structures, I was able to look for and follow my favorite FreeCodeCamp YouTube courses without any fear of consuming deprecated knowledge.&lt;/p&gt;

&lt;p&gt;Nothing of such exists, however, in the "technical debt" land of programming. Trying to learn CSS, JavaScript, Python, or even C++ using books or tutorials published 5 to 10 years ago is very much ill-advised, as standards have rapidly evolved. It's even worse when it comes to frameworks and libraries in the ecosystem of these languages; an application built 2 years ago can desperately be in need of maintenance to conform to current best practices.&lt;/p&gt;

&lt;p&gt;Christians have it easy right? "Jesus Christ is the same yesterday and today and forever." 😁&lt;/p&gt;

</description>
      <category>techevolution</category>
      <category>programmingchallenges</category>
      <category>datastructures</category>
      <category>mathematics</category>
    </item>
    <item>
      <title>Multiplication Practice: A Dive into Building a Simple Multiplication Quiz Game for Kids</title>
      <dc:creator>Trae Zeeofor</dc:creator>
      <pubDate>Thu, 23 Nov 2023 18:31:41 +0000</pubDate>
      <link>https://dev.to/trae_z/multiplication-practice-a-dive-into-building-a-simple-multiplication-quiz-game-for-kids-2hec</link>
      <guid>https://dev.to/trae_z/multiplication-practice-a-dive-into-building-a-simple-multiplication-quiz-game-for-kids-2hec</guid>
      <description>&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%2Fsmgiu8h0khvyjbt599c9.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%2Fsmgiu8h0khvyjbt599c9.png" alt="full view of my app with game in progress" width="600" height="1153"&gt;&lt;/a&gt;&lt;em&gt;full view of my app with game in progress&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Abstract:&lt;/strong&gt;&lt;br&gt;
This article explores the journey of conceptualizing, designing, and deploying a children-friendly front-end web application - Multiplication Practice. It delves into the technicalities of front-end development, challenges encountered, solutions implemented, and the educational gains from completing the project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Introduction:&lt;/strong&gt;&lt;br&gt;
In my ongoing pursuit of Tech learning, I recently ventured into exploring the Open Source Ecosystem. I looked towards making my first few open-source contributions. While exploring repositories suitable for newcomers, I stumbled upon Prajwalpd7’s &lt;a href="https://github.com/prajwalpd7/Flash-Cards-Game" rel="noopener noreferrer"&gt;“Multiplication Flash Cards Game”&lt;/a&gt; project. As games have been a prominent part of my portfolio, encountering a similar project, a lightweight build consisting of a one-page structure with embedded CSS and JavaScript, sparked instant interest and excitement.&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%2Fbwlll7b9w2fihwgenkz4.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%2Fbwlll7b9w2fihwgenkz4.png" alt="full view of Prajwalpd7’s app with game in progress" width="600" height="905"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;full view of Prajwalpd7’s app with game in progress&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I follow several Tech Developer Advocates on Twitter. Particularly those of Nigerian descent. Arit Amana is one of them. And so around this same time, I encountered a tweet by Arit announcing a &lt;a href="https://twitter.com/AritDeveloper/status/1723356245690552677" rel="noopener noreferrer"&gt;Saturday Coding Challenge&lt;/a&gt;. Balancing my eagerness to avoid horizontal skill enhancement and rather focus on substantial vertical progression, I opted to engage with this challenge, pushing me to work with concepts I seldom explore. I recognized completing and sharing my submission could forge a connection, understanding the pivotal role networking plays in aiding newcomers in securing their initial Tech jobs.&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%2Ff0p1moms8hvwfeaxnkxp.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff0p1moms8hvwfeaxnkxp.jpg" alt="Arit Amana's Saturday Coding Challenge" width="423" height="772"&gt;&lt;/a&gt;&lt;em&gt;Arit Amana's Saturday Coding Challenge&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project Ideation and Planning:&lt;/strong&gt;&lt;br&gt;
Inspired by Prajwalpd7’s “Multiplication Flash Cards Game” and integrating user stories from Arit Amana's Saturday Coding Challenge, I conceived the idea to craft an app that amalgamates both concepts. Building an app to fulfill the Saturday Coding Challenge requirements while offering a rewarding educational tool for children to enrich their multiplication skills became the focal ambition.&lt;/p&gt;

&lt;p&gt;The app's landing page serves the Saturday Coding Challenge's use cases, presenting users with the opportunity to hypothetically support a children's charity through subscription plans ($29/month, $39/month, $59/month). Subsequently, users can select their billing date, receive confirmation of their choice, and view the amount owed and the upcoming billing date. Additionally, users have the option to skip donations and proceed directly to the game. The game itself offers three distinct difficulty levels, each featuring a 10-round quiz to test the users' proficiency in multiplication.&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%2Fjz9eai891t6129gjmw9q.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%2Fjz9eai891t6129gjmw9q.png" alt="app building - project structure in vscode" width="800" height="950"&gt;&lt;/a&gt;&lt;em&gt;app building - project structure in VsCode&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technology Stack:&lt;/strong&gt;&lt;br&gt;
Unlike Prajwalpd7’s basic game structure with code consolidated in a single index.html file, I opted for a modular approach to captivate the focus group - children. Leveraging React.js in line with Next.js Framework guidelines, I emphasized code reliability, maintainability, and efficient development by adopting TypeScript for static typing in JavaScript. Furthermore, Tailwind CSS streamlined rapid development through its utility classes directly applied within the HTML structure.&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%2Faew5dugir4xn8ze4hxl8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faew5dugir4xn8ze4hxl8.jpg" alt="react typescript function snippet with tailwind css styling" width="737" height="1018"&gt;&lt;/a&gt;&lt;em&gt;react typescript function snippet with tailwind css styling&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Development Process:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the realm of front-end web development, diverse approaches exist for single actions. While Zustand and Redux are advocated for global state management, the Context API proved more than adequate for this app, facilitating state access and updates across all components. &lt;/li&gt;
&lt;li&gt;On the landing page, I employed two &lt;code&gt;&amp;lt;div&amp;gt;s&lt;/code&gt; for a clever modal implementation. It showcased the available choices, rendered as a dropdown list using &lt;code&gt;&amp;lt;select&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;option&amp;gt;&lt;/code&gt; elements.&lt;/li&gt;
&lt;li&gt;For functionalities involving date selection, I seized the opportunity to refresh my knowledge by relearning and applying several methods, including utilizing the Date object to power the app's logic. Methods such as toDateString() and setDate() were instrumental in this process.&lt;/li&gt;
&lt;li&gt;The modular code structure ensured that each related logic was compartmentalized into distinct components, facilitating a coherent and organized development approach.&lt;/li&gt;
&lt;li&gt;The app's central logic flow enabled users to choose between three sets of multiplication tables. Upon selection, a random question was generated based on the chosen group. Storing the correct answer in a variable, I employed four randomly generated offsets to generate alternative answer choices around the correct answer. Rendering all answers in a radio input type, I integrated a score variable to track correctly chosen answers on each attempt.
&lt;/li&gt;
&lt;/ul&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%2Fwvn8dfrxgv3xmsxjufev.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%2Fwvn8dfrxgv3xmsxjufev.png" alt="my app's landing page modal" width="600" height="905"&gt;&lt;/a&gt;&lt;em&gt;my app's landing page modal&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Design and User Experience:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Responsive web development necessitates the use of breakpoints to adapt websites to various screen sizes and devices. My endeavor was to test a responsive breakpoint system that sets 320px as the minimum design width, aligning with best practices.&lt;/li&gt;
&lt;li&gt;Additionally, I meticulously designed the project to utilize the full width of the body tag, dynamically adjusting component sizes for different breakpoints. This professional approach contrasts with my prior projects and establishes a uniform, consistent, and polished appearance.
&lt;/li&gt;
&lt;/ul&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%2Fuposn6esv05rrxchh1ba.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%2Fuposn6esv05rrxchh1ba.png" alt="app's game difficulty levels" width="600" height="905"&gt;&lt;/a&gt;&lt;em&gt;app's game difficulty levels&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Challenges Faced in Testing and Deployment&lt;/strong&gt;&lt;br&gt;
The development of this application did not pose an overwhelming challenge due to the relatively straightforward logic behind it. Successfully running the code in both the build and production stages, coupled with Vercel's seamless deployment handling, showcased the efficacy of the implementation. The use of TypeScript ensured defensive checks throughout the application's lifecycle, mitigating any potential system breaks.  &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%2Ffqztxkudejjyubhes0se.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%2Ffqztxkudejjyubhes0se.png" alt="my app's game over modal" width="600" height="1153"&gt;&lt;/a&gt;&lt;em&gt;my app's game over modal&lt;/em&gt;&lt;br&gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Knowledge, Growth, Summary&lt;/strong&gt;&lt;br&gt;
Crafting user-friendly games aligns with my proficiency. And having the opportunity to continue that streak with this project was deeply satisfying. User and child feedback reflected an enjoyable experience, embracing the gamification of education. The mobile-friendly nature of the site enhanced the conventional gaming experience.&lt;/p&gt;

&lt;p&gt;Personally, the cognitive engagement in this project solidified my front-end development knowledge. My focus now shifts towards backend web development, initiating the journey with learning Node.js and Express to augment my value as a full-stack developer.&lt;br&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;References and Resources:&lt;/strong&gt;&lt;br&gt;
The project’s GitHub repository can be found at this link: &lt;a href="https://github.com/traez/multiplication-practice" rel="noopener noreferrer"&gt;https://github.com/traez/multiplication-practice&lt;/a&gt;&lt;br&gt;
The live site is hosted on Vercel and accessible here: &lt;a href="https://multiplication-practice-traez.vercel.app" rel="noopener noreferrer"&gt;https://multiplication-practice-traez.vercel.app&lt;/a&gt;&lt;/p&gt;

</description>
      <category>educationaltech</category>
      <category>technicalwriting</category>
      <category>codingchallenge</category>
      <category>timestables</category>
    </item>
  </channel>
</rss>
