<?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: Timi</title>
    <description>The latest articles on DEV Community by Timi (@timhilehin1).</description>
    <link>https://dev.to/timhilehin1</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%2F1291324%2F3954be9d-2c74-4160-9525-10bdd9a61a09.jpeg</url>
      <title>DEV Community: Timi</title>
      <link>https://dev.to/timhilehin1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/timhilehin1"/>
    <language>en</language>
    <item>
      <title>I finally completed my side project</title>
      <dc:creator>Timi</dc:creator>
      <pubDate>Wed, 21 Oct 2026 14:27:59 +0000</pubDate>
      <link>https://dev.to/timhilehin1/-4l3o</link>
      <guid>https://dev.to/timhilehin1/-4l3o</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/timhilehin1/building-a-backend-for-my-old-furniture-store-1295" class="crayons-story__hidden-navigation-link"&gt;Building a Backend for My Old Furniture Store&lt;/a&gt;


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

          &lt;a href="/timhilehin1" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1291324%2F3954be9d-2c74-4160-9525-10bdd9a61a09.jpeg" alt="timhilehin1 profile" class="crayons-avatar__image" width="800" height="1000"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/timhilehin1" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Timi
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Timi
                
                
              
              &lt;div id="story-author-preview-content-4878251" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/timhilehin1" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1291324%2F3954be9d-2c74-4160-9525-10bdd9a61a09.jpeg" class="crayons-avatar__image" alt="" width="800" height="1000"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Timi&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/timhilehin1/building-a-backend-for-my-old-furniture-store-1295" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Oct 21&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/timhilehin1/building-a-backend-for-my-old-furniture-store-1295" id="article-link-4878251"&gt;
          Building a Backend for My Old Furniture Store
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/backend"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;backend&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/nestjs"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;nestjs&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/postgres"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;postgres&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/sideprojects"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;sideprojects&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/timhilehin1/building-a-backend-for-my-old-furniture-store-1295" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt;&amp;nbsp;reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/timhilehin1/building-a-backend-for-my-old-furniture-store-1295#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

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

&lt;/div&gt;


</description>
      <category>backend</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Building a Backend for My Old Furniture Store</title>
      <dc:creator>Timi</dc:creator>
      <pubDate>Wed, 21 Oct 2026 14:27:45 +0000</pubDate>
      <link>https://dev.to/timhilehin1/building-a-backend-for-my-old-furniture-store-1295</link>
      <guid>https://dev.to/timhilehin1/building-a-backend-for-my-old-furniture-store-1295</guid>
      <description>&lt;p&gt;A few years ago, I started a side project: a storefront that lists furniture for prospective customers. It was my first time understanding how a CMS works under the hood, so I decided to learn Sanity with it. I remember trying to understand GROQ queries and how all of it worked. I got there, and I built the storefront.&lt;/p&gt;

&lt;p&gt;Then years went by.&lt;/p&gt;

&lt;p&gt;Recently I decided to understand how the backend part of applications works. This was another friction moment. As a frontend engineer, I was used to consuming backend APIs, but I didn't really understand how they worked. So I went back to the furniture store and built a backend for it with NestJS and Postgres. Lo and behold, I found my way around.&lt;/p&gt;

&lt;p&gt;This post walks through what I built, flow by flow: auth, cart, orders, and payments.&lt;/p&gt;

&lt;h2&gt;
  
  
  The mental model that helped
&lt;/h2&gt;

&lt;p&gt;One mental model made everything click: build the logic from services up to controllers.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Services&lt;/strong&gt; hold the core logic: creating a user, adding to a cart, placing an order.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Controllers&lt;/strong&gt; set up the routes for those services. These are what I always saw as endpoints from the frontend side.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So when my frontend calls &lt;code&gt;POST /auth/register&lt;/code&gt;, a controller receives the request and hands it to a service, which does the actual work. For years I only saw the endpoint. Now I know what sits behind it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The new terms
&lt;/h2&gt;

&lt;p&gt;Around services and controllers, NestJS has a few more pieces I had to learn.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Modules&lt;/strong&gt; group everything for one feature: the auth module holds auth's controller, service, and guards.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Imports&lt;/strong&gt; bring in other modules a module depends on. My auth module imports the users module and the JWT config module, because auth needs both.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exports&lt;/strong&gt; make parts of a module available to other modules. I export the auth guards so other modules, like cart and orders, can protect their routes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Providers&lt;/strong&gt; are the classes NestJS creates and manages for you, like services.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Constructors&lt;/strong&gt; are where a class asks for the providers it needs. NestJS sees what a service asks for in its constructor and passes it in. This is called dependency injection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guards&lt;/strong&gt; run before a request reaches the controller and decide whether it's allowed through. My auth guard blocks any request without a valid token.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Auth: creating an account and logging in
&lt;/h2&gt;

&lt;p&gt;The core logic lives in the auth folder.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Registration.&lt;/strong&gt; I collect basic information about the user. The password is never stored as the user typed it. It's hashed, which is one-way: there's no key that turns a hash back into the password. Even if someone got access to the database, they couldn't read the passwords.&lt;/p&gt;

&lt;p&gt;The way it clicked for me: hashing is like a blender. You can't un-blend the result, but the same ingredients always produce the same mush.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Login.&lt;/strong&gt; Nothing gets decrypted. The backend hashes the password the user just typed, the same way it was hashed at registration, and compares the result to the stored hash. If they match, the password is correct.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tokens.&lt;/strong&gt; After login, the user gets an access token. It contains the user's ID and is signed with the server's secret key, so the backend can tell that it issued the token and nobody changed it. Access tokens are short-lived, so I also use refresh tokens. These are long-lived and let users stay logged in without signing in again every time the access token expires.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cart
&lt;/h2&gt;

&lt;p&gt;The cart module is where a user goes through the store listing and saves items. Users can add available items to their cart, edit a cart item, and delete it.&lt;/p&gt;

&lt;p&gt;There's no product table in my database. Products still live in Sanity, so the backend fetches them from Sanity before building a cart. Postgres holds the cart, orders, and inventory; Sanity holds the catalog.&lt;/p&gt;

&lt;p&gt;When adding to the cart: if the item is already there, update it. If it isn't, create it.&lt;/p&gt;

&lt;p&gt;Prices also come from Sanity on the backend. Before an order is created, the backend computes the cart items and their total. The frontend never sends a price, so nobody can change it before paying.&lt;/p&gt;

&lt;h2&gt;
  
  
  Orders and reservations
&lt;/h2&gt;

&lt;p&gt;The goal here: no two customers can pay for the same item, even under high traffic.&lt;/p&gt;

&lt;p&gt;When a customer places an order, the backend reserves the items in the database. The reservation is kept for 15 minutes. If the user doesn't complete payment in that time, the order expires, a background job releases the reservation, and the items become available again.&lt;/p&gt;

&lt;p&gt;The tricky part is the reservation itself. If I checked stock first and reserved it after, there'd be a gap where two users both see "1 left" and both reserve it. So I do both in one statement:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;reservedRows&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;tx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;$executeRaw&lt;/span&gt;&lt;span class="s2"&gt;`
  UPDATE "Inventory"
  SET reserved = reserved + &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;quantity&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;
  WHERE "productId" = &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;productId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;
  AND quantity - reserved - sold &amp;gt;= &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;quantity&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;
`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;reservedRows&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;BadRequestException&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;productName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; is out of stock`&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 &lt;code&gt;UPDATE&lt;/code&gt; only succeeds if enough stock remains. When two requests hit the same row at the same moment, Postgres makes the second one wait. It then re-checks the condition against the updated row. If the first request took the last item, zero rows are updated and the second user gets "out of stock."&lt;/p&gt;

&lt;p&gt;Available stock is &lt;code&gt;quantity - reserved - sold&lt;/code&gt;. Reserving doesn't reduce &lt;code&gt;quantity&lt;/code&gt;; it increases &lt;code&gt;reserved&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;All of this runs inside a database transaction, along with creating the order and its order items. Either everything succeeds or nothing does. If a cart has three items and the third is out of stock, the reservations for the first two are rolled back too.&lt;/p&gt;

&lt;p&gt;The order also stores its total and each item's price at the moment it's created. If a price changes in Sanity later, it doesn't affect an order that's already being paid.&lt;/p&gt;

&lt;h2&gt;
  
  
  Payments with Paystack
&lt;/h2&gt;

&lt;p&gt;Once an order is created, the user pays through Paystack's widget. Paystack is in test mode for this project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Starting a payment.&lt;/strong&gt; The request first goes through my auth guard. The backend then calls Paystack with my Paystack secret key as a Bearer token in the authorization header. That key only ever lives on the backend. One gotcha: Paystack takes amounts in kobo, not naira, so the total has to be multiplied by 100.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The webhook.&lt;/strong&gt; This was the flip for me as a frontend engineer. Normally I call the API. With a webhook, Paystack calls my backend to tell me the payment's status.&lt;/p&gt;

&lt;p&gt;The webhook doesn't use my auth guard, because Paystack can't log in as a user. Instead, Paystack signs each webhook with my secret key and sends the signature in the &lt;code&gt;x-paystack-signature&lt;/code&gt; header. My backend recomputes the signature and compares. If it doesn't match, the request is rejected, so nobody can fake a successful payment.&lt;/p&gt;

&lt;p&gt;Paystack sends back the transaction reference, which is the order ID I sent when initializing the payment. What happens next depends on the order's status:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pending:&lt;/strong&gt; process the payment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Already paid, processing, shipped, or delivered:&lt;/strong&gt; treat it as a duplicate webhook and ignore it. Paystack can send the same webhook more than once, and this makes sure an order is never processed twice. This is called idempotency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cancelled, expired, failed, or refunded, or the amount doesn't match the order total:&lt;/strong&gt; log the payment, but don't touch the inventory, because the customer hasn't received value for this transaction.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a customer actually paid for an expired order, their money was taken, so the payment is flagged for a refund. For now, refunds are done manually.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Updating the order.&lt;/strong&gt; For a valid payment, all the updates run in one database transaction, so either everything succeeds or nothing does. The order status changes to paid, the reservation is released, the sold count goes up, the cart items are deleted, and a successful payment row is created.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it stands
&lt;/h2&gt;

&lt;p&gt;The backend runs locally, with Paystack in test mode. Next, I'm connecting the furniture storefront to these APIs, then deploying it. After that, I want to add AI features to the store.&lt;/p&gt;

</description>
      <category>backend</category>
      <category>nestjs</category>
      <category>postgres</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>This is a weekly Journal where I get to talk about the open tabs in my head. You should check it out and drop yours too</title>
      <dc:creator>Timi</dc:creator>
      <pubDate>Sun, 23 Aug 2026 23:51:16 +0000</pubDate>
      <link>https://dev.to/timhilehin1/this-is-a-weekly-journal-where-i-get-to-talk-about-the-open-tabs-in-my-head-you-should-check-it-8j1</link>
      <guid>https://dev.to/timhilehin1/this-is-a-weekly-journal-where-i-get-to-talk-about-the-open-tabs-in-my-head-you-should-check-it-8j1</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/timhilehin1/what-are-you-working-on-02-3akk" class="crayons-story__hidden-navigation-link"&gt;What are you working on? #02&lt;/a&gt;


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

          &lt;a href="/timhilehin1" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1291324%2F3954be9d-2c74-4160-9525-10bdd9a61a09.jpeg" alt="timhilehin1 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/timhilehin1" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Timi
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Timi
                
                
              
              &lt;div id="story-author-preview-content-4470279" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/timhilehin1" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1291324%2F3954be9d-2c74-4160-9525-10bdd9a61a09.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Timi&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/timhilehin1/what-are-you-working-on-02-3akk" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Aug 23&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/timhilehin1/what-are-you-working-on-02-3akk" id="article-link-4470279"&gt;
          What are you working on? #02
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devjournal"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devjournal&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/softwareengineering"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;softwareengineering&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/timhilehin1/what-are-you-working-on-02-3akk" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;2&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/timhilehin1/what-are-you-working-on-02-3akk#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

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

&lt;/div&gt;


</description>
      <category>community</category>
      <category>discuss</category>
      <category>watercooler</category>
    </item>
    <item>
      <title>What are you working on? #02</title>
      <dc:creator>Timi</dc:creator>
      <pubDate>Sun, 23 Aug 2026 23:50:03 +0000</pubDate>
      <link>https://dev.to/timhilehin1/what-are-you-working-on-02-3akk</link>
      <guid>https://dev.to/timhilehin1/what-are-you-working-on-02-3akk</guid>
      <description>&lt;p&gt;&lt;strong&gt;What are you working on? #02&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Alrighttt, how are we doing?&lt;/p&gt;

&lt;p&gt;First off, please drop what you're working on this week. 😂&lt;/p&gt;

&lt;p&gt;This is the continuation of the series I started last week, where I’m basically documenting some of the things I’m building, learning, figuring out and, occasionally, just thinking about.&lt;/p&gt;

&lt;p&gt;So, what have I been working on?&lt;/p&gt;

&lt;p&gt;Last week, we were finally able to launch the first version of our credit application internally. This means users within the organization can now use the application and perform actual operations, so we’re moving into more of a user testing phase.&lt;/p&gt;

&lt;p&gt;I also had to jump on some pre-launch fixes, and honestly, it was a good feeling.&lt;/p&gt;

&lt;p&gt;Launching comes with its own problems, of course, but seeing that announcement mail go out during the week after months of work and iteration was really satisfying. There’s something different about seeing people actually get access to something you've spent months building.&lt;/p&gt;

&lt;p&gt;On the backend side, I made some good progress on my e-commerce project too.&lt;/p&gt;

&lt;p&gt;I moved from working on the auth flow to users being able to add, update and remove items from their cart. This has been helping me understand the NestJS ecosystem better, especially concepts like dependency injection and the relationship between modules, controllers and services.&lt;/p&gt;

&lt;p&gt;This week, I’m moving over to the checkout and inventory side of the project. The goal is to give customers a way to actually pay for their furniture and to start building out inventory management for admin users.&lt;/p&gt;

&lt;p&gt;In my software engineering group, a couple of teammates and I are also working on a system design problem for a ticket management system.&lt;/p&gt;

&lt;p&gt;That one has been particularly mind-stretching.&lt;/p&gt;

&lt;p&gt;It’s one thing to talk about system design in theory, but when you actually have to sit down with people and brainstorm how a system should work, you start seeing how many problems you can create for yourself if you don't think things through properly.&lt;/p&gt;

&lt;p&gt;Sometimes, just go through the stress now and save yourself some sleep later. 😂&lt;/p&gt;

&lt;p&gt;I’ll also be reading more of Eric Ries’ &lt;em&gt;The Lean Startup&lt;/em&gt; this week. It was recommended to me recently, and I haven’t gotten far enough into it to start pretending I have some profound insight from the book yet. 😂 But I’m hoping to cover some good ground this week.&lt;/p&gt;

&lt;p&gt;Outside of work and engineering, I spent some time with friends and family over the weekend and really enjoyed it.&lt;/p&gt;

&lt;p&gt;I’m also looking forward to the public holiday this week.&lt;/p&gt;

&lt;p&gt;Is it me or does the night before a public holiday slap harder than the actual public holiday itself? 😂&lt;/p&gt;

&lt;p&gt;There are a couple of other things I’m trying to be more intentional about.&lt;/p&gt;

&lt;p&gt;One is using AI more to solve problems in my day-to-day life. I want to get better at seeing a bottleneck and thinking, “Can I build or iterate something with AI to solve this?” It feels like a return to my first love with tech: seeing a problem and trying to build something around it.&lt;/p&gt;

&lt;p&gt;I’m also trying to stop running my community responsibilities on vibes. I need to actually put a schedule around the things I’m responsible for instead of leaving them to my mood.&lt;/p&gt;

&lt;p&gt;So yeah, that's what I'm working on this week.&lt;/p&gt;

&lt;p&gt;A bit of shipping, a bit of backend, a bit of system design, a bit of reading, a bit of figuring out life, and hopefully a bit of rest too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are you working on?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Drop it in the comments. I’d genuinely love to hear what you're building, learning, figuring out, or just getting through this week.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devjournal</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>what are you working on? sounds familiar</title>
      <dc:creator>Timi</dc:creator>
      <pubDate>Sun, 16 Aug 2026 22:12:18 +0000</pubDate>
      <link>https://dev.to/timhilehin1/what-are-you-working-on-sounds-familiar-5djn</link>
      <guid>https://dev.to/timhilehin1/what-are-you-working-on-sounds-familiar-5djn</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/timhilehin1/what-are-you-working-on-01-3k4a" class="crayons-story__hidden-navigation-link"&gt;What are you working on? #01&lt;/a&gt;


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

          &lt;a href="/timhilehin1" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1291324%2F3954be9d-2c74-4160-9525-10bdd9a61a09.jpeg" alt="timhilehin1 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/timhilehin1" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Timi
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Timi
                
                
              
              &lt;div id="story-author-preview-content-4412136" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/timhilehin1" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1291324%2F3954be9d-2c74-4160-9525-10bdd9a61a09.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Timi&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/timhilehin1/what-are-you-working-on-01-3k4a" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Aug 16&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/timhilehin1/what-are-you-working-on-01-3k4a" id="article-link-4412136"&gt;
          What are you working on? #01
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devjournal"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devjournal&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/development"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;development&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/career"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;career&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/timhilehin1/what-are-you-working-on-01-3k4a" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;5&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/timhilehin1/what-are-you-working-on-01-3k4a#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              1&lt;span class="hidden s:inline"&gt;&amp;nbsp;comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>buildinpublic</category>
      <category>discuss</category>
      <category>showdev</category>
    </item>
    <item>
      <title>What are you working on? #01</title>
      <dc:creator>Timi</dc:creator>
      <pubDate>Sun, 16 Aug 2026 21:51:07 +0000</pubDate>
      <link>https://dev.to/timhilehin1/what-are-you-working-on-01-3k4a</link>
      <guid>https://dev.to/timhilehin1/what-are-you-working-on-01-3k4a</guid>
      <description>&lt;p&gt;&lt;strong&gt;What are you working on?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I hear these words in my day-to-day.&lt;/p&gt;

&lt;p&gt;And sometimes, when I hear them, there’s this little brain freeze that happens because my brain is probably trying to put into words the amount of things that have wandered through my head in the last 24 hours. 😂&lt;/p&gt;

&lt;p&gt;So I thought, okay, let me try something.&lt;/p&gt;

&lt;p&gt;I want to take some of those wandering thoughts, explorations, things I'm trying out and things I'm learning, and put them into writing.&lt;/p&gt;

&lt;p&gt;This is going to be a  series where I come and talk about what I'm working on — software engineering, product, work, people, faith, relationships, rest, and whatever else happens to be taking up space in my head at the moment.&lt;/p&gt;

&lt;p&gt;So, what am I working on?&lt;/p&gt;

&lt;p&gt;I recently started writing backend code, and there’s a bit of a backstory to that.&lt;/p&gt;

&lt;p&gt;I built this frontend commerce store years ago where people can come and shop for furniture. At the time, I used a backend-as-a-service to handle the backend side of the application.&lt;/p&gt;

&lt;p&gt;Now, I’m coming back to that same system and writing the backend myself with NestJS. I wanted to go beyond just consuming a backend and actually understand what is happening behind the scenes.&lt;/p&gt;

&lt;p&gt;The learning process is a bit stretching at the moment because I’m getting familiar with a lot of new concepts. Tiring and frustrating? Yes. But the feeling when I finally understand the reason behind something is always refreshing. That has been really rewarding lately.&lt;/p&gt;

&lt;p&gt;I'm also in the middle of launching a mobile application at my workplace, going through system design classes, figuring out how to get the best out of my engineers (AI sub-agents, by the way 😅), and occasionally imagining that dream job where you get to build products that serve millions of people and work with really brilliant minds.&lt;/p&gt;

&lt;p&gt;Also, I discovered the productivity rush that comes with using large monitors. 😂&lt;/p&gt;

&lt;p&gt;Then there's learning how to rest while also trying to close out all the open loops in my head.&lt;/p&gt;

&lt;p&gt;Building reading habits.&lt;/p&gt;

&lt;p&gt;Figuring out what to prioritize and, perhaps more importantly, what to drop.&lt;/p&gt;

&lt;p&gt;Learning how to build healthier mindsets about life in general.&lt;/p&gt;

&lt;p&gt;And sometimes, honestly, maybe all I'm working on is getting some rest or laughing about something ridiculous that happened during the week.&lt;/p&gt;

&lt;p&gt;That's kind of the point.&lt;/p&gt;

&lt;p&gt;I don't want this to be a series where I come here every week with a perfectly packaged lesson or pretend I've figured everything out.&lt;/p&gt;

&lt;p&gt;I just want to document some of the things I'm thinking about and trying out as I go.&lt;/p&gt;

&lt;p&gt;I also want to get better at something I've been thinking about for a while: when I see something I want to do, I want to find the closest point of execution instead of waiting for permission to move.&lt;/p&gt;

&lt;p&gt;Sometimes we know what we want to do, but somehow convince ourselves that we need to go three levels up, get approval, find the perfect plan, or wait until we're completely ready.&lt;/p&gt;

&lt;p&gt;Meanwhile, the closest point of execution might literally be the person sitting on the same floor as us.&lt;/p&gt;

&lt;p&gt;Or, in this case, it might just be opening a blank page and starting to write.&lt;/p&gt;

&lt;p&gt;So yeah.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Me starting this series is my point of execution.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's see how it goes over the next couple of weeks.&lt;/p&gt;

&lt;p&gt;And I'd genuinely love to hear from you too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are you working on right now?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It could be software engineering or whatever field you're in. It could be something you're building. It could be something you're learning, something you're trying to figure out, something you're trying to let go of, or maybe just something funny that happened this week.&lt;/p&gt;

&lt;p&gt;Drop it in the comments. Let's talk.&lt;/p&gt;

&lt;p&gt;Also, yes, the last time I said I was writing something, it didn't ship. 😂 Long story.&lt;/p&gt;

&lt;p&gt;But we're here now.&lt;/p&gt;

&lt;p&gt;Let's try this.&lt;/p&gt;

&lt;p&gt;Amen.&lt;/p&gt;

</description>
      <category>devjournal</category>
      <category>development</category>
      <category>career</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Good stuff</title>
      <dc:creator>Timi</dc:creator>
      <pubDate>Sun, 09 Aug 2026 01:20:16 +0000</pubDate>
      <link>https://dev.to/timhilehin1/good-stuff-oio</link>
      <guid>https://dev.to/timhilehin1/good-stuff-oio</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/namingthingsishard/fixing-your-sites-metadata-a-practical-checklist-3ka0" class="crayons-story__hidden-navigation-link"&gt;Fixing your site's metadata: a practical checklist&lt;/a&gt;


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

          &lt;a href="/namingthingsishard" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1278343%2F5330e020-d565-4b02-b427-d548f23bbe37.jpeg" alt="namingthingsishard profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/namingthingsishard" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Shwetha
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Shwetha
                
                
              
              &lt;div id="story-author-preview-content-4334585" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/namingthingsishard" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1278343%2F5330e020-d565-4b02-b427-d548f23bbe37.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Shwetha&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/namingthingsishard/fixing-your-sites-metadata-a-practical-checklist-3ka0" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Aug 6&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/namingthingsishard/fixing-your-sites-metadata-a-practical-checklist-3ka0" id="article-link-4334585"&gt;
          Fixing your site's metadata: a practical checklist
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/seo"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;seo&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/metadata"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;metadata&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/namingthingsishard/fixing-your-sites-metadata-a-practical-checklist-3ka0" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;20&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/namingthingsishard/fixing-your-sites-metadata-a-practical-checklist-3ka0#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              9&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            6 min read
          &lt;/small&gt;
          
          &lt;div class="only-sidebar-menu-item trusted-visible-block print-hidden align-center"&gt;
                
                    
                
          &lt;/div&gt;

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

&lt;/div&gt;


</description>
      <category>html</category>
      <category>seo</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Picked up backend last week, I think I like what I am seeing</title>
      <dc:creator>Timi</dc:creator>
      <pubDate>Thu, 23 Jul 2026 13:58:18 +0000</pubDate>
      <link>https://dev.to/timhilehin1/picked-up-backend-last-week-i-think-i-like-what-i-am-seeing-e40</link>
      <guid>https://dev.to/timhilehin1/picked-up-backend-last-week-i-think-i-like-what-i-am-seeing-e40</guid>
      <description></description>
    </item>
    <item>
      <title>Good read</title>
      <dc:creator>Timi</dc:creator>
      <pubDate>Tue, 16 Jun 2026 15:26:01 +0000</pubDate>
      <link>https://dev.to/timhilehin1/good-read-25el</link>
      <guid>https://dev.to/timhilehin1/good-read-25el</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/towernter/luck-opportunity-meets-preparation-58g9" class="crayons-story__hidden-navigation-link"&gt;Luck == Opportunity Meets Preparation&lt;/a&gt;


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

          &lt;a href="/towernter" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F393559%2Fe536d6a8-f2a6-47dd-a600-682c1ea4a48e.jpg" alt="towernter profile" class="crayons-avatar__image" width="411" height="383"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/towernter" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Tawanda Nyahuye
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Tawanda Nyahuye
                
              
              &lt;div id="story-author-preview-content-3915149" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/towernter" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F393559%2Fe536d6a8-f2a6-47dd-a600-682c1ea4a48e.jpg" class="crayons-avatar__image" alt="" width="411" height="383"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Tawanda Nyahuye&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/towernter/luck-opportunity-meets-preparation-58g9" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 16&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/towernter/luck-opportunity-meets-preparation-58g9" id="article-link-3915149"&gt;
          Luck == Opportunity Meets Preparation
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/career"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;career&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/learning"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;learning&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/analytics"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;analytics&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/towernter/luck-opportunity-meets-preparation-58g9" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;2&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/towernter/luck-opportunity-meets-preparation-58g9#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              1&lt;span class="hidden s:inline"&gt;&amp;nbsp;comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            9 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

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

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Building with AI</title>
      <dc:creator>Timi</dc:creator>
      <pubDate>Fri, 22 May 2026 21:31:35 +0000</pubDate>
      <link>https://dev.to/timhilehin1/building-with-ai-2640</link>
      <guid>https://dev.to/timhilehin1/building-with-ai-2640</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/timhilehin1/keep-your-taste-b26" class="crayons-story__hidden-navigation-link"&gt;Keep Your Taste&lt;/a&gt;


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

          &lt;a href="/timhilehin1" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1291324%2F3954be9d-2c74-4160-9525-10bdd9a61a09.jpeg" alt="timhilehin1 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/timhilehin1" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Timi
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Timi
                
              
              &lt;div id="story-author-preview-content-3661676" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/timhilehin1" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1291324%2F3954be9d-2c74-4160-9525-10bdd9a61a09.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Timi&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/timhilehin1/keep-your-taste-b26" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;May 22&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/timhilehin1/keep-your-taste-b26" id="article-link-3661676"&gt;
          Keep Your Taste
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/learning"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;learning&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/timhilehin1/keep-your-taste-b26" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;2&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/timhilehin1/keep-your-taste-b26#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              2&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

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

&lt;/div&gt;


</description>
      <category>ai</category>
      <category>productivity</category>
      <category>programming</category>
      <category>vibecoding</category>
    </item>
    <item>
      <title>Keep Your Taste</title>
      <dc:creator>Timi</dc:creator>
      <pubDate>Fri, 22 May 2026 21:25:58 +0000</pubDate>
      <link>https://dev.to/timhilehin1/keep-your-taste-b26</link>
      <guid>https://dev.to/timhilehin1/keep-your-taste-b26</guid>
      <description>&lt;p&gt;I know I said I was going to keep writing about concepts I use every day as a frontend engineer. Previously, I wrote about things like SPA routing, &lt;a href="https://dev.to/timhilehin1/client-side-rendering-vs-server-side-rendering-1pje"&gt;client-side vs server-side rendering&lt;/a&gt;, &lt;a href="https://dev.to/timhilehin1/understanding-cdns-content-delivery-networks-138d"&gt;CDNs&lt;/a&gt; and all that good stuff. Life happened, a month went by, and honestly my workflow changed so much that it felt wrong to just jump back in without talking about it first.&lt;/p&gt;

&lt;p&gt;Not that I stopped learning or building, far from it actually, but the way I approach features and fixes now is very different from what it used to be, mostly because of AI tools like Claude Code.&lt;/p&gt;

&lt;p&gt;These days, I spend more time supervising code than actually typing every line myself.&lt;/p&gt;

&lt;p&gt;At first, that feeling messed with me a little bit. It almost felt like I was cheating the process somehow. Like, if I’m no longer manually implementing every single thing, what exactly is my role now?&lt;/p&gt;

&lt;p&gt;But after a lot of reflection, I’m starting to understand that engineering was never just about repetitive implementation. We were primarily created to think. To make decisions. To identify tradeoffs. To know why something should exist and what approach makes the most sense.&lt;/p&gt;

&lt;p&gt;One thing AI does brilliantly though is helping ideas move from zero to one very quickly.&lt;/p&gt;

&lt;p&gt;Previously, you could have an idea, think deeply about it, maybe even start building it, then life happens. Work happens. Priorities change. Maybe you just lack discipline (sarrry sarrry 😭) and the project just ends up in the dump of unfinished side projects.&lt;/p&gt;

&lt;p&gt;I think a lot of engineers can relate to that.&lt;/p&gt;

&lt;p&gt;I got an idea a few months ago that was very personal to me. I started actively taking notes during church services and events, but I noticed I rarely went back to read them. Sometimes the next time I opened a note was the next Sunday.&lt;/p&gt;

&lt;p&gt;Discipline issue? Maybe. But I started thinking the real problem was visibility. It’s easy to forget things you never see again.&lt;/p&gt;

&lt;p&gt;So I built something. A reminder based mobile app that resurfaces my notes intentionally throughout the week.&lt;/p&gt;

&lt;p&gt;And building it was the first time I really felt what AI in a workflow actually means.&lt;/p&gt;

&lt;p&gt;I had the idea, I knew the problem, AI helped me move fast on implementation. It gave me a solid template to work with. But decent wasn’t enough. My experience with UX meant I could look at what it gave me and immediately know what felt off. Certain flows weren’t natural. Some interactions didn’t match how users actually behave. So I made the adjustments, not because AI did a bad job, but because I already had a standard in my head.&lt;/p&gt;

&lt;p&gt;That’s when I really started understanding taste.&lt;/p&gt;

&lt;p&gt;And honestly the code AI produces is very decent my bro 😭&lt;/p&gt;

&lt;p&gt;Decent enough that if you’re not careful, you stop thinking deeply about the decisions being made. Sometimes I catch myself just accepting changes quickly without really sitting down to understand if it’s actually the best approach.&lt;/p&gt;

&lt;p&gt;But a colleague told me something recently that stuck. He said one thing AI will not take away from engineers is taste.&lt;/p&gt;

&lt;p&gt;For me, taste is feeding your mind well enough to make sound judgments. Experiencing enough to know what good actually looks like. Because AI can generate templates but taste is what takes things from generic to actually good.&lt;/p&gt;

&lt;p&gt;There has to be a standard in your head already, otherwise AI becomes the standard, and that guy can give some very generic stuff 😭&lt;/p&gt;

&lt;p&gt;And honestly staying open minded is not a bad thing. It exposes you to a lot. The good stuff, the bad stuff, all of it. And that’s actually how taste gets built. You have to see what doesn’t work to know what does. So when AI puts something in front of you, you already know.&lt;/p&gt;

&lt;p&gt;Thinking gives you something to drive towards. Leave your mind completely open and you will accept anything. That’s what taste protects you from.&lt;/p&gt;

&lt;p&gt;So yeah, let’s keep building our taste, keep building things, and keep growing into better builders.&lt;/p&gt;

&lt;p&gt;Till I come across something again… see you soon. Byeee 👋&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>learning</category>
    </item>
    <item>
      <title>It's a good day to learn more about CDNs</title>
      <dc:creator>Timi</dc:creator>
      <pubDate>Mon, 23 Mar 2026 10:24:47 +0000</pubDate>
      <link>https://dev.to/timhilehin1/its-a-good-day-to-learn-more-about-cdns-2n3p</link>
      <guid>https://dev.to/timhilehin1/its-a-good-day-to-learn-more-about-cdns-2n3p</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/timhilehin1/understanding-cdns-content-delivery-networks-138d" class="crayons-story__hidden-navigation-link"&gt;Understanding CDNs (Content Delivery Networks)&lt;/a&gt;


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

          &lt;a href="/timhilehin1" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1291324%2F3954be9d-2c74-4160-9525-10bdd9a61a09.jpeg" alt="timhilehin1 profile" class="crayons-avatar__image" width="800" height="1000"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/timhilehin1" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Timi
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Timi
                
              
              &lt;div id="story-author-preview-content-3331833" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/timhilehin1" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1291324%2F3954be9d-2c74-4160-9525-10bdd9a61a09.jpeg" class="crayons-avatar__image" alt="" width="800" height="1000"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Timi&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/timhilehin1/understanding-cdns-content-delivery-networks-138d" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 17&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/timhilehin1/understanding-cdns-content-delivery-networks-138d" id="article-link-3331833"&gt;
          Understanding CDNs (Content Delivery Networks)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/performance"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;performance&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/cdn"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;cdn&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/frontend"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;frontend&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/timhilehin1/understanding-cdns-content-delivery-networks-138d" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;9&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/timhilehin1/understanding-cdns-content-delivery-networks-138d#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              10&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            5 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

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

&lt;/div&gt;


</description>
      <category>performance</category>
      <category>webdev</category>
      <category>cdn</category>
      <category>frontend</category>
    </item>
  </channel>
</rss>
