<?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: Muhammad Rabbi</title>
    <description>The latest articles on DEV Community by Muhammad Rabbi (@muhammad_rabbi_dev).</description>
    <link>https://dev.to/muhammad_rabbi_dev</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3485872%2Fcdac7c19-2444-4e3c-aecf-82b5cf5d0be8.png</url>
      <title>DEV Community: Muhammad Rabbi</title>
      <link>https://dev.to/muhammad_rabbi_dev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/muhammad_rabbi_dev"/>
    <language>en</language>
    <item>
      <title>I Thought This E-commerce Site Was Making Zero API Requests. I Was Wrong.</title>
      <dc:creator>Muhammad Rabbi</dc:creator>
      <pubDate>Wed, 30 Sep 2026 18:10:58 +0000</pubDate>
      <link>https://dev.to/muhammad_rabbi_dev/i-thought-this-e-commerce-site-was-making-zero-api-requests-i-was-wrong-3l04</link>
      <guid>https://dev.to/muhammad_rabbi_dev/i-thought-this-e-commerce-site-was-making-zero-api-requests-i-was-wrong-3l04</guid>
      <description>&lt;h1&gt;
  
  
  I Thought This E-commerce Site Was Making Zero API Requests. I Was Wrong.
&lt;/h1&gt;

&lt;p&gt;A few days ago, I was inspecting an e-commerce website because I wanted to understand one thing:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"How the hell is this page getting its data without making an obvious API request?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The site was &lt;strong&gt;Ghorer Bazar&lt;/strong&gt;, and I was looking at a collection page:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/collections/honey-2&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I opened Chrome DevTools, went straight to the Network tab, filtered the requests, and started looking for the usual suspects:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/api/products
/api/products?category=honey
/graphql
/products
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nothing obvious.&lt;/p&gt;

&lt;p&gt;And that tiny observation sent me down a much deeper rabbit hole.&lt;/p&gt;

&lt;p&gt;I started asking questions that turned into a complete architecture investigation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the data being fetched from an API?&lt;/li&gt;
&lt;li&gt;Is it rendered on the server?&lt;/li&gt;
&lt;li&gt;Is the HTML cached?&lt;/li&gt;
&lt;li&gt;Is Cloudflare involved?&lt;/li&gt;
&lt;li&gt;Why does navigation sometimes feel instant?&lt;/li&gt;
&lt;li&gt;Is the browser prefetching pages?&lt;/li&gt;
&lt;li&gt;What exactly are Priority Hints?&lt;/li&gt;
&lt;li&gt;Could I build my own Next.js e-commerce site like this?&lt;/li&gt;
&lt;li&gt;Most importantly, how do all these pieces fit together?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This article is the story of what I learned.&lt;/p&gt;




&lt;h1&gt;
  
  
  The First Clue: "Where Is the API?"
&lt;/h1&gt;

&lt;p&gt;I started with the most basic assumption.&lt;/p&gt;

&lt;p&gt;An e-commerce page has products.&lt;/p&gt;

&lt;p&gt;Products live in a database.&lt;/p&gt;

&lt;p&gt;Therefore:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser
   ↓
API
   ↓
Database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Right?&lt;/p&gt;

&lt;p&gt;That's one common architecture.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser
   ↓
GET /api/products?category=honey
   ↓
Backend
   ↓
PostgreSQL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The browser receives JSON:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"products"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Premium Honey"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;850&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then JavaScript renders the products.&lt;/p&gt;

&lt;p&gt;So naturally I expected to see something similar in DevTools.&lt;/p&gt;

&lt;p&gt;But I didn't.&lt;/p&gt;

&lt;p&gt;Instead, the important request looked like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET https://ghorerbazar.com/collections/honey-2

Status: 200
Type: document
Content-Type: text/html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that changed the direction of the investigation.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Browser Was Already Receiving HTML
&lt;/h1&gt;

&lt;p&gt;The request wasn't:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/api/products
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/collections/honey-2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And the response was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;text/html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That means the browser wasn't necessarily asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Give me the product data."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It could simply be asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Give me the page."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And somewhere on the server, the application can do the database work before sending the result back.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser
   │
   │ GET /collections/honey-2
   ▼
Server
   │
   │ Query database
   ▼
Database
   │
   │ Products
   ▼
Server
   │
   │ Render HTML
   ▼
Browser
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So there doesn't have to be a visible browser request such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/api/products
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The database query can happen entirely on the server.&lt;/p&gt;

&lt;p&gt;That distinction was probably the biggest lesson of this whole investigation.&lt;/p&gt;




&lt;h1&gt;
  
  
  "No API Request" Does Not Mean "No Data Request"
&lt;/h1&gt;

&lt;p&gt;This is something I think many frontend developers misunderstand at first.&lt;/p&gt;

&lt;p&gt;There are two very different things.&lt;/p&gt;

&lt;h2&gt;
  
  
  Browser → API
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser → /api/products → Server → DB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And:&lt;/p&gt;

&lt;h2&gt;
  
  
  Browser → Page → Server → DB
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser → /collections/honey-2 → Server → DB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the second architecture, the database request exists.&lt;/p&gt;

&lt;p&gt;You just don't see it from the browser.&lt;/p&gt;

&lt;p&gt;It's server-side work.&lt;/p&gt;

&lt;p&gt;This is one of the reasons frameworks such as Next.js are interesting.&lt;/p&gt;

&lt;p&gt;With the App Router, Next.js supports Server Components and server-side data fetching, so application code can retrieve data on the server rather than forcing every database interaction through a browser-visible REST endpoint.&lt;/p&gt;

&lt;p&gt;For example, conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;CollectionPage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;prisma&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findMany&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;where&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;category&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;honey&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ProductCard&lt;/span&gt;
          &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
          &lt;span class="na"&gt;product&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The browser doesn't need to know that Prisma exists.&lt;/p&gt;

&lt;p&gt;It simply receives the rendered result.&lt;/p&gt;




&lt;h1&gt;
  
  
  Then I Looked at the Network Headers
&lt;/h1&gt;

&lt;p&gt;Now things became even more interesting.&lt;/p&gt;

&lt;p&gt;The collection page response showed headers like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Server: cloudflare
Content-Encoding: br
Cache-Control: max-age=600, public
CF-Cache-Status: DYNAMIC
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There were also cookies being set.&lt;/p&gt;

&lt;p&gt;The response was going through Cloudflare.&lt;/p&gt;

&lt;p&gt;This immediately gave me another piece of the architecture.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser
   ↓
Next.js
   ↓
Database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;the architecture can look more like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser
   ↓
Cloudflare
   ↓
Application Server
   ↓
Database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cloudflare can sit in front of the application as a CDN, reverse proxy, security layer, and cache.&lt;/p&gt;

&lt;p&gt;But this is where I made another mistake.&lt;/p&gt;




&lt;h1&gt;
  
  
  Cloudflare ≠ Everything Is Cached
&lt;/h1&gt;

&lt;p&gt;Seeing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Server: cloudflare
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;does &lt;strong&gt;not&lt;/strong&gt; automatically mean:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This page came from Cloudflare's cache."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The response I inspected had:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CF-Cache-Status: DYNAMIC
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That means the particular response was classified as dynamic rather than being returned as a cache hit.&lt;/p&gt;

&lt;p&gt;This is an important distinction.&lt;/p&gt;

&lt;p&gt;Cloudflare can be sitting in front of your application even when a request still reaches your origin server.&lt;/p&gt;

&lt;p&gt;So the architecture could still be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser
   ↓
Cloudflare
   ↓
Origin server
   ↓
Database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cloudflare is still useful even if that HTML response isn't cached.&lt;/p&gt;




&lt;h1&gt;
  
  
  Then Why Was There &lt;code&gt;max-age=600&lt;/code&gt;?
&lt;/h1&gt;

&lt;p&gt;This was another nice DevTools lesson.&lt;/p&gt;

&lt;p&gt;The page had:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cache-Control: max-age=600, public
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At first glance, that looks like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Great, the page is cached for 10 minutes."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But caching is more complicated than reading one header.&lt;/p&gt;

&lt;p&gt;There are multiple layers involved:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser cache
       +
CDN cache
       +
Application/framework cache
       +
Database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A response can have cache-related headers without necessarily behaving exactly how you expect at every caching layer.&lt;/p&gt;

&lt;p&gt;Things like cookies, cache rules, request headers, and CDN configuration can affect the result.&lt;/p&gt;

&lt;p&gt;That's why:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cache-Control: public
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CF-Cache-Status: DYNAMIC
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;can appear together.&lt;/p&gt;

&lt;p&gt;The lesson wasn't:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Cloudflare caching is broken."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The lesson was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Never assume the caching architecture from a single header.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Inspect the entire request/response behavior.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Page Was Loading A Lot More Than Just HTML
&lt;/h1&gt;

&lt;p&gt;At this point I started looking at the complete Network waterfall instead of one request.&lt;/p&gt;

&lt;p&gt;On my captured run, the page had roughly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;148 requests
4.6 MB transferred
14.5 MB resources
DOMContentLoaded ≈ 2.62s
Load ≈ 3.74s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JavaScript bundles&lt;/li&gt;
&lt;li&gt;CSS&lt;/li&gt;
&lt;li&gt;fonts&lt;/li&gt;
&lt;li&gt;images&lt;/li&gt;
&lt;li&gt;analytics&lt;/li&gt;
&lt;li&gt;third-party scripts&lt;/li&gt;
&lt;li&gt;security scripts&lt;/li&gt;
&lt;li&gt;chat-related resources&lt;/li&gt;
&lt;li&gt;application code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One JavaScript bundle alone was around hundreds of kilobytes.&lt;/p&gt;

&lt;p&gt;So the page wasn't magically fast because it loaded "nothing."&lt;/p&gt;

&lt;p&gt;It was loading plenty.&lt;/p&gt;

&lt;p&gt;What mattered was &lt;strong&gt;how the work was organized&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  Then I Discovered the Difference Between HTML and Navigation
&lt;/h1&gt;

&lt;p&gt;This was the next puzzle.&lt;/p&gt;

&lt;p&gt;I noticed that navigating around modern websites can feel almost instant.&lt;/p&gt;

&lt;p&gt;You click:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Honey&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dates&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Oil&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And it feels like the browser never fully reloads.&lt;/p&gt;

&lt;p&gt;But does that mean there was no network request?&lt;/p&gt;

&lt;p&gt;Not necessarily.&lt;/p&gt;

&lt;p&gt;Modern frameworks can change the meaning of navigation.&lt;/p&gt;

&lt;p&gt;With Next.js App Router, client-side navigation, prefetching, Server Components, streaming, and caching can all work together.&lt;/p&gt;

&lt;p&gt;So there are several possibilities.&lt;/p&gt;




&lt;h1&gt;
  
  
  Possibility One: Full Page Request
&lt;/h1&gt;

&lt;p&gt;The simplest case:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Click link
   ↓
Browser requests page
   ↓
Server responds with HTML
   ↓
Browser loads it
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a traditional navigation.&lt;/p&gt;




&lt;h1&gt;
  
  
  Possibility Two: Prefetching
&lt;/h1&gt;

&lt;p&gt;Here's where things get interesting.&lt;/p&gt;

&lt;p&gt;Imagine you are on:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And there is a link:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/collections/honey-2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The framework may decide to fetch information for that route before you click it.&lt;/p&gt;

&lt;p&gt;So the timeline can become:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Page loaded
    ↓
Browser sees link
    ↓
Prefetch happens
    ↓
User clicks
    ↓
Already-prepared data is used
    ↓
Navigation feels instant
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now imagine opening DevTools after you've clicked.&lt;/p&gt;

&lt;p&gt;You might think:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"There was no request!"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But the request may have happened &lt;strong&gt;before you clicked&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That completely changes how you debug performance.&lt;/p&gt;

&lt;p&gt;You shouldn't only ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What happened after the click?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You should ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"What happened before the click?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  That Was My "Aha!" Moment
&lt;/h1&gt;

&lt;p&gt;I had been treating the browser like a simple messenger:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User click
   ↓
Request
   ↓
Response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Modern applications are more like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Initial load
   ↓
Prefetch
   ↓
Caching
   ↓
Server rendering
   ↓
Client-side navigation
   ↓
Streaming
   ↓
Image optimization
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Several of those can happen before the user consciously notices anything.&lt;/p&gt;

&lt;p&gt;That's why performance debugging requires watching the entire lifecycle rather than one request.&lt;/p&gt;




&lt;h1&gt;
  
  
  Then I Found Priority Hints
&lt;/h1&gt;

&lt;p&gt;Another thing that caught my attention was &lt;strong&gt;Priority Hints&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is one of those features that sounds complicated until you reduce it to one question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Which resource should the browser care about first?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Imagine a product page contains:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hero image
Product image
20 review avatars
Footer logo
Chat icon
Analytics script
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The browser has limited bandwidth and connection resources.&lt;/p&gt;

&lt;p&gt;Should all of them have the same urgency?&lt;/p&gt;

&lt;p&gt;Obviously not.&lt;/p&gt;

&lt;p&gt;Your hero image might be extremely important because it is part of the first visible screen.&lt;/p&gt;

&lt;p&gt;The footer logo?&lt;/p&gt;

&lt;p&gt;Probably not.&lt;/p&gt;

&lt;p&gt;Priority Hints allow developers to provide the browser with a hint about resource importance.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt;
  &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"/hero.webp"&lt;/span&gt;
  &lt;span class="na"&gt;fetchpriority=&lt;/span&gt;&lt;span class="s"&gt;"high"&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;versus:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt;
  &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"/background-decoration.webp"&lt;/span&gt;
  &lt;span class="na"&gt;fetchpriority=&lt;/span&gt;&lt;span class="s"&gt;"low"&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important word is &lt;strong&gt;hint&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It's not a command saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Browser, you MUST download this first."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It's a signal about relative priority.&lt;/p&gt;

&lt;p&gt;And that distinction matters.&lt;/p&gt;




&lt;h1&gt;
  
  
  Priority and Lazy Loading Are Not the Same Thing
&lt;/h1&gt;

&lt;p&gt;This was another useful distinction.&lt;/p&gt;

&lt;p&gt;Developers often mix these together:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lazy loading&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;and:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fetch priority&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;They solve different problems.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lazy loading asks:
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;"Should this resource wait until it is near the viewport?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Priority asks:
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;"Once this resource is eligible to load, how urgent is it compared with other resources?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For an e-commerce page, that can become a nice combination:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hero image
→ load early
→ high importance

Below-the-fold images
→ lazy load
→ lower urgency

Decorative assets
→ low priority
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next.js's image tooling is designed to help with responsive image delivery, loading behavior, and image optimization.&lt;/p&gt;

&lt;p&gt;But there is another important lesson:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Don't mark everything as high priority.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If everything is "high priority," then the concept loses much of its value.&lt;/p&gt;




&lt;h1&gt;
  
  
  This Made Me Think About My Own E-commerce Project
&lt;/h1&gt;

&lt;p&gt;At this point, the investigation stopped being about another website.&lt;/p&gt;

&lt;p&gt;I started thinking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What would I build if I wanted this same kind of architecture?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;My stack is already something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Next.js
Prisma
Neon PostgreSQL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So I started designing the architecture around the principles I had learned.&lt;/p&gt;

&lt;p&gt;And this is what I came up with.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Architecture I Want
&lt;/h1&gt;

&lt;p&gt;Instead of building:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser
   ↓
REST API
   ↓
Database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for every single page, I can use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    ┌──────────────────────┐
                    │      Cloudflare      │
                    │ CDN / Security/Cache │
                    └──────────┬───────────┘
                               │
                               ▼
                    ┌──────────────────────┐
                    │       Next.js        │
                    │     App Router       │
                    └──────────┬───────────┘
                               │
             ┌─────────────────┼─────────────────┐
             │                 │                 │
             ▼                 ▼                 ▼
      Server Components   Client Components   Server Actions/
             │                 │               Route Handlers
             │                 │                 │
             ▼                 ▼                 ▼
          Prisma          Cart / UI          Orders / mutations
             │
             ▼
      Neon PostgreSQL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That architecture is much closer to how I now think about a modern e-commerce application.&lt;/p&gt;




&lt;h1&gt;
  
  
  Product Pages Don't Need to Be Fully Dynamic
&lt;/h1&gt;

&lt;p&gt;This is another big lesson.&lt;/p&gt;

&lt;p&gt;Consider:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/products/honey
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Does every visitor need a completely different product page?&lt;/p&gt;

&lt;p&gt;Usually, no.&lt;/p&gt;

&lt;p&gt;The product title is shared.&lt;/p&gt;

&lt;p&gt;The description is shared.&lt;/p&gt;

&lt;p&gt;The images are shared.&lt;/p&gt;

&lt;p&gt;The category is shared.&lt;/p&gt;

&lt;p&gt;The public price may be shared.&lt;/p&gt;

&lt;p&gt;So a product page can often take advantage of server rendering and caching strategies.&lt;/p&gt;

&lt;p&gt;Next.js supports static and dynamic rendering patterns, allowing developers to choose where content needs to be generated dynamically and where it can be reused.&lt;/p&gt;

&lt;p&gt;That means I can think about my website in categories:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Public catalog
    ↓
Cache-friendly

Search
    ↓
More dynamic

Cart
    ↓
Client-side state

Checkout
    ↓
Server-controlled

Admin
    ↓
Private / dynamic
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is much more useful than saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Everything should be SSR."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;or:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Everything should be a client component."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Architecture is about choosing the right behavior for each type of data.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Cart Is Different
&lt;/h1&gt;

&lt;p&gt;A shopping cart is highly interactive.&lt;/p&gt;

&lt;p&gt;The user can do:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+
-
remove
update quantity
apply coupon
open cart
close cart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is a great place for client-side interaction.&lt;/p&gt;

&lt;p&gt;So I don't necessarily want every tiny cart interaction to involve a full server round trip.&lt;/p&gt;

&lt;p&gt;Something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Product page
    ↓
"Add to cart"
    ↓
Client-side cart state
    ↓
Cart UI updates instantly
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But there is a very important security boundary.&lt;/p&gt;

&lt;p&gt;At checkout:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client says:

"I want 3 products."

        ↓

Server checks:

- current product price
- stock
- discounts
- user/session
- totals

        ↓

Create order
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The client should never be trusted with final pricing logic.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Most Dangerous Cloudflare Rule
&lt;/h1&gt;

&lt;p&gt;After learning all this, I can imagine the next beginner mistake.&lt;/p&gt;

&lt;p&gt;You add Cloudflare.&lt;/p&gt;

&lt;p&gt;Everything looks fast.&lt;/p&gt;

&lt;p&gt;Then you think:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Let's cache everything!"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Bad idea.&lt;/p&gt;

&lt;p&gt;Imagine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/cart
/checkout
/account
/admin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These pages can contain personalized or sensitive information.&lt;/p&gt;

&lt;p&gt;Caching them carelessly can create serious correctness and security problems.&lt;/p&gt;

&lt;p&gt;So a much safer mental model is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PUBLIC

/products/*
/collections/*
/
/blog/*

↓

Potentially cacheable
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;while:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PRIVATE

/cart
/checkout
/account/*
/admin/*
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;should generally be treated very differently.&lt;/p&gt;

&lt;p&gt;Cloudflare provides Cache Rules specifically for configuring caching behavior rather than blindly caching everything.&lt;/p&gt;




&lt;h1&gt;
  
  
  My Final Mental Model
&lt;/h1&gt;

&lt;p&gt;Before this investigation, I thought performance looked like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Frontend
   ↓
API
   ↓
Database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now I see a much larger picture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                         USER
                           │
                           ▼
                    ┌─────────────┐
                    │  Browser    │
                    └──────┬──────┘
                           │
             prefetch / navigation / requests
                           │
                           ▼
                  ┌─────────────────┐
                  │   Cloudflare    │
                  │ CDN / Security  │
                  │     / Cache     │
                  └────────┬────────┘
                           │
                           ▼
                  ┌─────────────────┐
                  │     Next.js     │
                  │   App Router    │
                  └────────┬────────┘
                           │
             ┌─────────────┼─────────────┐
             │             │             │
             ▼             ▼             ▼
        Server          Client       Mutations
       Components     Components      / APIs
             │             │             │
             ▼             │             ▼
          Prisma           │          Server
             │             │          validation
             ▼             │             │
      Neon PostgreSQL      │             ▼
                           │           Order
                           ▼
                         Cart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And around all of that:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Images
   ↓
Next.js Image Optimization

Resources
   ↓
Priority hints / lazy loading

Navigation
   ↓
Prefetching

Public pages
   ↓
Caching / revalidation

Dynamic pages
   ↓
Server rendering

Static assets
   ↓
CDN
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  What I Actually Learned
&lt;/h1&gt;

&lt;p&gt;The most valuable thing I learned wasn't one specific technology.&lt;/p&gt;

&lt;p&gt;It was how to &lt;strong&gt;read a website from the outside&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When I see:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;200 document
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I don't immediately assume the site is static.&lt;/p&gt;

&lt;p&gt;When I see:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Server: cloudflare
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I don't assume everything is cached.&lt;/p&gt;

&lt;p&gt;When I don't see:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/api/products
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I don't assume there is no backend data fetching.&lt;/p&gt;

&lt;p&gt;When navigation feels instant, I don't assume there is no network activity.&lt;/p&gt;

&lt;p&gt;And when I see a fast page, I don't just ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What framework are they using?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Where is the work happening, when is it happening, and which layer is responsible for making it feel fast?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That question is much more powerful.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Bigger Lesson
&lt;/h1&gt;

&lt;p&gt;Modern web performance isn't one trick.&lt;/p&gt;

&lt;p&gt;It's a chain of decisions.&lt;/p&gt;

&lt;p&gt;Maybe the database query happens on the server.&lt;/p&gt;

&lt;p&gt;Maybe the page is statically generated.&lt;/p&gt;

&lt;p&gt;Maybe the browser prefetched the next route.&lt;/p&gt;

&lt;p&gt;Maybe Cloudflare delivered an asset from the edge.&lt;/p&gt;

&lt;p&gt;Maybe Brotli reduced transfer size.&lt;/p&gt;

&lt;p&gt;Maybe the hero image was prioritized.&lt;/p&gt;

&lt;p&gt;Maybe below-the-fold images were lazy-loaded.&lt;/p&gt;

&lt;p&gt;Maybe the browser reused previously fetched resources.&lt;/p&gt;

&lt;p&gt;Maybe several of those things happened together.&lt;/p&gt;

&lt;p&gt;That's why a site can look like it is doing "almost nothing" in the browser while actually doing a lot of work behind the scenes.&lt;/p&gt;

&lt;p&gt;And honestly, that's what made this investigation fun.&lt;/p&gt;

&lt;p&gt;I started by asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Where is the API request?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I ended by asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"What is the entire delivery architecture?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is a much better question to ask when building fast web applications.&lt;/p&gt;




&lt;h1&gt;
  
  
  What I'm Taking Into My Next.js Projects
&lt;/h1&gt;

&lt;p&gt;My current checklist is now roughly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;✓ Server-render public catalog pages where appropriate
✓ Keep database access on the server
✓ Use client components only where interaction needs them
✓ Prefetch useful navigation where appropriate
✓ Optimize images
✓ Lazy-load content below the fold
✓ Prioritize critical resources selectively
✓ Use Cloudflare for the right caching layer
✓ Never blindly cache personalized pages
✓ Validate prices/stock on the server
✓ Measure with DevTools instead of guessing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The biggest change isn't in my code.&lt;/p&gt;

&lt;p&gt;It's in how I think about performance.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Don't just look for requests. Look for the system behind the requests.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;This whole thing started with a very simple question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Why can't I find the API request?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But that question led me into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Server-side rendering&lt;/li&gt;
&lt;li&gt;Server Components&lt;/li&gt;
&lt;li&gt;Next.js App Router&lt;/li&gt;
&lt;li&gt;Prefetching&lt;/li&gt;
&lt;li&gt;Client-side navigation&lt;/li&gt;
&lt;li&gt;Cloudflare&lt;/li&gt;
&lt;li&gt;CDN caching&lt;/li&gt;
&lt;li&gt;Cache-Control&lt;/li&gt;
&lt;li&gt;Brotli compression&lt;/li&gt;
&lt;li&gt;Priority Hints&lt;/li&gt;
&lt;li&gt;Lazy loading&lt;/li&gt;
&lt;li&gt;Image optimization&lt;/li&gt;
&lt;li&gt;Static vs dynamic rendering&lt;/li&gt;
&lt;li&gt;Client-side cart architecture&lt;/li&gt;
&lt;li&gt;Server-side checkout validation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And that's exactly what I love about web development.&lt;/p&gt;

&lt;p&gt;Sometimes you open DevTools looking for one request...&lt;/p&gt;

&lt;p&gt;…and end up discovering an entire architecture.&lt;/p&gt;




&lt;h1&gt;
  
  
  Further Reading
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nextjs.org/docs" rel="noopener noreferrer"&gt;Next.js Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nextjs.org/learn/dashboard-app/static-and-dynamic-rendering" rel="noopener noreferrer"&gt;Next.js Static and Dynamic Rendering&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nextjs.org/learn/seo/images" rel="noopener noreferrer"&gt;Next.js Image Optimization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/cache/" rel="noopener noreferrer"&gt;Cloudflare Cache Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/cache/how-to/cache-rules/" rel="noopener noreferrer"&gt;Cloudflare Cache Rules&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Don't just look for the API request. Look for where the work is happening.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>webdev</category>
      <category>ecommerce</category>
      <category>cloudflare</category>
      <category>performance</category>
    </item>
    <item>
      <title>Passion Garage — Where Passion Meets Performance</title>
      <dc:creator>Muhammad Rabbi</dc:creator>
      <pubDate>Mon, 13 Jul 2026 00:51:41 +0000</pubDate>
      <link>https://dev.to/muhammad_rabbi_dev/passion-garage-where-passion-meets-performance-3dao</link>
      <guid>https://dev.to/muhammad_rabbi_dev/passion-garage-where-passion-meets-performance-3dao</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/weekend-2026-07-09"&gt;Weekend Challenge: Passion Edition&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update (Post-Deadline)&lt;/strong&gt;: I noticed a critical bug right at submission and pushed a quick fix after the deadline cutoff. The core features and functionality of the project were completed and submitted on time.&lt;/p&gt;

&lt;h1&gt;
  
  
  Passion Garage — A Cinematic Automotive Experience Powered by Google Gemini
&lt;/h1&gt;

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

&lt;p&gt;For this challenge, I wanted to explore &lt;strong&gt;passion through the world of automotive engineering&lt;/strong&gt;. To millions of enthusiasts, cars are more than transportation—they represent innovation, performance, craftsmanship, and emotion.&lt;/p&gt;

&lt;p&gt;To capture that feeling, I built &lt;strong&gt;Passion Garage&lt;/strong&gt;, a cinematic web experience inspired by legendary performance cars. Instead of a traditional landing page, the website takes users on a scroll-driven journey featuring immersive GSAP animations, storytelling, and an AI-powered automotive assistant.&lt;/p&gt;

&lt;p&gt;The experience includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cinematic scroll storytelling&lt;/li&gt;
&lt;li&gt;Featured performance cars&lt;/li&gt;
&lt;li&gt;BMW Story chapter&lt;/li&gt;
&lt;li&gt;AI Garage powered by Google Gemini&lt;/li&gt;
&lt;li&gt;Smooth GSAP animations&lt;/li&gt;
&lt;li&gt;Fully responsive modern UI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The AI Garage acts as an automotive expert, helping users compare cars, understand engine technologies, learn about performance specifications, and receive personalized recommendations.&lt;/p&gt;

&lt;p&gt;My goal was to create something that feels less like a website and more like an interactive automotive experience.&lt;/p&gt;




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

&lt;p&gt;🌐 &lt;strong&gt;Live Website&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://passion-garage-ai.vercel.app/" rel="noopener noreferrer"&gt;https://passion-garage-ai.vercel.app/&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Screenshorts&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd1vwrek1m3mnr8y6fm65.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd1vwrek1m3mnr8y6fm65.png" alt=" " width="800" height="450"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8qos3bwa4bn93viasz8j.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8qos3bwa4bn93viasz8j.png" alt=" " width="800" height="450"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fesoem9o08wbue45og8x4.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fesoem9o08wbue45og8x4.png" alt=" " width="800" height="450"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2bxtahmu2nawrcaxv28y.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2bxtahmu2nawrcaxv28y.png" alt=" " width="800" height="450"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feq2l4cbhkv26y8tkzwx8.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feq2l4cbhkv26y8tkzwx8.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub Repository&lt;/strong&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/rafiqwe" rel="noopener noreferrer"&gt;
        rafiqwe
      &lt;/a&gt; / &lt;a href="https://github.com/rafiqwe/passion-garage-ai" rel="noopener noreferrer"&gt;
        passion-garage-ai
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🚗 Passion Garage&lt;/h1&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A cinematic automotive experience powered by Google Gemini AI.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Passion Garage is an immersive web experience built for the &lt;strong&gt;DEV Weekend Challenge: Passion Edition&lt;/strong&gt;. Inspired by the passion behind legendary performance cars, the project combines cinematic storytelling, smooth GSAP animations, and an AI-powered automotive assistant to create a unique journey for car enthusiasts.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/rafiqwe/passion-garage-ai/./public/og-image.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Frafiqwe%2Fpassion-garage-ai%2FHEAD%2F.%2Fpublic%2Fog-image.png" alt="Passion Garage Banner"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Features&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;🎬 Cinematic scroll-driven storytelling&lt;/li&gt;
&lt;li&gt;🚘 Featured performance cars&lt;/li&gt;
&lt;li&gt;📖 BMW Story experience&lt;/li&gt;
&lt;li&gt;🤖 AI Garage powered by Google Gemini&lt;/li&gt;
&lt;li&gt;⚡ GSAP &amp;amp; ScrollTrigger animations&lt;/li&gt;
&lt;li&gt;📱 Fully responsive design&lt;/li&gt;
&lt;li&gt;🌙 Modern dark UI inspired by premium automotive brands&lt;/li&gt;
&lt;li&gt;🚀 Built with the latest Next.js App Router&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🤖 AI Garage&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;AI Garage is an intelligent automotive assistant built using &lt;strong&gt;Google Gemini&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Users can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Compare performance cars&lt;/li&gt;
&lt;li&gt;Learn about engines and horsepower&lt;/li&gt;
&lt;li&gt;Get buying recommendations&lt;/li&gt;
&lt;li&gt;Explore automotive technologies&lt;/li&gt;
&lt;li&gt;Ask questions about BMW, Porsche, Ferrari, Nissan, Audi, Toyota, Mercedes-Benz, Lamborghini, McLaren, and more&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🛠&lt;/h2&gt;…&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/rafiqwe/passion-garage-ai" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;





&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;The project was built using &lt;strong&gt;Next.js App Router&lt;/strong&gt;, &lt;strong&gt;TypeScript&lt;/strong&gt;, and &lt;strong&gt;Tailwind CSS&lt;/strong&gt; for a fast and modern development experience.&lt;/p&gt;

&lt;p&gt;The most exciting part was creating the cinematic scroll experience using &lt;strong&gt;GSAP&lt;/strong&gt; and &lt;strong&gt;ScrollTrigger&lt;/strong&gt;. Instead of relying on static sections, each chapter reveals itself through carefully timed animations to create a story-driven experience.&lt;/p&gt;

&lt;p&gt;To qualify for the &lt;strong&gt;Best Use of Google AI&lt;/strong&gt; category, I integrated &lt;strong&gt;Google Gemini&lt;/strong&gt; into the AI Garage section. Rather than building a generic chatbot, I designed an automotive assistant that specializes in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Comparing performance cars&lt;/li&gt;
&lt;li&gt;Explaining engine technologies&lt;/li&gt;
&lt;li&gt;Recommending vehicles based on user needs&lt;/li&gt;
&lt;li&gt;Answering automotive questions&lt;/li&gt;
&lt;li&gt;Providing structured, easy-to-read information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The frontend communicates with a Next.js API route, which securely interacts with the Gemini API to generate intelligent automotive responses.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tech Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;li&gt;GSAP + ScrollTrigger&lt;/li&gt;
&lt;li&gt;Google Gemini API&lt;/li&gt;
&lt;li&gt;Vercel&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best Use of Google AI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Google Gemini powers the AI Garage, transforming it into an intelligent automotive assistant capable of providing comparisons, recommendations, and educational content about performance vehicles. The AI is integrated as a core feature of the experience rather than an optional add-on.&lt;/p&gt;




&lt;p&gt;Thank you for checking out my submission! &lt;/p&gt;

&lt;p&gt;I'd love to hear your feedback and suggestions for improving Passion Garage.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>muhammadrabbi</category>
      <category>webdev</category>
    </item>
    <item>
      <title>AI Can Build Applications, But Can It Debug Them?</title>
      <dc:creator>Muhammad Rabbi</dc:creator>
      <pubDate>Sun, 31 May 2026 17:00:17 +0000</pubDate>
      <link>https://dev.to/muhammad_rabbi_dev/ai-can-build-applications-but-can-it-debug-them-2l86</link>
      <guid>https://dev.to/muhammad_rabbi_dev/ai-can-build-applications-but-can-it-debug-them-2l86</guid>
      <description>&lt;p&gt;AI Can Build Applications, But Can It Debug Them?&lt;/p&gt;

&lt;p&gt;We're living in an interesting era.&lt;/p&gt;

&lt;p&gt;Today, someone with little to no programming experience can open an AI tool, describe an idea, and generate a working application within minutes. What once required weeks of learning and development can now be done through a conversation.&lt;/p&gt;

&lt;p&gt;It's impressive.&lt;/p&gt;

&lt;p&gt;But there's a difference between generating an application and understanding how it works.&lt;/p&gt;

&lt;p&gt;A Real Experience&lt;/p&gt;

&lt;p&gt;Yesterday, one of my friends told me he was building an automation tool using Claude.&lt;/p&gt;

&lt;p&gt;At first, everything seemed to be going well. The AI generated the code, the application launched, and most of the features appeared to work.&lt;/p&gt;

&lt;p&gt;Then a problem appeared.&lt;/p&gt;

&lt;p&gt;The automation started making unexpected clicks and performing actions that weren't intended. Naturally, he asked Claude to fix the issue.&lt;/p&gt;

&lt;p&gt;The problem was that he only provided screenshots of the behavior. There were no logs, no debugging information, no code explanations, and no additional context.&lt;/p&gt;

&lt;p&gt;Without enough information, Claude started making assumptions about the root cause. It suggested multiple fixes, but none of them solved the actual issue.&lt;/p&gt;

&lt;p&gt;In other words, it began hallucinating.&lt;/p&gt;

&lt;p&gt;After spending hours going back and forth with AI-generated suggestions, he eventually asked me for help.&lt;/p&gt;

&lt;p&gt;The Four-Hour Debugging Session&lt;/p&gt;

&lt;p&gt;What looked like a simple issue turned into nearly four hours of debugging.&lt;/p&gt;

&lt;p&gt;We inspected the automation flow, reviewed the code, traced event handlers, checked selectors, and analyzed how the application interacted with the target website.&lt;/p&gt;

&lt;p&gt;Eventually, we identified the actual causes behind the unexpected behavior and fixed them one by one.&lt;/p&gt;

&lt;p&gt;The automation tool finally worked as intended.&lt;/p&gt;

&lt;p&gt;The interesting part wasn't the bug itself.&lt;/p&gt;

&lt;p&gt;The interesting part was realizing that the biggest challenge wasn't generating the code—it was understanding it.&lt;/p&gt;

&lt;p&gt;The Missing Piece&lt;/p&gt;

&lt;p&gt;AI is excellent at accelerating development.&lt;/p&gt;

&lt;p&gt;It can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generate boilerplate code&lt;/li&gt;
&lt;li&gt;Create UI components&lt;/li&gt;
&lt;li&gt;Write API integrations&lt;/li&gt;
&lt;li&gt;Suggest solutions&lt;/li&gt;
&lt;li&gt;Explain concepts&lt;/li&gt;
&lt;li&gt;Speed up development workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But when something breaks, AI isn't always enough.&lt;/p&gt;

&lt;p&gt;Debugging requires:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understanding program flow&lt;/li&gt;
&lt;li&gt;Reading logs&lt;/li&gt;
&lt;li&gt;Analyzing errors&lt;/li&gt;
&lt;li&gt;Identifying root causes&lt;/li&gt;
&lt;li&gt;Testing assumptions&lt;/li&gt;
&lt;li&gt;Knowing how different parts of a system interact&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These skills come from learning software development fundamentals.&lt;/p&gt;

&lt;p&gt;AI Is a Multiplier, Not a Replacement&lt;/p&gt;

&lt;p&gt;Many people treat AI as a replacement for programming knowledge.&lt;/p&gt;

&lt;p&gt;In reality, AI works best as a multiplier.&lt;/p&gt;

&lt;p&gt;A developer with strong fundamentals can use AI to become significantly more productive.&lt;/p&gt;

&lt;p&gt;Someone without those fundamentals may still build something impressive, but when problems appear, they often struggle to identify what's actually wrong.&lt;/p&gt;

&lt;p&gt;The more complex the application becomes, the more important those fundamentals become.&lt;/p&gt;

&lt;p&gt;Final Thoughts&lt;/p&gt;

&lt;p&gt;AI has changed software development forever.&lt;/p&gt;

&lt;p&gt;It has lowered barriers, accelerated learning, and made building applications more accessible than ever before.&lt;/p&gt;

&lt;p&gt;But software engineering is more than generating code.&lt;/p&gt;

&lt;p&gt;Understanding systems, debugging problems, and making informed technical decisions remain essential skills.&lt;/p&gt;

&lt;p&gt;AI can write code for you.&lt;/p&gt;

&lt;p&gt;But when the application behaves unexpectedly, understanding why it happened is still a human responsibility.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>beginners</category>
      <category>programming</category>
      <category>testing</category>
    </item>
    <item>
      <title>I Built My Portfolio to Look Like VS Code 👨‍💻</title>
      <dc:creator>Muhammad Rabbi</dc:creator>
      <pubDate>Sat, 07 Mar 2026 15:23:03 +0000</pubDate>
      <link>https://dev.to/muhammad_rabbi_dev/i-built-my-portfolio-to-look-like-vs-code-4f59</link>
      <guid>https://dev.to/muhammad_rabbi_dev/i-built-my-portfolio-to-look-like-vs-code-4f59</guid>
      <description>&lt;p&gt;Link: &lt;a href="https://muhammadrabbidev.vercel.app" rel="noopener noreferrer"&gt;Portfolio&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most developer portfolios follow the same pattern:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A hero section&lt;/li&gt;
&lt;li&gt;Some project cards&lt;/li&gt;
&lt;li&gt;A contact form&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Clean? Yes.&lt;br&gt;
Memorable? Not always.&lt;/p&gt;

&lt;p&gt;So I decided to try something different.&lt;/p&gt;

&lt;p&gt;I built my portfolio to &lt;strong&gt;look and feel like VS Code.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Why a VS Code Style Portfolio?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As developers, we spend most of our time inside Visual Studio Code.&lt;/p&gt;

&lt;p&gt;It’s the place where ideas turn into code.&lt;/p&gt;

&lt;p&gt;So I thought:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Why not make my portfolio feel like a developer's natural environment?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead of a traditional website layout, the portfolio mimics the VS Code interface, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;File explorer navigation&lt;/li&gt;
&lt;li&gt;Code-style content sections&lt;/li&gt;
&lt;li&gt;Developer-focused UI interactions&lt;/li&gt;
&lt;li&gt;A familiar coding environment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was to create something that feels natural for developers visiting the site.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I Focused On&lt;/strong&gt;&lt;br&gt;
While building it, I tried to focus on three things:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Developer Experience&lt;/strong&gt;&lt;br&gt;
The interface should feel like a real coding environment, not just a visual copy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Clean UI&lt;/strong&gt;&lt;br&gt;
Even though it mimics an editor, it still needs to be &lt;strong&gt;clear, readable, and responsive.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Personality **&lt;br&gt;
Your portfolio should show **how you think as a developer&lt;/strong&gt;, not just what tools you use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I Learned&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Building this portfolio taught me a few things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UI inspiration can come from tools developers already use&lt;/li&gt;
&lt;li&gt;Small interactions make a big difference&lt;/li&gt;
&lt;li&gt;Portfolios are a great place to experiment with ideas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Final Thought&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your portfolio doesn’t have to follow the same template as everyone else.&lt;/p&gt;

&lt;p&gt;Sometimes, trying something different makes it more memorable.&lt;/p&gt;

&lt;p&gt;If you're a developer, what kind of portfolio style do you prefer?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Minimal landing page&lt;/li&gt;
&lt;li&gt;Interactive experience&lt;/li&gt;
&lt;li&gt;Something creative like a dev environment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Curious to hear your thoughts 👇&lt;/p&gt;

</description>
      <category>muhammadrabbi</category>
      <category>muhammadrabbidev</category>
      <category>portfolio</category>
      <category>vscode</category>
    </item>
    <item>
      <title>AuthKit Pro – Simplifying NextAuth Setup in Next.js</title>
      <dc:creator>Muhammad Rabbi</dc:creator>
      <pubDate>Sat, 14 Feb 2026 16:40:47 +0000</pubDate>
      <link>https://dev.to/muhammad_rabbi_dev/authkit-pro-simplifying-nextauth-setup-in-nextjs-2ji7</link>
      <guid>https://dev.to/muhammad_rabbi_dev/authkit-pro-simplifying-nextauth-setup-in-nextjs-2ji7</guid>
      <description>&lt;p&gt;Setting up authentication in a Next.js project is powerful — but let’s be honest…&lt;/p&gt;

&lt;p&gt;It’s repetitive.&lt;/p&gt;

&lt;p&gt;Every time we start a new project with NextAuth, we end up writing the same boilerplate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provider configuration&lt;/li&gt;
&lt;li&gt;Auth config setup&lt;/li&gt;
&lt;li&gt;Environment variables&lt;/li&gt;
&lt;li&gt;Basic file structure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After doing this multiple times, I thought:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Why not automate the boring part?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So I built &lt;strong&gt;authkit-pro&lt;/strong&gt; — a CLI tool that initializes basic NextAuth setup instantly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✨ What is authkit-pro?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;authkit-pro&lt;/strong&gt; is a simple CLI tool designed to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1. Reduce authentication boilerplate&lt;/li&gt;
&lt;li&gt;2. Speed up project setup&lt;/li&gt;
&lt;li&gt;3. Let developers focus on core features&lt;/li&gt;
&lt;li&gt;4. Provide a clean starting structure
Instead of manually configuring everything, you just run one command.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;⚡ How to Use&lt;/strong&gt;&lt;br&gt;
Simply run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx authkit-pro init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s it.&lt;/p&gt;

&lt;p&gt;It scaffolds the basic authentication setup so you can move faster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🎯 Why I Built This&lt;/strong&gt;&lt;br&gt;
As a developer, I love optimizing workflows.&lt;/p&gt;

&lt;p&gt;When you repeatedly write the same setup code, it slows down creativity. I wanted something that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Saves time&lt;/li&gt;
&lt;li&gt;Keeps projects consistent&lt;/li&gt;
&lt;li&gt;Makes starting new apps easier&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So this is my small contribution to improving the developer experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🛠 Current Status&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The project is still evolving.&lt;br&gt;
I’m actively improving it and planning to add more features.&lt;/p&gt;

&lt;p&gt;If you try it, I would genuinely appreciate your feedback.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💬 Feedback &amp;amp; Contribution&lt;/strong&gt;&lt;br&gt;
If you’re working with Next.js and authentication:&lt;/p&gt;

&lt;p&gt;Give it a try → &lt;code&gt;npx authkit-pro init&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Let me know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What should be improved?&lt;/li&gt;
&lt;li&gt;What features would you like to see next?&lt;/li&gt;
&lt;li&gt;Any bugs or suggestions?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s build better developer tools together 🚀&lt;/p&gt;

</description>
      <category>authkitpro</category>
      <category>authjs</category>
      <category>nextjs</category>
      <category>cli</category>
    </item>
    <item>
      <title>I Tried Vibe Coding for the First Time Using Warp — Here’s What I Learned</title>
      <dc:creator>Muhammad Rabbi</dc:creator>
      <pubDate>Sat, 24 Jan 2026 13:48:13 +0000</pubDate>
      <link>https://dev.to/muhammad_rabbi_dev/i-tried-vibe-coding-for-the-first-time-using-warp-heres-what-i-learned-4o72</link>
      <guid>https://dev.to/muhammad_rabbi_dev/i-tried-vibe-coding-for-the-first-time-using-warp-heres-what-i-learned-4o72</guid>
      <description>&lt;p&gt;Today, I experimented with &lt;strong&gt;vibe&lt;/strong&gt; coding for the first time using Warp, and honestly… it felt wild.&lt;/p&gt;

&lt;p&gt;I didn’t write a single line of code manually.&lt;/p&gt;

&lt;p&gt;Instead, I just described:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what I wanted to build&lt;/li&gt;
&lt;li&gt;what should happen next&lt;/li&gt;
&lt;li&gt;And Warp generated the code for me.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For quick prototyping, this felt incredibly fast and smooth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Good Part&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Warp did a solid job with:&lt;/li&gt;
&lt;li&gt;Generating project structure&lt;/li&gt;
&lt;li&gt;Writing boilerplate code&lt;/li&gt;
&lt;li&gt;Moving ideas forward quickly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For early-stage development, this can save a lot of time and mental energy.&lt;br&gt;
If your goal is to test an idea fast, vibe coding definitely helps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Reality Check&lt;/strong&gt; &lt;br&gt;
Once I reviewed the generated code properly, I noticed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multiple bugs&lt;/li&gt;
&lt;li&gt;Logical issues&lt;/li&gt;
&lt;li&gt;Edge cases not handled well&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The code worked, but it wasn’t production-ready.&lt;/p&gt;

&lt;p&gt;This is where developer experience still matters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Debugging&lt;/li&gt;
&lt;li&gt;Refactoring&lt;/li&gt;
&lt;li&gt;Understanding what the code is actually doing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI can write code, but it doesn’t fully understand context, intent, or &lt;strong&gt;long-term maintainability&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Current Status of the Project&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The site is still under development.&lt;/p&gt;

&lt;p&gt;I’m actively:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixing bugs&lt;/li&gt;
&lt;li&gt;Improving logic&lt;/li&gt;
&lt;li&gt;Cleaning up the codebase&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once everything is stable, I’ll share:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What the site does&lt;/li&gt;
&lt;li&gt;How it was built&lt;/li&gt;
&lt;li&gt;What worked well with vibe coding (and what didn’t)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Key Takeaway&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AI-assisted coding is a powerful accelerator, not a replacement for fundamentals.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Tools like Warp are great for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rapid experimentation&lt;/li&gt;
&lt;li&gt;Reducing repetitive work&lt;/li&gt;
&lt;li&gt;Exploring ideas faster&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But understanding the code and taking responsibility for quality is still on us as developers.&lt;/p&gt;

&lt;p&gt;If you’ve tried vibe coding or AI-first workflows, I’d love to hear your experience 👇&lt;/p&gt;

&lt;p&gt;What worked for you, and what didn’t?&lt;/p&gt;

&lt;p&gt;Happy building 🚀&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%2F98rmk7p46kpacp2lqqho.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%2F98rmk7p46kpacp2lqqho.png" alt=" " width="800" height="449"&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%2F87tr98xk9nv4fncjm149.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%2F87tr98xk9nv4fncjm149.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>muhammadrabbi</category>
      <category>devguide</category>
      <category>programmers</category>
    </item>
    <item>
      <title>React Design Patterns Every Frontend &amp; FullStack Developer Should Know</title>
      <dc:creator>Muhammad Rabbi</dc:creator>
      <pubDate>Fri, 09 Jan 2026 15:53:32 +0000</pubDate>
      <link>https://dev.to/muhammad_rabbi_dev/react-design-patterns-every-frontend-fullstack-developer-should-know-2ng0</link>
      <guid>https://dev.to/muhammad_rabbi_dev/react-design-patterns-every-frontend-fullstack-developer-should-know-2ng0</guid>
      <description>&lt;p&gt;If you’re building modern web applications, React design patterns can completely change how you think about components, reusability, and scalability.&lt;/p&gt;

&lt;p&gt;A month ago, I realized something important &lt;br&gt;
I was using React every day, but I wasn’t truly thinking in patterns.&lt;/p&gt;

&lt;p&gt;That’s when I discovered an amazing playlist by &lt;a class="mentioned-user" href="https://dev.to/atapas"&gt;@atapas&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why React Design Patterns Matter&lt;/strong&gt;&lt;br&gt;
React design patterns help you:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Write cleaner and more maintainable code&lt;/li&gt;
&lt;li&gt;Avoid prop drilling &amp;amp; unnecessary re-renders&lt;/li&gt;
&lt;li&gt;Scale applications without pain&lt;/li&gt;
&lt;li&gt;Think like a senior engineer, not just a coder&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Patterns are not about complexity —&lt;/p&gt;

&lt;p&gt;they’re about clarity and intention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What You’ll Learn From This Playlist&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This playlist breaks down patterns in a practical and beginner-friendly way, including:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Container &amp;amp; Presentational Components&lt;/li&gt;
&lt;li&gt;Compound Components&lt;/li&gt;
&lt;li&gt;Render Props&lt;/li&gt;
&lt;li&gt;Custom Hooks pattern&lt;/li&gt;
&lt;li&gt;Controlled vs Uncontrolled Components&lt;/li&gt;
&lt;li&gt;Reusability &amp;amp; separation of concerns&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each concept is explained with real-world use cases, not just theory.&lt;/p&gt;

&lt;p&gt;Where to Watch 📺&lt;br&gt;
You can find the playlist on:&lt;br&gt;
Devguide : &lt;a href="https://devguide-dev.vercel.app/playlist/PLIJrr73KDmRyQVT__uFZvaVfWPdfyMFHC" rel="noopener noreferrer"&gt;https://devguide-dev.vercel.app/playlist/PLIJrr73KDmRyQVT__uFZvaVfWPdfyMFHC&lt;/a&gt; ,&lt;br&gt;
&lt;a href="https://www.youtube.com/playlist?list=PLIJrr73KDmRyQVT__uFZvaVfWPdfyMFHC" rel="noopener noreferrer"&gt;YouTube&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%2Fzvbyyrep0ufr1cr0o87q.webp" 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%2Fzvbyyrep0ufr1cr0o87q.webp" alt=" " width="800" height="458"&gt;&lt;/a&gt;&lt;br&gt;
*&lt;em&gt;A Small but Meaningful Moment *&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I shared this playlist recently, and Tapas Adhikary himself commented:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Thank you for sharing and the shoutout. The Devguide looks awesome. 🙌”&lt;br&gt;
That meant a lot to me — and it motivated me to share this with more developers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Whether you’re a frontend developer, backend developer, or moving toward full-stack, understanding React design patterns will level you up.&lt;/p&gt;

&lt;p&gt;Don’t just write React.&lt;br&gt;
Design with React.&lt;/p&gt;

&lt;p&gt;If you’ve already explored these patterns, I’d love to know:&lt;br&gt;
  Which React pattern helped you the most?&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Happy coding *&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  coding #devguide #fullstack #frontend #developer
&lt;/h1&gt;

</description>
      <category>architecture</category>
      <category>frontend</category>
      <category>javascript</category>
      <category>react</category>
    </item>
    <item>
      <title>A few days ago, I was scrolling through YouTube playlists, thinking..</title>
      <dc:creator>Muhammad Rabbi</dc:creator>
      <pubDate>Mon, 08 Sep 2025 04:48:40 +0000</pubDate>
      <link>https://dev.to/muhammad_rabbi_dev/a-few-days-ago-i-was-scrolling-through-youtube-playlists-thinking-6kh</link>
      <guid>https://dev.to/muhammad_rabbi_dev/a-few-days-ago-i-was-scrolling-through-youtube-playlists-thinking-6kh</guid>
      <description>&lt;p&gt;One moment I’m watching a React tutorial… next moment I’m deep into cat videos 🐱😂&lt;/p&gt;

&lt;p&gt;That’s when I realized — if DevGuide is about structured learning, then I needed a way to bring that same experience to playlists.&lt;/p&gt;

&lt;p&gt;👉 So I built the Playlist Page.&lt;br&gt;
Instead of random chaos, every playlist here is:&lt;br&gt;
 ✨ Developer-focused&lt;br&gt;
 ✨ Structured for learning (not distractions)&lt;br&gt;
 ✨ Easy to browse, just like YouTube but with only dev content&lt;/p&gt;

&lt;p&gt;It wasn’t easy.&lt;br&gt;
I had to set up API calls, handle filter logic, deal with loading skeletons, and even fight with layout issues until it felt clean and smooth.&lt;/p&gt;

&lt;p&gt;But in the end, the Playlist Page turned into something I’m proud of — a place where developers can binge-watch without losing focus. 🚀&lt;/p&gt;

&lt;p&gt;🔗 Try it here: &lt;a href="https://devguide-dev.vercel.app/playlists" rel="noopener noreferrer"&gt;https://devguide-dev.vercel.app/playlists&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%2Fg4l157awzvm8qm25kljk.webp" 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%2Fg4l157awzvm8qm25kljk.webp" alt=" " width="800" height="619"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Question for you:&lt;br&gt;
 👉 If you could design your dream developer playlist, what topics would be in it?&lt;/p&gt;

&lt;h1&gt;
  
  
  WebDevelopment #Frontend #LearningJourney #DevGuide #day100 #devguide #devguide
&lt;/h1&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>opensource</category>
      <category>devguide</category>
    </item>
  </channel>
</rss>
