<?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: Angel Afube</title>
    <description>The latest articles on DEV Community by Angel Afube (@angel_afube).</description>
    <link>https://dev.to/angel_afube</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%2F1697602%2F932cae67-8498-426e-8da4-d2c7e13f1f64.jpg</url>
      <title>DEV Community: Angel Afube</title>
      <link>https://dev.to/angel_afube</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/angel_afube"/>
    <language>en</language>
    <item>
      <title>Why Semantic HTML Still Matters for SEO — Even in Modern Frameworks</title>
      <dc:creator>Angel Afube</dc:creator>
      <pubDate>Fri, 20 Feb 2026 12:22:30 +0000</pubDate>
      <link>https://dev.to/angel_afube/why-semantic-html-still-matters-for-seo-even-in-modern-frameworks-mgj</link>
      <guid>https://dev.to/angel_afube/why-semantic-html-still-matters-for-seo-even-in-modern-frameworks-mgj</guid>
      <description>&lt;p&gt;Building an ecommerce app using Angular comes with its demands, and the focus is majorly on seamless functionalities. You want your web app to function smoothly, with dynamic interfaces and a beautiful UI of course. While there is no harm in these objectives, there is also no harm in considering the SEO perspective during development. Good HTML helps Google rank your web app and makes it easier for users to find it in the first place.&lt;/p&gt;

&lt;p&gt;So imagine the horror of discovering that while the website was visually and functionally amazing, it wasn't doing so well in terms of SEO ranking — because from Google's perspective, there was no structure. No clear signals about what the page was about or what content mattered most.&lt;/p&gt;

&lt;p&gt;Let's dive in.&lt;/p&gt;

&lt;h2&gt;
  
  
  When Everything is a &lt;code&gt;div&lt;/code&gt;, &lt;code&gt;span&lt;/code&gt; or &lt;code&gt;p&lt;/code&gt; Tag
&lt;/h2&gt;

&lt;p&gt;Because this wasn't a company's website or a blog, it seemed fine to just have everything wrapped in divs and represented with spans and paragraphs. Page titles, section headings, product names, product descriptions — all in &lt;strong&gt;&lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt;&lt;/strong&gt; tags, with CSS doing the heavy lifting to give them unique font sizes, weights, and colors.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;p class="text-lg font-semibold"&amp;gt;
  Black Andi Dress
&amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From a UI standpoint, it looked good. The structure appeared fine. But from Google's perspective, it was not. &lt;/p&gt;

&lt;p&gt;Search engines do not read user interfaces the way users do. Instead, they rely on semantic structure to understand what a page is about, which content is important, and what should be prioritized. So, when you have just divs and paragraphs with cool styling, Google sees it as plain text everywhere on the page — no primary subject to anchor to, no product name to elevate, no page title to latch onto.&lt;/p&gt;

&lt;p&gt;What Google is actually looking for when it crawls your page:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tag&lt;/th&gt;
&lt;th&gt;What it tells Google&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Main topic of the page&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;h2&amp;gt;, &amp;lt;h3&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sections and sub-sections&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Supporting content or descriptions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Crawlable navigation paths&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Without those signals, Google can't confidently say &lt;em&gt;"this page is about the Black Andi Dress."&lt;/em&gt; It just sees &lt;em&gt;"Black Andi Dress"&lt;/em&gt; as another piece of text floating somewhere on the page. No context. No hierarchy. No ranking advantage.&lt;/p&gt;

&lt;p&gt;This is how leaning entirely on div and p tags with functional logic actively harms the SEO of your ecommerce application.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Even Is Semantic HTML?
&lt;/h2&gt;

&lt;p&gt;According to &lt;a href="https://www.w3schools.com/html/html5_semantic_elements.asp" rel="noopener noreferrer"&gt;w3schools&lt;/a&gt;, A semantic element clearly describes its meaning to both the browser and the developer.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Examples of non-semantic elements are div and span tags which tells nothing about its content.&lt;/li&gt;
&lt;li&gt;Examples of semantic elements are h1, img, table, and article tags which clearly defines its content.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key distinction is &lt;strong&gt;intentionality&lt;/strong&gt;. Semantic HTML is about choosing tags that reflect what the content is, not just what it looks like.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Semantic HTML matters beyond SEO
&lt;/h3&gt;

&lt;p&gt;Semantic HTML isn't just an SEO trick. It delivers real benefits across the board:&lt;br&gt;
&lt;strong&gt;Accessibility&lt;/strong&gt; — Screen readers and assistive technologies rely on semantic structure to help users with disabilities navigate a page. When everything is a &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;, a screen reader has no way of knowing where the navigation is, where the main content begins, or what the heading hierarchy looks like. Semantic tags provide those cues clearly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code maintainability&lt;/strong&gt; — When you return to a codebase six months later (or hand it off to another developer), semantic HTML makes intent obvious. Finding a &lt;code&gt;nav&lt;/code&gt; to update is far easier than hunting through a sea of &lt;code&gt;&amp;lt;div class="nav-wrapper-2"&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Better user experience&lt;/strong&gt; — When content is organized with meaningful tags, browsers can render pages more predictably, and users can navigate more intuitively — especially those using keyboard navigation or browser reader modes.&lt;/p&gt;
&lt;h3&gt;
  
  
  The Good News: You Don't Need to Touch the UI
&lt;/h3&gt;

&lt;p&gt;The most common fear when fixing semantic HTML is: "If we change the tags, we'll break the design." That fear is largely unfounded, especially when using utility-first CSS like Tailwind.&lt;br&gt;
Your classes stay exactly the same. You're just changing the wrapper:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Before ❌
&amp;lt;p class="text-lg font-semibold"&amp;gt;
  Black Andi Dress
&amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;After ✅
&amp;lt;h2 class="text-lg font-semibold"&amp;gt;
  Black Andi Dress
&amp;lt;/h2&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No visual regression. No layout shifts. Same Tailwind classes. Massive semantic improvement.&lt;/p&gt;

&lt;p&gt;The same logic applies across your product pages — promote product names to &lt;strong&gt;&lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;&lt;/strong&gt; on detail pages, convert section titles to &lt;strong&gt;&lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;code&gt;&amp;lt;h3&amp;gt;&lt;/code&gt;&lt;/strong&gt; where appropriate, and let heading hierarchy reflect the actual importance of content rather than how big you want the text to look.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where It Gets Tricky in Angular and React
&lt;/h3&gt;

&lt;p&gt;Frameworks introduce a subtle but important confusion: components that look semantic aren't always semantically correct at the HTML level.&lt;/p&gt;

&lt;p&gt;In React, for example, libraries like Semantic UI offer components named &lt;strong&gt;&lt;code&gt;&amp;lt;Header&amp;gt;&lt;/code&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;code&gt;&amp;lt;Footer&amp;gt;&lt;/code&gt;&lt;/strong&gt;. These look familiar, but they don't always output actual &lt;strong&gt;&lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;code&gt;&amp;lt;footer&amp;gt;&lt;/code&gt;&lt;/strong&gt; HTML elements. The underlying HTML may vary — and what Google reads is the rendered HTML, not the component names.&lt;/p&gt;

&lt;p&gt;In Angular, the trap is slightly different. Consider this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;p [routerLink]="['/stores', storeName, productCode]"&amp;gt;
  Black Andi Dress
&amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This navigates correctly when a user clicks it. Angular handles the routing perfectly. But from Google's perspective, this is just a paragraph of text. It is not a linK, hence, Google will not recognize it as such.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tag Implementation&lt;/th&gt;
&lt;th&gt;Crawlable by Google&lt;/th&gt;
&lt;th&gt;SEO Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;p routerLink&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;NO&lt;/td&gt;
&lt;td&gt;NO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;div (click)&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;NO&lt;/td&gt;
&lt;td&gt;NO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;a routerLink&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;YES&lt;/td&gt;
&lt;td&gt;YES&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;a href&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;YES&lt;/td&gt;
&lt;td&gt;YES&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The correct fix is to use an actual &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; tag with routerLink:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; &amp;lt;a [routerLink]="['/stores', singlestore.storename ]"
  class="p-3 font-medium text-sm text-green-400 hover:text-green-600 transition-colors"
  title="{{ product?.product_name }}"
&amp;gt;
  {{ product?.product_name }}
&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Angular renders this as a proper &lt;code&gt;&amp;lt;a href="..."&amp;gt;&lt;/code&gt; in the DOM — one that Google can crawl, follow, and use to discover product pages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Best Practices
&lt;/h2&gt;

&lt;p&gt;A few principles to keep front of mind as you work through this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; per page, preferably:&lt;/strong&gt; The &lt;strong&gt;&lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;&lt;/strong&gt; signals the primary topic of a page to search engines. Multiple &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; tags dilute that signal. On a product detail page, the product name gets the &lt;code&gt;**&amp;lt;h1&amp;gt;**&lt;/code&gt;. On a listing page, the same product name might only warrant an &lt;code&gt;**&amp;lt;h3&amp;gt;**&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Headings define importance, not appearance. This is the most common misunderstanding. If you need a small-looking heading, use the appropriate heading tag and control the size with CSS. Don't reach for a &lt;code&gt;**&amp;lt;p&amp;gt;**&lt;/code&gt; tag just because you want smaller text.&lt;/p&gt;

&lt;p&gt;A basic, effective heading structure for a product page looks 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;&amp;lt;h1&amp;gt;Black Andi Dress&amp;lt;/h1&amp;gt;
&amp;lt;h2&amp;gt;Product Description&amp;lt;/h2&amp;gt;
&amp;lt;h2&amp;gt;Specifications&amp;lt;/h2&amp;gt;
&amp;lt;h2&amp;gt;Pricing &amp;amp; Availability&amp;lt;/h2&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Even two or three clear headings dramatically improve SEO clarity for the page.&lt;br&gt;
Combine semantic tags for compounding effect. Link equity and heading signals stack:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;h3&amp;gt;
  &amp;lt;a [routerLink]="..."&amp;gt;Black Andi Dress&amp;lt;/a&amp;gt;
&amp;lt;/h3&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Don't use &lt;code&gt;&amp;lt;div (click)&amp;gt;&lt;/code&gt; or &lt;code&gt;&amp;lt;p routerLink&amp;gt;&lt;/code&gt; for navigation:&lt;/strong&gt; If something should be a link, it should be an &lt;code&gt;**&amp;lt;a&amp;gt;**&lt;/code&gt; tag.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use semantic structure tags to define regions. Wrap your navigation in &lt;code&gt;&amp;lt;nav&amp;gt;&lt;/code&gt;, your main content in &lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt;, your page header in &lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt;. These tags cost nothing to add and give Google a clearer map of your page.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Don't use HTML to style — that's CSS's job&lt;/strong&gt;: Use tags to describe what content is, and let your stylesheet handle how it looks. This separation keeps your markup clean, meaningful, and maintainable.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Semantic HTML is not outdated. It's not a relic of the pre-framework era. And modern frameworks — as powerful as they are — do not replace it.&lt;/p&gt;

&lt;p&gt;Even in a fully dynamic Angular SPA, Google still depends on semantic structure to understand your content.&lt;/p&gt;

&lt;p&gt;It's a matter of being intentional about the tags you reach for — choosing &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; because that element is the main heading, choosing &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; because that element is a link. The styling stays the same. The SEO impact does not.&lt;/p&gt;

&lt;p&gt;Build beautiful. Build functional. But also build with meaning — because that's what gets you found.&lt;/p&gt;

&lt;h2&gt;
  
  
  Further Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.seoforgooglenews.com/p/why-semantic-html-matters-for-seo" rel="noopener noreferrer"&gt;Why Semantic HTML matters for SEO and AI&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.animaapp.com/blog/code/what-is-semantic-html-key-differences-from-html-and-why-its-important-for-frontend-developers/#:~:text=SEO%20Boost%3A%20Search%20engines%20use,easier%20to%20read%20and%20maintain" rel="noopener noreferrer"&gt;What is Semantic HTML? Key Differences from HTML and Why It’s Important for Frontend Developers&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://momenticmarketing.com/blog/semantic-html" rel="noopener noreferrer"&gt;Why Accessible HTML Matters&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/gerryleonugroho/semantic-html-in-2025-the-bedrock-of-accessible-seo-ready-and-future-proof-web-experiences-2k01"&gt;Semantic HTML in 2025: The Bedrock of Accessible, SEO-Ready, and Future-Proof Web Experiences&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.telerik.com/blogs/why-semantic-html-matters-introductory-guide-new-developers" rel="noopener noreferrer"&gt;Why Semantic HTML Matters: An Introductory Guide for New Developers&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.w3schools.com/html/html5_semantic_elements.asp" rel="noopener noreferrer"&gt;HTML Semantic Elements&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>angular</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Appreciation on a second look: Lessons from Revisiting Bootstrap</title>
      <dc:creator>Angel Afube</dc:creator>
      <pubDate>Fri, 17 Oct 2025 13:19:05 +0000</pubDate>
      <link>https://dev.to/angel_afube/appreciation-on-a-second-look-lessons-from-revisiting-bootstrap-3ao</link>
      <guid>https://dev.to/angel_afube/appreciation-on-a-second-look-lessons-from-revisiting-bootstrap-3ao</guid>
      <description>&lt;p&gt;When I started my frontend development journey, HTML and CSS were my comfort zone. Once I began encountering libraries and frameworks, I’ll be honest—I resisted. Why complicate things? Vanilla HTML and CSS worked just fine, or so I thought.&lt;/p&gt;

&lt;p&gt;Everything changed after my &lt;a href="https://tech4dev.com/programs/women-techsters.html" rel="noopener noreferrer"&gt;Tech4Dev Women Techsters Fellowship&lt;/a&gt; during my NYSC year. I realized that HTML and CSS were just the foundation—a glimpse into the broader and more dynamic world of frontend development. I became excited about learning the tools that make modern web applications powerful.&lt;/p&gt;

&lt;p&gt;Then came Bootstrap.&lt;/p&gt;

&lt;p&gt;At first, I only learned Bootstrap because I had to. I wasn’t exactly impressed. Later on, I discovered Tailwind CSS and fell in love instantly. Its utility-first approach was everything I wanted, and honestly, it made me think Bootstrap had been the problem all along.&lt;br&gt;
But recently, while taking a Udemy course that brought up Bootstrap again, I decided to revisit it with an open mind.&lt;/p&gt;

&lt;p&gt;And guess what? I learned a lot.&lt;/p&gt;

&lt;p&gt;This article isn’t a Tailwind vs. Bootstrap comparison. Rather, it’s about the lessons I learned from revisiting Bootstrap and working with it on a simple single-page application (SPA). Special shoutout to &lt;a href="https://www.figma.com/@adediwura" rel="noopener noreferrer"&gt;Fortunate Adediwura&lt;/a&gt; for making his awesome design available—check out the &lt;a href="https://www.figma.com/community/file/1006775473218344336/logistics-landing-page" rel="noopener noreferrer"&gt;Figma link here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Quick Refresher: What Is Bootstrap?
&lt;/h2&gt;

&lt;p&gt;Bootstrap is a popular open-source CSS framework originally developed by Twitter. It provides a collection of prebuilt components, grid systems, and utilities that help developers build responsive and mobile-first websites quickly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Setting Up Bootstrap
&lt;/h3&gt;

&lt;p&gt;You can set up Bootstrap in two main ways:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Via CDN: Just copy the link to Bootstrap’s CSS and JS into your HTML file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using package manager: For more integrated setups in modern web apps, you can install it via npm.&lt;br&gt;
Visit the &lt;a href="https://getbootstrap.com/" rel="noopener noreferrer"&gt;Bootstrap official page&lt;/a&gt; for more details on this.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Highlights from My Simple SPA
&lt;/h2&gt;

&lt;p&gt;To test my renewed perspective, I built a simple single-page application (SPA) using Bootstrap.&lt;/p&gt;

&lt;p&gt;The design included four main sections:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A responsive navbar&lt;/li&gt;
&lt;li&gt;A clean hero section&lt;/li&gt;
&lt;li&gt;Multiple content blocks (fictional logistics services)&lt;/li&gt;
&lt;li&gt;A neat, consistent footer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can explore the full code and structure on my &lt;a href="https://github.com/AfubeAngel/logistics-bootstrap-site" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;, or view the &lt;a href="https://afubeangel.github.io/logistics-bootstrap-site/" rel="noopener noreferrer"&gt;live version here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Revisiting Bootstrap through this project gave me a fresh appreciation for its structure and hidden power:&lt;/em&gt;&lt;br&gt;
&lt;u&gt;Responsive Navbar&lt;/u&gt;&lt;br&gt;
I used Bootstrap’s built-in classes — navbar, navbar-expand-lg, container-fluid, and collapse.&lt;br&gt;
The magic here was responsiveness: the navbar automatically collapsed into a hamburger menu on smaller screens, no custom JavaScript required.&lt;br&gt;
Bootstrap handled accessibility, toggling, and alignment straight out of the box.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 Lesson: Bootstrap simplifies responsive navigation so much that you can focus on design instead of device breakpoints.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;u&gt;Clean Hero Section&lt;/u&gt;&lt;br&gt;
The hero relied on the Bootstrap grid (row, col-md-*) and utility classes like d-flex, justify-content-center, and align-items-center for layout.&lt;br&gt;
 It felt structured yet flexible—perfect for centering text and images elegantly across all devices.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 Lesson: Bootstrap’s grid system transforms complex layout work into clean, semantic class combinations.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;u&gt;Multiple Content Blocks (Our Services)&lt;/u&gt;&lt;br&gt;
Each service—Air Freight, Ocean Freight, Ground Shipping—was built using Bootstrap’s card component and grid layout (row g-0, col-md-*).&lt;br&gt;
 The alternating image-text pattern showcased how easily Bootstrap handles multi-column designs with minimal CSS.&lt;br&gt;
 Images stayed fluid with the img-fluid class, adapting beautifully to any screen width.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 Lesson: The Bootstrap grid + card combo makes it easy to create polished layouts that look custom-made.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;u&gt;Info Section (Package Forwarding Details)&lt;/u&gt;&lt;br&gt;
Here, I used a two-column layout with container, row gx-5, and col.&lt;br&gt;
 The list items used flex utilities (d-flex, gap-*, text-start) to align icons and text neatly without writing a single line of custom alignment CSS.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 Lesson: Bootstrap’s flexbox utilities make modern layouts intuitive, clean, and responsive by default.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;u&gt;Neat, Consistent Footer&lt;/u&gt;&lt;br&gt;
The footer used the Bootstrap grid (row, col) and nav utilities (nav flex-column) to organize links into tidy, responsive columns.&lt;br&gt;
 The consistent spacing (mb-2, p-0) kept everything balanced, while custom colors gave it a unified dark theme.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 Lesson: With Bootstrap’s grid and nav utilities, even simple footers can feel professional and well-structured.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Revisiting Bootstrap through this project helped me appreciate its structure and power. Here are six lessons I took away:&lt;/p&gt;

&lt;h2&gt;
  
  
  Lessons from Revisiting Bootstrap
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;It's Simple and Straightforward to Use&lt;br&gt;
Bootstrap’s documentation is beginner-friendly. Whether you're coding the navbar or setting up modals, it’s easy to find what you need and get going quickly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It Has Helpful and Interactive Components&lt;br&gt;
From buttons to carousels to alerts, Bootstrap offers a wide range of components out of the box. These are not just static — they come with JavaScript behavior that works with little configuration.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Responsiveness Is a Built-in Goal&lt;br&gt;
Bootstrap's grid system makes it incredibly easy to build layouts that respond to different screen sizes. I didn’t have to write custom media queries—just use the right classes, and it works.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It Ensures Cross-Browser Compatibility&lt;br&gt;
I tested the SPA on multiple browsers, and it worked consistently across all of them. Bootstrap abstracts away many browser inconsistencies, saving you debugging time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Access to a Vast Open Source Community&lt;br&gt;
Bootstrap has a massive developer community. Need templates, UI kits, or troubleshooting tips? The ecosystem has you covered.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I Need to Learn More About Licensing&lt;br&gt;
Using Bootstrap made me realize how important it is to understand software licenses—especially when using open-source frameworks or integrating UI kits. &lt;del&gt;(More on this in a future article.)&lt;/del&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;Revisiting Bootstrap was a humbling and enlightening experience. Sometimes, it’s not about picking the newest or trendiest tool—it’s about using the right one for the job. While TailwindCSS remains my go-to for many projects, I now see the value in Bootstrap, especially for rapid prototyping and scalable responsive design.&lt;/p&gt;

&lt;p&gt;If you're like me and once dismissed Bootstrap, give it another try. You just might be surprised.&lt;/p&gt;

&lt;p&gt;Thanks for reading! ✨&lt;/p&gt;

&lt;p&gt;Have you revisited any tools recently and changed your mind about them? Let me know in the comments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Further Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://getbootstrap.com/" rel="noopener noreferrer"&gt;https://getbootstrap.com/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://aicontentfy.com/en/blog/simplifying-website-development-comprehensive-guide-to-building-site-using-bootstrap" rel="noopener noreferrer"&gt;https://aicontentfy.com/en/blog/simplifying-website-development-comprehensive-guide-to-building-site-using-bootstrap&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.freecodecamp.org/news/learn-bootstrap-4-in-30-minute-by-building-a-landing-page-website-guide-for-beginners-f64e03833f33/" rel="noopener noreferrer"&gt;https://www.freecodecamp.org/news/learn-bootstrap-4-in-30-minute-by-building-a-landing-page-website-guide-for-beginners-f64e03833f33/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.clarity-ventures.com/blog/benefits-of-using-bootstrap-for-web-design" rel="noopener noreferrer"&gt;https://www.clarity-ventures.com/blog/benefits-of-using-bootstrap-for-web-design&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://owdt.com/article/the-pros-and-cons-of-using-bootstrap-for-front-end-development/" rel="noopener noreferrer"&gt;https://owdt.com/article/the-pros-and-cons-of-using-bootstrap-for-front-end-development/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>bootstrap</category>
      <category>frontend</category>
      <category>css</category>
      <category>learning</category>
    </item>
    <item>
      <title>Why Skipping HTML &amp; CSS Fundamentals Will Hurt You - Even in This Age of AI</title>
      <dc:creator>Angel Afube</dc:creator>
      <pubDate>Fri, 04 Jul 2025 08:54:20 +0000</pubDate>
      <link>https://dev.to/angel_afube/why-skipping-html-css-fundamentals-will-hurt-you-even-in-this-age-of-ai-984</link>
      <guid>https://dev.to/angel_afube/why-skipping-html-css-fundamentals-will-hurt-you-even-in-this-age-of-ai-984</guid>
      <description>&lt;p&gt;With the ease that comes with using AI tools, it's tempting to think developers can skip the fundamentals of HTML and CSS. When ChatGPT or Copilot can write code, build layouts, and debug issues in seconds, why not jump straight into React, TypeScript, Angular, and the like? The world is moving fast - who has time for the "simple stuff"?&lt;/p&gt;

&lt;p&gt;But here's the hard truth: &lt;strong&gt;if you don't understand basic HTML and CSS, everything else will eventually feel like a struggle.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I've seen it firsthand. Interns and trainees are often excited to move past seemingly redundant "HTML AND CSS" and dive straight into working with components and complicated logic flows. (Even I once felt HTML and CSS were skippable - back when AI wasn't this dominant in the development world.) But excitement quickly fades when they hit a wall: a stubborn layout, a flexbox puzzle, or a broken grid. Suddenly, the magic of frameworks seems far away.&lt;/p&gt;

&lt;p&gt;Some new developers say, "I know a bit of HTML and CSS - I just want to go deeper." But the thing about going deeper is this: &lt;strong&gt;when your foundation is shaky, learning seems more complicated&lt;/strong&gt;. And then there's another group - those who think that since AI can generate code, they don't need to learn much. While they're not entirely wrong, we must remember this: &lt;strong&gt;prompt engineering feeds off what we know. If you don't understand the basics, you might not even know what to ask or how to ask&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Illusion of Speed
&lt;/h2&gt;

&lt;p&gt;AI is amazing. I use it. You probably do too. It speeds up coding, makes suggestions, and even explains syntax. But it should support your thinking, not replace it.&lt;/p&gt;

&lt;p&gt;If you don't understand how CSS layout works or what z-index actually controls, you'll find yourself asking the wrong questions - and rewriting the same broken and confusing prompt over and over again.&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%2Frkeo6z21vra8bieu0ju7.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%2Frkeo6z21vra8bieu0ju7.jpg" alt="meme on a struggling developer using AI" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Fundamentals Are Not Optional
&lt;/h2&gt;

&lt;p&gt;For a long time, I saw HTML and CSS as just an "introduction to coding." But over time, I realized that they are not optional - they are the core technology of the web. Not surprising that every framework and library I've worked with brings me back to them.&lt;/p&gt;

&lt;p&gt;Here are some of the core concepts every frontend developer should be comfortable with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Semantic HTML - Not just for accessibility, but for SEO and structure.&lt;/li&gt;
&lt;li&gt;The Box Model - Understanding padding, borders, margins, and how they stack up is essential for layout clarity.&lt;/li&gt;
&lt;li&gt;Flexbox and Grid - These are the backbone of responsive designs.&lt;/li&gt;
&lt;li&gt;CSS Specificity and the Cascade - Know why your styles aren't applying, and how to fix them.&lt;/li&gt;
&lt;li&gt;Media Queries - Because mobile-first isn't just a trend - it's a design principle.&lt;/li&gt;
&lt;li&gt;Debugging with DevTools - Not guesswork, but actual analysis of what's wrong.&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%2F448lmu614iof00c6xxdj.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%2F448lmu614iof00c6xxdj.png" alt="A DevTools screenshot showing the computed styles tab and how the cascade works in action." width="774" height="616"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Learn Slow to Build Fast
&lt;/h2&gt;

&lt;p&gt;I'm not saying you should stay stuck in tutorials forever. But I am saying: &lt;em&gt;learn the right things at the right time.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Master HTML and CSS before you dive into animation libraries, utility-first frameworks, or complex state management. It might feel slow at first, but it saves you from frustration, rewrites, and embarrassing bugs down the line.&lt;/p&gt;

&lt;p&gt;When you understand how layouts truly work, you spend less time asking: &lt;strong&gt;"Why is my div not centered?"&lt;/strong&gt; And more time building real features with confidence and clarity.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Helps Those Who Know
&lt;/h2&gt;

&lt;p&gt;Here's the final truth: AI tools work best when you already understand what they're doing.&lt;/p&gt;

&lt;p&gt;They can suggest snippets and auto-complete lines, but only you can actually put the suggestions to good use by debugging intelligently, tweaking the output to suit your need, or even ask better questions. AI doesn't replace fundamentals - it accelerates those who already have them.&lt;/p&gt;

&lt;p&gt;So don't skip the basics.Keep your excitement to go deeper - but make sure your foundation is solid first.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you're starting out or mentoring others, don't rush past HTML and CSS. Revisit them. Play with them. Break things, fix them, and learn slowly. It's the best investment you can make in your future as a developer; especially with the threat of AI taking over &lt;em&gt;[a topic for another day]&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>beginners</category>
      <category>htmlandcss</category>
    </item>
    <item>
      <title>The Rise of AI-Generated Content: Cheating or Smart Work?</title>
      <dc:creator>Angel Afube</dc:creator>
      <pubDate>Sat, 01 Mar 2025 13:39:15 +0000</pubDate>
      <link>https://dev.to/angel_afube/the-rise-of-ai-generated-content-cheating-or-smart-work-l9c</link>
      <guid>https://dev.to/angel_afube/the-rise-of-ai-generated-content-cheating-or-smart-work-l9c</guid>
      <description>&lt;p&gt;Recently, my manager asked me if I was afraid of the moves AI was making in my field as a front-end developer. Without hesitation, I said yes.&lt;/p&gt;

&lt;p&gt;Why? Because the frontend development landscape is already in a constant state of flux - even without AI in the picture. Frameworks evolve rapidly, updates roll out frequently, and competition is already fierce. Adding AI to the equation only intensifies the challenge.&lt;/p&gt;

&lt;p&gt;Curious about others' perspectives, I asked a senior colleague the same question. His response?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Worrying won't change anything. It just means you have to be better. Change will take some jobs and create new ones."&lt;/p&gt;

&lt;p&gt;Then he concluded with, "But that's me just being optimistic though."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Shortly after that conversation, I came across an &lt;a href="https://blog.medium.com/how-were-approaching-ai-generated-writing-on-medium-16ee8cb3bc89" rel="noopener noreferrer"&gt;article&lt;/a&gt; by the VP of Content at Medium, where he outlined how Medium is approaching AI-generated writing. The decision, he explained, came after gathering feedback from writers and readers on whether fully AI-generated content should be allowed on the platform.&lt;/p&gt;

&lt;p&gt;The responses were mixed.&lt;/p&gt;

&lt;p&gt;Some users strongly believed that Medium should remain a platform for human knowledge and experiences - not AI-generated content. Others suggested a clear disclosure: &lt;em&gt;If your content is AI-generated, identify it as such&lt;/em&gt;. And then there was the group that stood by their strong &lt;strong&gt;no-no&lt;/strong&gt;: &lt;em&gt;If you're just going to copy and paste AI-generated content, don't even bother publishing&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Medium, like many other platforms, welcomes the responsible use of AI tools to enhance writing. However, as AI capabilities evolve, I am certain that platforms like Medium are struggling to strike a balance between innovation and authenticity. Policies around AI-generated content are constantly being revisited, as there's no one-size-fits-all answer - at least, not yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI: A Powerful Tool or a Threat to Creativity?
&lt;/h2&gt;

&lt;p&gt;The debate over AI replacing traditionally human-centric jobs is a table-shaker, and it may never really reach a universally accepted conclusion. AI has undoubtedly been a productivity booster, helping professionals across industries work faster and more efficiently.&lt;/p&gt;

&lt;p&gt;I'll admit - even as I write this article, I might use an AI-powered tool to refine my grammar and structure. 😉&lt;/p&gt;

&lt;p&gt;But then, there's the other side of the coin - over-reliance or abuse of AI. Some people use AI not as a tool but as their primary brainpower, copying, and pasting content without adding originality or effort. So, I completely understand the frustration of spending hours researching, writing, editing, and optimizing a piece with a unique voice, only for someone else to generate similar content in seconds and potentially receive the same (or even more) credit. Even ChatGPT gives a disclaimer that it can make mistakes; hence users must fact-check important information.&lt;/p&gt;

&lt;p&gt;What's worse? The skepticism around well-written content.&lt;/p&gt;

&lt;p&gt;I recently saw a TikTok video where a lady ranted about how a beautifully crafted post was dismissed with the comment:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This is definitely AI." or "na ChatGPT"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Why? Simply because it was grammatically correct, had proper punctuation, and flowed logically.&lt;/p&gt;

&lt;p&gt;Since childhood, we've been taught grammar, punctuation, and effective reading, writing, and speaking. And yet, with the rise of AI-generated content, we now have to defend our own intelligence - as if writing well is no longer a human skill but an AI-generated trick.&lt;/p&gt;

&lt;p&gt;At the same time, I kinda understand the counterargument:&lt;br&gt;
"AI is a tool - if you can prompt it correctly to generate quality content, that's a skill in itself. Why spend hours writing when AI can do it in minutes?"&lt;/p&gt;

&lt;p&gt;It's a fair point. Knowing how to structure AI prompts for optimal output is a skill. But does that mean AI-generated content should be treated the same as human-written content?&lt;/p&gt;

&lt;h2&gt;
  
  
  The Desperate Need for Clear AI Guidelines
&lt;/h2&gt;

&lt;p&gt;Now more than ever, we need a centralized, objective standard defining the responsible and acceptable use of AI in content creation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Should AI-generated content be clearly labeled?&lt;/li&gt;
&lt;li&gt;Should platforms like Medium ban fully AI-written content?&lt;/li&gt;
&lt;li&gt;Or is using AI to generate content just another form of smart work?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What do you think? Are you in the "&lt;strong&gt;AI should always be disclosed&lt;/strong&gt;" camp, or do you believe &lt;strong&gt;that good content is good content, no matter how it's created?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>discuss</category>
      <category>chatgpt</category>
    </item>
    <item>
      <title>How to Fix Soft 404 Errors and Create a Custom 404 Page in Next.js 14</title>
      <dc:creator>Angel Afube</dc:creator>
      <pubDate>Wed, 22 Jan 2025 13:33:24 +0000</pubDate>
      <link>https://dev.to/angel_afube/how-to-fix-soft-404-errors-and-create-a-custom-404-page-in-nextjs-14-3j2k</link>
      <guid>https://dev.to/angel_afube/how-to-fix-soft-404-errors-and-create-a-custom-404-page-in-nextjs-14-3j2k</guid>
      <description>&lt;p&gt;When I first came across an email alert from Google Search Console about soft 404 errors on the website built with Next.js 14, I had no idea what they were and what I was expected to do to fix them. I only knew about regular 404 errors! As I learned afterward, Soft 404 errors typically affect dynamically rendered content and can harm your SEO efforts and user experience.&lt;/p&gt;

&lt;p&gt;In this article, I'll cover:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; What soft 404 errors are and why they shouldn't be ignored.&lt;/li&gt;
&lt;li&gt; How I fixed the soft 404 issues on my Next.js site.&lt;/li&gt;
&lt;li&gt; A simple guide to creating a custom 404 page in Next.js 14.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  What Is a Soft 404 Error?
&lt;/h2&gt;

&lt;p&gt;According to &lt;a href="https://developers.google.com/search/blog/2010/06/crawl-errors-now-reports-soft-404s#:~:text=A%20soft%20404%20occurs%20when,of%20pages%20with%20unique%20content." rel="noopener noreferrer"&gt;&lt;em&gt;Google Search Central&lt;/em&gt;&lt;/a&gt;, a soft 404 occurs when a server responds with a 200 OK status code for a page that doesn't exist instead of a 404 Not Found.&lt;br&gt;
This confuses Google because the page is marked as valid (via the 200 status code), but it lacks meaningful content for users.&lt;/p&gt;

&lt;h3&gt;
  
  
  Common Causes of Soft 404 Errors
&lt;/h3&gt;

&lt;p&gt;• Pages with weak or no content.&lt;br&gt;
• Duplicate pages.&lt;br&gt;
• Outdated or broken links.&lt;br&gt;
• URL typos or misspellings.&lt;br&gt;
• Incorrect server configurations.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Should You Fix Soft 404 Errors?
&lt;/h2&gt;

&lt;p&gt;Leaving soft 404 errors unresolved can lead to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;SEO Damage&lt;/strong&gt;&lt;br&gt;
o   Search engines waste their crawl budget rechecking invalid pages instead of indexing valid ones.&lt;br&gt;
o   Reduced visibility as your site's structure appears unreliable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Poor User Experience&lt;/strong&gt;&lt;br&gt;
o   Visitors encountering blank or broken pages lose trust in your site.&lt;br&gt;
o   Websites that depend on customer interaction may experience higher bounce rates.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  How I Fixed Soft 404 Errors in My Next.js Site
&lt;/h2&gt;

&lt;p&gt;Here’s the step-by-step approach I took to resolve the issue flagged by Google Search Console:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Investigate the Issue&lt;/strong&gt;&lt;br&gt;
Using the Google Search Console report, I identified that the flagged pages were:&lt;br&gt;
• Deleted static pages from a previous setup.&lt;br&gt;
• Pages deleted from the CMS (Content Management System) but still indexed by Google.&lt;br&gt;
If you do not have Google Search Console linked to your site, tools like &lt;a href="https://medium.com/r/?url=https%3A%2F%2Fwww.screamingfrog.co.uk%2F" rel="noopener noreferrer"&gt;Screaming Frog&lt;/a&gt; can help identify soft 404s.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Remove Redundant Static Pages&lt;/strong&gt;&lt;br&gt;
In Next.js, static files located in the /pages directory are automatically treated as valid pages. I found several outdated files that were no longer linked to the site’s navigation. I deleted these files to prevent Google from attempting to index them. Alternatively, you can configure your server to return the appropriate 404 or 410 Gone status codes for such pages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Redirect Missing Dynamic Content&lt;/strong&gt;&lt;br&gt;
For pages relying on CMS data, I implemented logic to redirect users to a custom 404 page if the requested data was missing. Here's a simplified version of the code:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&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%2Fqo9jcpjn6zwm1a0hxsq5.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%2Fqo9jcpjn6zwm1a0hxsq5.png" alt="code-snippet-for-redirect-CMS-logic" width="800" height="761"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Best Practices for Preventing Soft 404 Errors
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Enhance Weak Content&lt;/strong&gt;
Pages with minimal content can be flagged as soft 404s. Ensure you have engaging and high-quality content that meets search engine standards.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Return Correct HTTP Status Codes&lt;/strong&gt;
If a page doesn’t exist, ensure your server or API returns a 404 status code. For example, in Next.js:&lt;/li&gt;
&lt;/ol&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%2F9jmhu3d08iznadtj4vjy.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%2F9jmhu3d08iznadtj4vjy.png" alt="code-snippet-for-correct-HTTP-status" width="800" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Set Up Redirects for Moved Pages&lt;/strong&gt;
If a page is permanently removed or moved, use a 301 redirect to send users and search engines to the correct page. This tells them the content has a new permanent location.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Use Robots.txt to Manage Crawling&lt;/strong&gt;
Disallow bots from crawling pages you don’t want indexed (e.g., admin panels or outdated URLs).&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Monitor Regularly&lt;/strong&gt;
Make it a habit to check Google Search Console or other SEO tools for new soft 404 errors and fix them promptly.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Creating a Custom 404 Page in Next.js 14
&lt;/h2&gt;

&lt;p&gt;A custom 404 page enhances your brand and guides lost users back to your site. In Next.js, create a pages/404.js file for file-based routing or app/not-found.js for app routing:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;File-Based Routing&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%2Feni2p8oiyjmlobn8ipfx.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%2Feni2p8oiyjmlobn8ipfx.png" alt="code-snippet-for-custom404-page-routing" width="800" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;App Routing&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%2Fmksa1u03dhxbpehimqov.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%2Fmksa1u03dhxbpehimqov.png" alt="code-snippet-for-custom404-app-routing" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Style the page to align with your site’s branding and consider adding search functionality or links to popular pages.&lt;/code&gt;&lt;/p&gt;




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

&lt;p&gt;Soft 404 errors can undermine your site’s SEO and user trust. Identifying and fixing these errors with redirects, better content, and a custom 404 page keeps your site user-friendly, and optimized for search engines.&lt;/p&gt;

&lt;h3&gt;
  
  
  Further Reading
&lt;/h3&gt;

&lt;p&gt;• &lt;a href="https://www.embarque.io/post/fix-and-prevent-soft-404-on-google-search-console" rel="noopener noreferrer"&gt;How We Fix and Prevent Soft 404 on Google Search Console: Our Comprehensive Guide&lt;/a&gt;&lt;br&gt;
• &lt;a href="https://neilpatel.com/blog/soft-404s/" rel="noopener noreferrer"&gt;What Are Soft 404s and How to Fix Them&lt;/a&gt;&lt;br&gt;
• &lt;a href="https://nextjs.org/docs/pages/building-your-application/routing/custom-error" rel="noopener noreferrer"&gt;Nextjs Custom Errors&lt;/a&gt; &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>nextjs</category>
      <category>soft404</category>
      <category>custom404</category>
    </item>
    <item>
      <title>My Journey Through Hacktoberfest 2024</title>
      <dc:creator>Angel Afube</dc:creator>
      <pubDate>Thu, 31 Oct 2024 13:44:22 +0000</pubDate>
      <link>https://dev.to/angel_afube/my-journey-through-hacktoberfest-2024-acd</link>
      <guid>https://dev.to/angel_afube/my-journey-through-hacktoberfest-2024-acd</guid>
      <description>&lt;p&gt;When I first heard about Hacktoberfest in the She Code Africa Slack channel, I was intrigued but unsure. The beautifully animated website immediately hooked me, though the vast list of GitHub repositories felt daunting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding My Feet
&lt;/h2&gt;

&lt;p&gt;The turning point came during an Expo session where Busayo Ojo broke down the event and shared strategies for finding projects that matched my skills. Armed with newfound confidence, I registered and began scouting for projects where I could contribute as both a developer and technical writer.&lt;/p&gt;

&lt;h2&gt;
  
  
  First Contributions: Struggling and Succeeding
&lt;/h2&gt;

&lt;p&gt;By October 9, just days after registering, I felt a sense of frustration. It seemed like everyone around me was securing tasks and getting assigned issues, while I was still pitching myself to project maintainers. My first project, &lt;strong&gt;Minifolio&lt;/strong&gt;, led me to propose more edits than I had planned, pushing me to up my contributions. Shortly after, I found &lt;strong&gt;AgencyWebsite&lt;/strong&gt;, where I enhanced the README and CONTRIBUTING.md files—a natural fit for my technical writing skills.&lt;/p&gt;

&lt;p&gt;My journey continued with &lt;strong&gt;Flowinance&lt;/strong&gt; and my first Wiki page contribution, which was a valuable learning experience. My final PR was with &lt;strong&gt;JobSewa&lt;/strong&gt;, where I revamped the UI on the job application page, blending design and development for a user-friendly interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  Projects
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Minifolio&lt;/strong&gt;&lt;br&gt;
Minimal portfolio template for developers&lt;br&gt;
&lt;a href="https://github.com/divyanshudhruv/Minifolio" rel="noopener noreferrer"&gt;Repo&lt;/a&gt; | &lt;a href="https://divyanshudhruv.is-a.dev/Minifolio/" rel="noopener noreferrer"&gt;Live link&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Contributions&lt;/em&gt;: Proposed significant UI improvements.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AgencyWebsite&lt;/strong&gt;&lt;br&gt;
React/Vite-based agency website enhanced with 3D elements&lt;br&gt;
&lt;a href="https://github.com/rajlakshmi18704/agencyWebsite" rel="noopener noreferrer"&gt;Repo&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Contributions&lt;/em&gt;: Enhanced documentation with a refined README and CONTRIBUTING.md.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Flowinance&lt;/strong&gt;&lt;br&gt;
Financial management app for transaction tracking&lt;br&gt;
&lt;a href="https://github.com/manuelalferez/flowinance" rel="noopener noreferrer"&gt;Repo&lt;/a&gt; | &lt;a href="https://github.com/manuelalferez/flowinance/wiki" rel="noopener noreferrer"&gt;Wiki&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Contributions&lt;/em&gt;: Created Wiki documentation to improve project navigation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;JobSewa&lt;/strong&gt;&lt;br&gt;
Job portal for connecting agricultural workers and employers&lt;br&gt;
&lt;a href="https://github.com/Devmangrani/JobSewa" rel="noopener noreferrer"&gt;Repo&lt;/a&gt; | &lt;a href="https://job-sewa.vercel.app/" rel="noopener noreferrer"&gt;Live link&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Contributions&lt;/em&gt;: Redesigned the UI for the job application page.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of these projects allowed me to apply and grow my skills as both a developer and technical writer while collaborating with fantastic maintainers and contributors!&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open source is for everyone,  regardless of your experience level.&lt;/li&gt;
&lt;li&gt;Share your ideas freely; it’s how the best outcomes happen.&lt;/li&gt;
&lt;li&gt;Embrace feedback; corrections help you grow.&lt;/li&gt;
&lt;li&gt;Open-source projects can feel overwhelming, but the rewards outweigh the hurdles.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Special Thanks
&lt;/h2&gt;

&lt;p&gt;Heartfelt appreciation to the Hacktoberfest organizers and project maintainers who made this journey worthwhile—your dedication made open-source accessible and welcoming.&lt;/p&gt;

&lt;p&gt;Big thanks to &lt;a href="https://www.linkedin.com/in/victoryejike/" rel="noopener noreferrer"&gt;Victory Ejike&lt;/a&gt; for encouraging me to bid for projects, even when I lacked experience. To the incredible, badass product designers who, despite their busy schedules, took the time to give me valuable feedback — &lt;a href="https://www.linkedin.com/in/faith-egwuenu/" rel="noopener noreferrer"&gt;Faith Egwenu&lt;/a&gt; and &lt;a href="https://www.linkedin.com/in/sophia-adepoju-089491192?utm_source=share&amp;amp;utm_campaign=share_via&amp;amp;utm_content=profile&amp;amp;utm_medium=android_app" rel="noopener noreferrer"&gt;Sophia Adepoju&lt;/a&gt;; thank you for the design inspirations that elevated my contributions. Your creativity and guidance were instrumental in shaping my UI enhancements!&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking Ahead
&lt;/h2&gt;

&lt;p&gt;Hacktoberfest was a rollercoaster of emotions and wins. With each PR, I became more comfortable in open-source spaces, learned to balance roles as a developer and writer, and built valuable skills. I’m eager to continue contributing to open-source, knowing persistence pays off and every project offers fresh lessons. Here’s to many more Hacktoberfests!&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hacktoberfest</category>
      <category>opensource</category>
    </item>
    <item>
      <title>A Simple HTTP Status Code Cheat, Maybe?</title>
      <dc:creator>Angel Afube</dc:creator>
      <pubDate>Thu, 12 Sep 2024 12:07:43 +0000</pubDate>
      <link>https://dev.to/angel_afube/a-simple-http-status-code-cheat-maybe-4can</link>
      <guid>https://dev.to/angel_afube/a-simple-http-status-code-cheat-maybe-4can</guid>
      <description>&lt;p&gt;I used to be puzzled by how senior developers instantly knew what to do based on the HTTP status codes they saw in the network tab. They would glance at the response and say things like, “Let me check the endpoint or payload,” or “It’s something on the backend or the server,” or even just “Hold on, let’s see if something else pops up.” Sure, I knew that the famous 200 status meant all was good, but beyond that, I had to constantly look up codes whenever they came up. &lt;/p&gt;

&lt;p&gt;Then, I came across a hack in Dr. Angela Yu’s Udemy course, where she referenced a keynote from Sander Hoogendoorn. He shared a simple way to remember the categories of HTTP status codes:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;100’s&lt;/strong&gt; → Hold on&lt;br&gt;
&lt;strong&gt;200’s&lt;/strong&gt; → Here you go!&lt;br&gt;
&lt;strong&gt;300’s&lt;/strong&gt; → Go away.&lt;br&gt;
&lt;strong&gt;400’s&lt;/strong&gt; → You screwed up (client-side)&lt;br&gt;
&lt;strong&gt;500’s&lt;/strong&gt; → I screwed up (server-side)&lt;/p&gt;

&lt;p&gt;This tip really helped me reduce the time I spent searching for what each status code meant. Now, like senior devs 🤭🙈, I can quickly identify where the issue might be coming from just by looking at the first digit of the status code. While I still refer to the documentation for details, this cheat sheet gives me a great starting point. I’m sharing this with you in the hopes that it helps you too!&lt;/p&gt;

&lt;h2&gt;
  
  
  What Are HTTP Codes?
&lt;/h2&gt;

&lt;p&gt;HTTP status codes are three-digit messages from a server in response to a browser's request. They help communicate how the request was handled — whether successful, redirected, failed, or other properties about the result of the request. They are essential in web development, giving developers and browsers critical information about the state of the server and the requested resource.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Are They Helpful?
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;They provide insights for debugging and error handling. By recognizing the meaning behind the codes, developers can focus their debugging efforts, quickly detect the root of issues, and hence; speed up the development process.&lt;/li&gt;
&lt;li&gt;These codes serve as communication bridges between the client and server-side; to handle actions such as browser behavior, redirects, caching, etc.&lt;/li&gt;
&lt;li&gt;HTTP response codes play an important role in user experience and search engine optimization. For instance, search engines use these codes to discover and evaluate the health of a website. Then, the 404 - not found pages guide users on the line of action to take - whether they inputted the wrong URL or the page is no longer available. &lt;/li&gt;
&lt;li&gt;Search engines are not the only ones who monitor the health of an application with status codes. DevOps team can also proactively use HTTP codes to monitor and spot issues with the server.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Common HTTP Status Codes and Their Meanings
&lt;/h2&gt;

&lt;p&gt;While I have the summarized bit, I still need some of these short explanations below to guide me in my debugging process. Here's a quick run-through of some common HTTP status codes I come across when I am coding or even just browsing through a site:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;100 Continue&lt;/strong&gt;&lt;br&gt;
The server has received the request headers, and the client should proceed to send the request body.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;200 OK&lt;/strong&gt;&lt;br&gt;
The request was successful, and the server returned the requested resource.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;201 Created&lt;/strong&gt;&lt;br&gt;
The request has been fulfilled, and a new resource has been created.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;204 No Content&lt;/strong&gt;&lt;br&gt;
The server successfully processed the request, but there is no content to send back.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;301 Moved Permanently&lt;/strong&gt;&lt;br&gt;
The resource has been permanently moved to a new URL.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;302 Found&lt;/strong&gt;&lt;br&gt;
The resource is temporarily located at a different URL.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;304 Not Modified&lt;/strong&gt;&lt;br&gt;
The resource has not been modified since the last request, and the client can use the cached version.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;400 Bad Request&lt;/strong&gt;&lt;br&gt;
The server could not understand the request due to invalid syntax.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;401 Unauthorized&lt;/strong&gt;&lt;br&gt;
The client must authenticate itself to get the requested response.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;403 Forbidden&lt;/strong&gt;&lt;br&gt;
The server understands the request, but the client does not have permission to access the resource.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;404 Not Found&lt;/strong&gt;&lt;br&gt;
The server could not find the requested resource.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;410 Gone&lt;/strong&gt;&lt;br&gt;
The resource is no longer available and has been permanently removed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;500 Internal Server Error&lt;/strong&gt;&lt;br&gt;
The server encountered an unexpected condition that prevented it from fulfilling the request.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;501 Not Implemented&lt;/strong&gt;&lt;br&gt;
The server does not support the functionality required to fulfill the request.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;502 Bad Gateway&lt;/strong&gt;&lt;br&gt;
The server, while trying to process the request, received an invalid response from another server it relied on to fulfill the request.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;503 Service Unavailable&lt;/strong&gt;&lt;br&gt;
The server is not ready to handle the request, often due to being overloaded or down for maintenance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;504 Gateway Timeout&lt;/strong&gt;&lt;br&gt;
The server, while acting as a gateway, did not receive a timely response from the upstream server.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;505 HTTP Version Not Supported&lt;/strong&gt;&lt;br&gt;
The server does not support the version of HTTP used in the request.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;So now whenever I come across status codes, I have this shortcode in my head with the brief explanations above.&lt;br&gt;
&lt;strong&gt;100's&lt;/strong&gt; → wait&lt;br&gt;
&lt;strong&gt;200's&lt;/strong&gt; → good&lt;br&gt;
&lt;strong&gt;300's&lt;/strong&gt; → go&lt;br&gt;
&lt;strong&gt;400's&lt;/strong&gt; → my bad&lt;br&gt;
&lt;strong&gt;500's&lt;/strong&gt; → your bad&lt;/p&gt;

&lt;p&gt;Feel free to create your own version or stick to Sander Hoogendoorn's! As I have highlighted earlier, this cheat is not a replacement for deep research, but it's a practical starting point for quickly diagnosing HTTP status codes and speeding up your development process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Further Reading
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Status" rel="noopener noreferrer"&gt;HTTP response status codes&lt;/a&gt;&lt;br&gt;
&lt;a href="https://umbraco.com/knowledge-base/http-status-codes/" rel="noopener noreferrer"&gt;HTTP Status Codes: All 63 explained - including FAQ &amp;amp; Video&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.dotcom-monitor.com/blog/the-10-most-common-http-status-codes/" rel="noopener noreferrer"&gt;The 10 Most Common HTTP Status Codes - Dotcom-Monitor Web Performance Blog&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.callrail.com/blog/the-ultimate-guide-to-http-status-codes" rel="noopener noreferrer"&gt;The Ultimate Guide to HTTP Status Codes&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.geeksforgeeks.org/10-most-common-http-status-codes/" rel="noopener noreferrer"&gt;10 Most Common HTTP Status Codes - GeeksforGeeks&lt;/a&gt;&lt;br&gt;
&lt;a href="https://seomator.com/blog/common-http-status-codes" rel="noopener noreferrer"&gt;13 Common HTTP Status Codes + Explanations - SEOmator&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>httpcode</category>
      <category>productivity</category>
    </item>
    <item>
      <title>"How Confusing Can Version Control Be?"</title>
      <dc:creator>Angel Afube</dc:creator>
      <pubDate>Mon, 09 Sep 2024 12:51:54 +0000</pubDate>
      <link>https://dev.to/angel_afube/how-confusing-can-version-control-be-1424</link>
      <guid>https://dev.to/angel_afube/how-confusing-can-version-control-be-1424</guid>
      <description>&lt;p&gt;As a junior front-end developer, my initial thought when asked to study extensively on version control, was, "&lt;em&gt;How hard could it be?&lt;/em&gt;" Create a branch, write code, commit, push, and then raise a pull request—simple, right? Well, I quickly realized that version control has its pitfalls, especially if you don’t fully understand how it works. Here are some lessons I learned the hard way that may help you avoid similar mistakes:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Always Pull from the Main Branch
&lt;/h2&gt;

&lt;p&gt;If you push your code and notice that your changes aren’t reflected or that you're missing some updates, you probably forgot to pull first. Trust me, I learned this the hard way! Before you start a new branch, always pull the latest changes from the default/main branch to ensure you're working with the latest version of the project. Failure to do so can result in missing key components that your task may depend on and, worst of all, merge conflicts later.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. How do branches work exactly?
&lt;/h2&gt;

&lt;p&gt;I once attempted to revert a hero section ui by switching to an older branch and pushing, assuming the old design would return with the push. But nothing changed! It felt like trying to unlock a door with the wrong key — no matter how hard I tried, it just wouldn't work. What I didn’t understand was that branches are independent lines of development, which serve as pointers to commits. So switching to an old branch would only point to the project history recorded in that branch. To effect changes, one must compare and merge with the main branch properly.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. &lt;strong&gt;git stash&lt;/strong&gt; and &lt;strong&gt;git stash pop&lt;/strong&gt; are Lifesavers
&lt;/h2&gt;

&lt;p&gt;Ever forget to switch branches and accidentally make changes on the main branch? Yep, that happened to me. But git stash saved the day. It temporarily stores your changes, allowing you to switch branches and apply the changes later with git stash pop. &lt;strong&gt;git reset HEAD&lt;/strong&gt; is another powerful command to undo changes in case you realize you messed up.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Handling Divergent Branches
&lt;/h2&gt;

&lt;p&gt;Divergent branches occur when the histories of two branches have different sets of commits that do not share a common base. When branches diverge, choosing how to reconcile them is crucial. Please opt for &lt;strong&gt;git config pull.rebase false (merge)&lt;/strong&gt; over &lt;strong&gt;&lt;em&gt;git config pull.rebase true (rebase)&lt;/em&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;em&gt;git config pull.ff only (fast-forward only)&lt;/em&gt;&lt;/strong&gt; — a tip from a senior dev!. It is a safer option to preserve the history of all commits and have a record of all merges.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Organized Commits Are Key
&lt;/h2&gt;

&lt;p&gt;This isn’t directly about version control, but well-organized commits make git log incredibly helpful. Don't wait until you’re almost done to make one huge commit. Break your work into smaller, meaningful commits. If you're setting up the UI, commit. Consuming an endpoint? Commit again. Make each step trackable; especially for times when you might need to revert.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Use .gitignore wisely
&lt;/h2&gt;

&lt;p&gt;Some files and configurations (like sensitive credentials) should be excluded from version control. Make sure you have a proper .gitignore file to avoid accidentally pushing sensitive or unnecessary files to the repo. You don’t want to expose secret API keys or clutter your repo with logs.&lt;/p&gt;

&lt;p&gt;These are just a few version control tips from my experience as a junior dev. They’re by no means exhaustive, but I hope they save you from some of the mistakes I made. If you have any other tips or pitfalls to avoid, feel free to share them with me!&lt;/p&gt;

&lt;h2&gt;
  
  
  Further Reading
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.atlassian.com/git/tutorials/what-is-version-control#:~:text=Version%20control%2C%20also%20known%20as,to%20source%20code%20over%20time" rel="noopener noreferrer"&gt;What is version control | Atlassian Git Tutorial.&lt;/a&gt;&lt;br&gt;
&lt;a href="https://git-scm.com/docs/git-log" rel="noopener noreferrer"&gt;git-log Documentation &lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.atlassian.com/git/tutorials/using-branches" rel="noopener noreferrer"&gt;Git Branch | Atlassian Git Tutorial&lt;/a&gt;&lt;br&gt;
&lt;a href="https://medium.com/@rajlaxmii/git-error-you-have-divergent-branches-and-need-to-specify-how-to-reconcile-them-75e97bd8abd2" rel="noopener noreferrer"&gt;Git Error: You have divergent branches and need to specify how to reconcile them. | by Sakshi Rathore | Medium &lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/github/gitignore" rel="noopener noreferrer"&gt;A collection of useful .gitignore templates &lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>git</category>
      <category>webdev</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Exploring the Angular vs. Next.js Debate</title>
      <dc:creator>Angel Afube</dc:creator>
      <pubDate>Sat, 29 Jun 2024 03:11:59 +0000</pubDate>
      <link>https://dev.to/angel_afube/exploring-the-angular-vs-nextjs-debate-3ab9</link>
      <guid>https://dev.to/angel_afube/exploring-the-angular-vs-nextjs-debate-3ab9</guid>
      <description>&lt;p&gt;Choosing the right development framework can make or break a project; shaping its efficiency, production quality, and overall success. Every developer has their favorite, but the real challenge lies in selecting the one that best suits your project needs.&lt;/p&gt;

&lt;p&gt;In the dynamic world of JavaScript frameworks, Next.js and Angular stand out as two of the most powerful and popular choices. This article takes you on an exploration of these powerful frameworks, uncovering their unique strengths and ideal use cases. So whether you're chasing efficiency, scalability, or just the coolest tech, we've got the insights you need to make an informed decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nextjs
&lt;/h2&gt;

&lt;p&gt;Next.js is a powerful React framework that takes web development to the next level. Its React component is designed to help developers create dynamic, full-stack web applications with ease. Imagine building sleek, responsive user interfaces that not only look great but perform exceptionally well. With Next.js, you can do just that, thanks to its impressive features like static site generation (SSG), server-side rendering (SSR), and incremental site regeneration, among other cool features.&lt;/p&gt;

&lt;p&gt;The development process is streamlined by configuring the necessary tooling for React projects right out of the box. Its built-in server and compatibility with numerous npm modules allow developers to jump-start any project quickly. This means you can focus more on building and less on configuration, saving both time and cost. The result? An interactive, fast, and awesome web application that stands out in today's digital landscape.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key features&lt;/strong&gt;&lt;br&gt;
Hybrid Pre-rendering: Next.js provides developers with the flexibility to choose how they render their pages, whether through static site generation (SSG), server-side rendering (SSR), or a combination of both. This approach ensures that users experience fast and smooth performance, regardless of the rendering method chosen.&lt;/p&gt;

&lt;p&gt;Simplified File-based Routing: Next.js comes with a simplified file-based routing system that supports nested routing, error handling, and loading states. This makes creating and managing page routes straightforward and efficient, enhancing the overall development process.&lt;/p&gt;

&lt;p&gt;Efficient Code Splitting: With Nextjs's code splitting, the codes are partitioned into smaller bundles, such that only the necessary javascript is loaded on demand. This results in faster page load times and seamless navigation throughout the web app, significantly improving the user experience.&lt;/p&gt;

&lt;p&gt;Optimization of Images, Scripts, and Fonts: Next.js includes built-in optimizations for images, scripts, and fonts, enhancing website rendering and core web vitals. These optimizations lead to faster loading times and a better overall user experience.&lt;/p&gt;

&lt;p&gt;Advanced Data Fetching: Next.JS excels in data fetching with built-in capabilities for importing data from external APIs. Using async/await in server components and an extended fetch API, developers can handle request memoization, data caching, and revalidation effortlessly. This simplifies the process of retrieving data, making code easier and more efficient to read and write.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Impressive web speed and performance owing to Next.js's awesome built-in features like code splitting, hybrid pre-rendering, image optimization, and intuitive data-fetching.&lt;/li&gt;
&lt;li&gt;Simplified file and routing structure for seamless web application development.&lt;/li&gt;
&lt;li&gt;A large, active, and reliable community; making helpful resources and essential documentation available for developers to code, debug, and build more efficiently.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For developers with little or no knowledge of React, learning Next.js can be a bit of a hurdle.&lt;/li&gt;
&lt;li&gt;It may seem overly complex for certain use cases.&lt;/li&gt;
&lt;li&gt;There are concerns about its limited scalability, which can lead to performance issues.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Angular
&lt;/h2&gt;

&lt;p&gt;Angular is a powerhouse application-design framework perfect for crafting efficient and sophisticated single-page apps. With its reusable components, impressive two-way data binding, and seamless dependency injection, Angular simplifies the creation of dynamic, complex, and large-scale applications.&lt;/p&gt;

&lt;p&gt;Additionally, its extensive third-party libraries and vibrant community support make it a go-to choice for developers aiming to build robust, complex, and high-performance web applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key features&lt;/strong&gt;&lt;br&gt;
Component-Based Architecture: Angular's architecture, similar to React, promotes reusability and maintainability. By breaking down the UI into reusable components, developers can build and manage complex applications more efficiently.&lt;/p&gt;

&lt;p&gt;Seamless Two-Way Data Binding: The two-way binding available with Angular automatically synchronizes the model and the view, saving developers time and effort. This ensures that any changes in the model are instantly reflected in the view and vice versa, simplifying state management.&lt;/p&gt;

&lt;p&gt;Powerful Dependency Injection: Angular's robust dependency injection system streamlines the management of code and functionalities. This system efficiently delivers services and manages dependencies, ensuring that components have everything they need to function properly.&lt;/p&gt;

&lt;p&gt;Built-in Routing System: Angular has an impressive built-in routing system that allows developers to map different states to specific URLs. This feature supports dynamic user interfaces and multiple views, enhancing the single-page application experience.&lt;/p&gt;

&lt;p&gt;Reactive Programming Support: The reactive programming possible with Angular makes it fantastic for handling asynchronous data streams and events. This allows for automatic updates whenever data changes, leading to more responsive applications.&lt;/p&gt;

&lt;p&gt;Powerful Template Language: Angular's powerful template language simplifies DOM manipulation, enabling developers to create interactive and dynamic user interfaces with ease. This makes building complex UIs more intuitive and efficient.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It is a great framework for building large-scale, enterprise-level, and complex web applications; ensuring speed, high performance, and scalability.&lt;/li&gt;
&lt;li&gt;Features such as dependency injection, an inbuilt routing system, and two-way data binding make it easy to manage and maintain the codebase.&lt;/li&gt;
&lt;li&gt;A large and vibrant community dedicated to constantly improving the functionalities available; and providing a wealth of resources to keep developers informed and equipped to build applications with Angular.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For developers new to Angular, learning can be time-consuming and challenging.&lt;/li&gt;
&lt;li&gt;While Angular is powerful, it can sometimes face certain performance limitations.&lt;/li&gt;
&lt;li&gt;Angular's extensive functionalities can be somewhat of an overkill for lightweight projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Comparison
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Performance and Scalability&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Both Angular and Nextjs excel at the topic of performance and scalability, but they approach it differently. Nextjs leverages pre-rendering and automatic code-splitting features for pages to load faster and be more responsive. In contrast, Angular employs client-side rendering, which requires loading all necessary code upfront, impacting load time compared to Nextjs.&lt;/p&gt;

&lt;p&gt;When we look at it from the angle of handling large-scale, complex applications, Angular shines more with its robust two-way binding and dependency injection for ease of code management. In summary, while Nextjs is the guy for high-traffic projects that require speed and great performance; Angular is most suitable for enterprise-level and extensive applications, that require scalability and comprehensive solutions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The learning curve&lt;/strong&gt;&lt;br&gt;
Nextjs and Angular boast a large and vibrant community, offering extensive resources to learn and understand the frameworks. While this is true, the learning curve varies depending on the developer's experience. For Nextjs, prior knowledge of ReactJs is required to ease the learning and assimilation process. Newcomers to Angular may be required to put in good effort and time to get a good grasp of its architecture and concepts.&lt;/p&gt;

&lt;p&gt;Thankfully, both frameworks provide more than enough documentation, tools, tutorials, and guides to enable developers to master the skills and build cool applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Community&lt;/strong&gt;&lt;br&gt;
Next.js and Angular stand out as top JavaScript frameworks for good reason - they boast vibrant and active developer communities ready to support and collaborate.&lt;/p&gt;

&lt;p&gt;Angular boasts a mature and extensive ecosystem backed by Google, while Next.js leverages React's extensive ecosystem and community support. Regardless of the diversity in the community, both frameworks provide rich documentation, tools, tutorials, and support that facilitate learning and development, making them reliable choices for developers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Use Cases&lt;/strong&gt;&lt;br&gt;
At this point in this article, it is clear that Next.js and Angular are two powerful JavaScript frameworks that cater to different needs and project requirements. Nextjs is the ideal tool for applications that prioritize server-side rendering, SEO optimization, and high-performance needs; while Angular thrives in developing large-scale, enterprise-level applications that require intricate functionalities and robust architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Sidetrack to ReactJS
&lt;/h2&gt;

&lt;p&gt;To truly appreciate the concepts in Next.js, it's essential to have a solid grasp of React first. Next.js is built on top of React, and Angular, while different, also shares foundational concepts with React aimed at building fast, high-performing applications seamlessly. Understanding React will not only help one excel in using Next.js but also give a better grasp of Angular's architecture and philosophy. So, it should be no surprise that I am thrilled to deepen my understanding of ReactJS and enhance my skills as a front-end developer.&lt;/p&gt;

&lt;p&gt;On that note, I am eagerly looking forward to my journey with the HNG Internship, which promises to push me to new heights in building dynamic applications with ReactJS. This experience will undoubtedly refine my abilities and broaden my horizons in web development.&lt;/p&gt;

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

&lt;p&gt;Both Next.js and Angular offer unique advantages and cater to different project needs. Next.js excels in performance and simplicity, making it ideal for server-rendered applications. Angular, on the other hand, provides a comprehensive solution for large-scale, enterprise-level, high-performance, and scalable applications.&lt;/p&gt;

&lt;p&gt;But we shouldn't forget what we established from the start - that ultimately, the focus of development should always be on what the project requires. Each framework has its strengths, but the choice depends on the specific needs and goals of the project.&lt;/p&gt;

&lt;p&gt;If you're interested in learning more about the HNG internship and the opportunities it offers, check out their &lt;a href="https://hng.tech/internship" rel="noopener noreferrer"&gt;internship page&lt;/a&gt;. For employment purposes, explore how you can &lt;a href="https://hng.tech/hire" rel="noopener noreferrer"&gt;hire top talent&lt;/a&gt; from the program. The HNG Internship is an incredible platform to hone your skills and gain real-world experience in the tech industry, and I can't wait to dive in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FURTHER READING&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://nextjs.org/docs" rel="noopener noreferrer"&gt;NEXT.JS&lt;/a&gt;&lt;br&gt;
&lt;a href="https://v17.angular.io/docs" rel="noopener noreferrer"&gt;ANGULAR&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.tatvasoft.com/outsourcing/2024/04/next-js-vs-angular.html#:~:text=Which%20is%20better%2C%20Angular%20or,each%20have%20their%20unique%20strengths." rel="noopener noreferrer"&gt;Nextjs vs Angular: Choose the Right Framework&lt;/a&gt;&lt;br&gt;
&lt;a href="https://medium.com/@nirantharika5/angular-vs-next-js-choosing-the-right-framework-for-your-web-development-project-e7029420bc2c" rel="noopener noreferrer"&gt;Angular vs. Next.js: Choosing the Right Framework for Your Web Development Project&lt;/a&gt;&lt;br&gt;
&lt;a href="https://medium.com/@kush_kumar/next-js-vs-angularjs-a-comparative-analysis-0954a2067f8d" rel="noopener noreferrer"&gt;Next.js vs AngularJS: A Comparative Analysis&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.frontendmag.com/insights/next-js-vs-angular/" rel="noopener noreferrer"&gt;Next JS vs Angular: A Comprehensive Comparison&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>nextjs</category>
      <category>angular</category>
      <category>react</category>
    </item>
  </channel>
</rss>
