<?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: Ella</title>
    <description>The latest articles on DEV Community by Ella (@fluffyfi3).</description>
    <link>https://dev.to/fluffyfi3</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2898143%2F47227e3d-e6cb-4b13-adec-3a63c84c2678.png</url>
      <title>DEV Community: Ella</title>
      <link>https://dev.to/fluffyfi3</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fluffyfi3"/>
    <language>en</language>
    <item>
      <title>Why PostgreSQL Ignores Your Index (Sometimes), Entry #2</title>
      <dc:creator>Ella</dc:creator>
      <pubDate>Sat, 11 Apr 2026 11:30:26 +0000</pubDate>
      <link>https://dev.to/fluffyfi3/why-postgresql-ignores-your-index-sometimes-entry-2-42p1</link>
      <guid>https://dev.to/fluffyfi3/why-postgresql-ignores-your-index-sometimes-entry-2-42p1</guid>
      <description>&lt;h2&gt;
  
  
  I Thought My Index Would Fix Everything
&lt;/h2&gt;

&lt;p&gt;I added the index.&lt;/p&gt;

&lt;p&gt;Ran the query.&lt;/p&gt;

&lt;p&gt;And… nothing changed.&lt;/p&gt;

&lt;p&gt;Same slow response. Same frustration.&lt;/p&gt;

&lt;p&gt;That was the moment I realized something uncomfortable:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PostgreSQL doesn’t care about your index.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It cares about something else entirely.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Question PostgreSQL Is Actually Answering
&lt;/h2&gt;

&lt;p&gt;When you run a query, PostgreSQL is not asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Do I have an index?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It’s asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“What is the cheapest way to get this data?”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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




&lt;h2&gt;
  
  
  Meet &lt;code&gt;EXPLAIN ANALYZE&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;If you’ve ever run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;EXPLAIN&lt;/span&gt; &lt;span class="k"&gt;ANALYZE&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;user_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You’ve seen something like:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Index Scan using idx_orders_user_id on orders
Index Cond: &lt;span class="o"&gt;(&lt;/span&gt;user_id &lt;span class="o"&gt;=&lt;/span&gt; 42&lt;span class="o"&gt;)&lt;/span&gt;
Actual Time: 0.03 ms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Here’s how to read it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Index Scan using idx_orders_user_id&lt;/strong&gt;&lt;br&gt;
→ PostgreSQL used your index&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Index Cond: (user_id = 42)&lt;/strong&gt;&lt;br&gt;
→ Condition applied inside the index&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Actual Time&lt;/strong&gt;&lt;br&gt;
→ What really happened (not theory)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But here’s where things get interesting…&lt;/p&gt;


&lt;h2&gt;
  
  
  The Counter-Intuitive Truth
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Indexes are not always faster.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let that sink in.&lt;/p&gt;

&lt;p&gt;Indexes are only faster when they reduce &lt;em&gt;total work&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;And sometimes… they don’t.&lt;/p&gt;


&lt;h2&gt;
  
  
  How PostgreSQL Really Decides
&lt;/h2&gt;

&lt;p&gt;It follows a simple (but powerful) mental model:&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 1: How many rows do I need?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Few rows → Index Scan&lt;/li&gt;
&lt;li&gt;Most rows → Sequential Scan&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Step 2: What does it cost to get them?
&lt;/h3&gt;

&lt;p&gt;Index scan means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jump to index&lt;/li&gt;
&lt;li&gt;Jump to table&lt;/li&gt;
&lt;li&gt;Repeat (random access)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That “jumping” is expensive.&lt;/p&gt;


&lt;h2&gt;
  
  
  Using a Warehouse Analogy
&lt;/h2&gt;

&lt;p&gt;Imagine a warehouse.&lt;/p&gt;

&lt;p&gt;Two ways to find items:&lt;/p&gt;
&lt;h3&gt;
  
  
  Option A: Sequential Scan
&lt;/h3&gt;

&lt;p&gt;Walk every aisle. Check every box.&lt;/p&gt;
&lt;h3&gt;
  
  
  Option B: Index Scan
&lt;/h3&gt;

&lt;p&gt;Use a system to jump directly to shelves.&lt;/p&gt;

&lt;p&gt;Now here’s the twist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you need &lt;strong&gt;5 items&lt;/strong&gt; → jumping is faster&lt;/li&gt;
&lt;li&gt;If you need &lt;strong&gt;80% of the warehouse&lt;/strong&gt; → just walk&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Jumping becomes slower than walking&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That’s exactly how PostgreSQL thinks.&lt;/p&gt;


&lt;h2&gt;
  
  
  When PostgreSQL Ignores Your Index
&lt;/h2&gt;

&lt;p&gt;Even if your index exists, PostgreSQL may skip it when:&lt;/p&gt;
&lt;h3&gt;
  
  
  1. The Table Is Small
&lt;/h3&gt;

&lt;p&gt;Scanning everything is cheaper than using the index.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Your Filter Isn’t Selective
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'active'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If 80% of rows are “active”:&lt;/p&gt;

&lt;p&gt;The index is of no use...&lt;/p&gt;


&lt;h3&gt;
  
  
  3. Index Access Is More Expensive
&lt;/h3&gt;

&lt;p&gt;Indexes require:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reading index pages&lt;/li&gt;
&lt;li&gt;Jumping to table pages (random I/O)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;PostgreSQL asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Is all this jumping worth it?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If not → &lt;strong&gt;Seq Scan wins&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  The Cost Model
&lt;/h2&gt;

&lt;p&gt;PostgreSQL calculates cost based on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Number of rows expected&lt;/li&gt;
&lt;li&gt;Filter selectivity&lt;/li&gt;
&lt;li&gt;Random vs sequential I/O&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It does NOT follow rules like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Index exists → use it”&lt;/li&gt;
&lt;/ul&gt;

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

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“Which plan does the least total work?”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  The Insight Most Developers Miss
&lt;/h2&gt;

&lt;p&gt;Here’s the shift that changed everything for me:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Stop thinking in terms of speed. Start thinking in terms of work.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;PostgreSQL is not optimizing for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;elegance&lt;/li&gt;
&lt;li&gt;structure&lt;/li&gt;
&lt;li&gt;your expectations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s optimizing for:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;minimum effort to get the result&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Why This Matters (Especially If You're Scaling)
&lt;/h2&gt;

&lt;p&gt;At small scale:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Everything works&lt;/li&gt;
&lt;li&gt;Mistakes are hidden&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At large scale:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wrong assumptions = slow queries&lt;/li&gt;
&lt;li&gt;Slow queries = real problems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Understanding this early gives you an edge most devs don’t have.&lt;/p&gt;


&lt;h2&gt;
  
  
  Part of a Bigger Series
&lt;/h2&gt;

&lt;p&gt;This is part of my &lt;strong&gt;Advanced Backend Learning Series&lt;/strong&gt; where I break down concepts I’m actively learning—without the usual fluff.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/fluffyfi3/entry-01-my-perfect-api-was-actually-drowning-5kj" class="crayons-story__hidden-navigation-link"&gt;Entry #01: My perfect API was actually drowning&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="/fluffyfi3" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2898143%2F47227e3d-e6cb-4b13-adec-3a63c84c2678.png" alt="fluffyfi3 profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/fluffyfi3" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Ella
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Ella
                
              
              &lt;div id="story-author-preview-content-3415980" 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="/fluffyfi3" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2898143%2F47227e3d-e6cb-4b13-adec-3a63c84c2678.png" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Ella&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/fluffyfi3/entry-01-my-perfect-api-was-actually-drowning-5kj" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 27&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/fluffyfi3/entry-01-my-perfect-api-was-actually-drowning-5kj" id="article-link-3415980"&gt;
          Entry #01: My perfect API was actually drowning
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/discuss"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;discuss&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/javascript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;javascript&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;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;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/fluffyfi3/entry-01-my-perfect-api-was-actually-drowning-5kj" 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="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.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;8&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/fluffyfi3/entry-01-my-perfect-api-was-actually-drowning-5kj#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


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

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

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


&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;&lt;br&gt;
If this clicked for you, the next posts will go deeper into Query optimization 




&lt;p&gt;You didn’t do anything wrong.&lt;/p&gt;

&lt;p&gt;Your index didn’t “fail.”&lt;/p&gt;

&lt;p&gt;You just learned the real rule:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Indexes are not faster. They are sometimes cheaper.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And PostgreSQL will always choose cheap over clever.&lt;/p&gt;




&lt;p&gt;If this post, taught you something:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Drop a comment with something that confused you about databases&lt;/li&gt;
&lt;li&gt;Or follow the series—next post gets even more practical&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because the goal isn’t to memorize PostgreSQL.&lt;/p&gt;

&lt;p&gt;It’s to &lt;strong&gt;think like it&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>database</category>
      <category>productivity</category>
      <category>postgres</category>
    </item>
    <item>
      <title>I Almost Quit Tech Not Because of Code, But Because of People</title>
      <dc:creator>Ella</dc:creator>
      <pubDate>Wed, 01 Apr 2026 12:55:42 +0000</pubDate>
      <link>https://dev.to/fluffyfi3/i-almost-quit-tech-not-because-of-code-but-because-of-people-1okn</link>
      <guid>https://dev.to/fluffyfi3/i-almost-quit-tech-not-because-of-code-but-because-of-people-1okn</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/wecoded-2026"&gt;2026 WeCoded Challenge&lt;/a&gt;: Echoes of Experience&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When I first found out my passion for building things in tech, I was over the moon. I signed up for a training program, ready to learn, ready to build, ready to network. I had no idea I was about to face one of the toughest pits in my life, and it was not going to be my programming skills that would cause me problems. It was the people surrounding me.&lt;/p&gt;




&lt;h2&gt;
  
  
  Feeling Isolated in a World of Passion
&lt;/h2&gt;

&lt;p&gt;Early on, I noticed my passion did not align with the passion levels of my peers. Their interests were different, their priorities were different. While I wanted to talk about things like coding, projects, and ideas, they wanted to talk about things like social trends, entertainment, or personal life.&lt;/p&gt;

&lt;p&gt;At first, I tried to "fit in". I changed my habits, asked no questions in class, showed no curiosity, doing things everyone was doing and even adopted new hobbies to join their conversations. But still, I felt invisible. &lt;/p&gt;

&lt;p&gt;Each day was a quiet struggle to be seen, to belong, and to wonder if my curiosity, my gender, or my age was the reason why I didn’t “fit” into this new environment.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Low Point
&lt;/h2&gt;

&lt;p&gt;I sank into deep depression. I was no longer confident, no longer enjoyed coding, and no longer wanted to be around anyone, even myself. Even simple interactions with others became challenges that I was failing at. I was exhausted, stressed, and overwhelmed.&lt;/p&gt;

&lt;p&gt;There was a point where, while alone on the bus, I wondered if I was even cut out for this whole tech thing. It was like no one was going to be able to relate to me or help me through this. But even in this dark time, there was a small spark within me. That spark was my curiosity.&lt;/p&gt;




&lt;h2&gt;
  
  
  Rediscovering My Passion
&lt;/h2&gt;

&lt;p&gt;The turning point was a slow one, and months later, I found my passion again and decided to get back to something that originally made me happy: building. I built a simple mobile application, a barter application, using React Native and Supabase.&lt;/p&gt;

&lt;p&gt;Here is a glimpse of the application that I built:&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%2Funsbtqezzv8ib1eigdc1.jpeg" 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%2Funsbtqezzv8ib1eigdc1.jpeg" alt="Barter app home interface showing search" width="800" height="1490"&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%2Fmydwr9md7lj4gp2h692a.jpeg" 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%2Fmydwr9md7lj4gp2h692a.jpeg" alt="Barter app interface showing other features" width="800" height="1467"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But rebuilding that relationship with tech wasn’t just about the code. It was about my own confidence, my own voice, and my own love for what I do. It was about realizing that the people who don’t understand or appreciate my passion are not reflections of my own value.&lt;/p&gt;




&lt;h2&gt;
  
  
  Lessons Learned
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Your curiosity is valid.&lt;/strong&gt; Do not silence it to please others.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You don’t have to carry others’ expectations.&lt;/strong&gt; Take care of your energy and your joy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connect with what you love.&lt;/strong&gt; Even small projects or hobbies can reignite your confidence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Share your journey.&lt;/strong&gt; Vulnerability is a bridge to connection, for yourself and others.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Despite everything, I appreciate the experience. It was a painful one, yes, but also a lesson that there is power in sticking to who I am. Today, I feel hopeful, curious, and creative again, for myself and no one else.&lt;/p&gt;




&lt;p&gt;If you’ve ever felt invisible in your tech journey, know that you’re not alone. What have been some of your coping mechanisms when faced with these feelings? I’d love to hear about them in the comments. Let’s lift each other up to stay curious, stay confident, and stay human.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>wecoded</category>
      <category>dei</category>
      <category>career</category>
    </item>
    <item>
      <title>New Post</title>
      <dc:creator>Ella</dc:creator>
      <pubDate>Mon, 30 Mar 2026 07:53:53 +0000</pubDate>
      <link>https://dev.to/fluffyfi3/new-post-2ae3</link>
      <guid>https://dev.to/fluffyfi3/new-post-2ae3</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/fluffyfi3/entry-01-my-perfect-api-was-actually-drowning-5kj" class="crayons-story__hidden-navigation-link"&gt;Entry #01: My perfect API was actually drowning&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="/fluffyfi3" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2898143%2F47227e3d-e6cb-4b13-adec-3a63c84c2678.png" alt="fluffyfi3 profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/fluffyfi3" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Ella
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Ella
                
              
              &lt;div id="story-author-preview-content-3415980" 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="/fluffyfi3" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2898143%2F47227e3d-e6cb-4b13-adec-3a63c84c2678.png" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Ella&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/fluffyfi3/entry-01-my-perfect-api-was-actually-drowning-5kj" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 27&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/fluffyfi3/entry-01-my-perfect-api-was-actually-drowning-5kj" id="article-link-3415980"&gt;
          Entry #01: My perfect API was actually drowning
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/discuss"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;discuss&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/javascript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;javascript&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;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;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/fluffyfi3/entry-01-my-perfect-api-was-actually-drowning-5kj" 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="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.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;8&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/fluffyfi3/entry-01-my-perfect-api-was-actually-drowning-5kj#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


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

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

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

&lt;/div&gt;


</description>
      <category>discuss</category>
      <category>javascript</category>
      <category>productivity</category>
      <category>postgres</category>
    </item>
    <item>
      <title>Entry #01: My perfect API was actually drowning</title>
      <dc:creator>Ella</dc:creator>
      <pubDate>Fri, 27 Mar 2026 16:01:21 +0000</pubDate>
      <link>https://dev.to/fluffyfi3/entry-01-my-perfect-api-was-actually-drowning-5kj</link>
      <guid>https://dev.to/fluffyfi3/entry-01-my-perfect-api-was-actually-drowning-5kj</guid>
      <description>&lt;p&gt;For a long time, I believed that if my API sent back a 200 OK status code, my work as a backend developer was over. But I've come to realize that I should not only be using tools and libraries but also understand how they work. I've been using Postgres because I've heard it's the best. But I never really knew why—until now.&lt;/p&gt;

&lt;p&gt;Welcome to Entry #01 of my journey into advanced backend architectures.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Life of a Query
&lt;/h3&gt;

&lt;p&gt;I used to think that a query goes in and comes out with the data. But the life of a query is actually very disciplined. It's like a relay race.&lt;/p&gt;

&lt;p&gt;When I send a query to my Node.js application, a connection is made (now I’m using a connection pool to keep things stable). When this connection is made, a backend process is created. Then, Postgres determines how to retrieve this information. It could do an index scan if it can find it quickly, or it could do a sequential scan if it has to look at everything. It all depends on the query&lt;/p&gt;

&lt;p&gt;One of the biggest mind blowers for me is that Postgres does not access the disk every time. It has something called a Shared Buffer. This is essentially a memory. If it is in that memory, it is quick. If it is not in that memory, it goes to the disk and puts it in that memory.&lt;/p&gt;




&lt;h3&gt;
  
  
  What happens when things go wrong?
&lt;/h3&gt;

&lt;p&gt;I wanted to examine a few scenarios that would normally keep developers up at night.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario 1: The Morning Spike&lt;/strong&gt;&lt;br&gt;
The Problem: At PayWave, our /wallet/balance endpoint suddenly jumped from 50ms to 500ms during the morning rush.&lt;/p&gt;

&lt;p&gt;My Coworker Alex: "Hey, the balance check is dragging. Is the server overloaded?"&lt;/p&gt;

&lt;p&gt;The Solution: If I'm working at a fintech firm like PayWave, and a balance check takes 500ms, it's a disaster. Instead of thinking of restarting the server, I would think about the dead tuples. If the database has a lot of old tuples that have not been vacuumed in a while, it could slow down the server significantly. I would also consider if the query actually using the index I created?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario 2: The Growing Table&lt;/strong&gt;&lt;br&gt;
The Problem: At ShopSphere, our orders table grew from 2GB to 6GB in one week, but our sales didn't triple.&lt;/p&gt;

&lt;p&gt;My Coworker Priya: "Why is the disk filling up so fast? The autovacuum is on, so it shouldn't be a bloat, right?"&lt;/p&gt;

&lt;p&gt;The Solution: If a table has tripled in size in a week at ShopSphere, it could be a sign of that it's a bloat. Even if autovacuum is enabled, it may not be fast enough to keep up with the volume of changes to the table. I would examine the value of &lt;code&gt;autovacuum_vacuum_cost_limit&lt;/code&gt; to determine if we are slowing down the autovacuum process too much.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario 3: The Mid-Transaction Crash&lt;/strong&gt;&lt;br&gt;
The Problem: During a quarterly DR test at CryptoBank, we simulate a primary node crash mid-transaction.&lt;/p&gt;

&lt;p&gt;My Coworker Sam: "We killed the primary node. Can we actually restore this without losing the last 30 seconds of transactions?"&lt;/p&gt;

&lt;p&gt;The Solution: This used to worry me. But after learning about Write Ahead Logging (WAL), I don’t worry about this anymore. Even in the case of a primary node crash, I know that I the data can be recovered. I can simply replay all the logs and bring my system to a consistent state.&lt;/p&gt;


&lt;h3&gt;
  
  
  My Key Takeaways
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Indexing is your friend when it comes to speed.&lt;/li&gt;
&lt;li&gt;Bloating is a silent killer; do monitor dead tuples.&lt;/li&gt;
&lt;li&gt;Using connection pools avoids the "Too Many Connections" crash because it manages backend processes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm shifting my focus from merely coding to learning about the environment that runs my code. If you have any questions/scenarios related to Postgres performance tuning, do share in the comments below.&lt;/p&gt;

&lt;p&gt;Catch you in Entry #02.&lt;/p&gt;


&lt;h3&gt;
  
  
  Connect with me
&lt;/h3&gt;


&lt;div class="ltag__user ltag__user__id__2898143"&gt;
    &lt;a href="/fluffyfi3" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2898143%2F47227e3d-e6cb-4b13-adec-3a63c84c2678.png" alt="fluffyfi3 image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/fluffyfi3"&gt;Ella&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/fluffyfi3"&gt;Building little things &amp;amp; documenting my coding journey&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;





&lt;p&gt;&lt;strong&gt;Check out my previous post:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/fluffyfi3/fintech-companies-lose-millions-from-missed-filings-so-i-built-this-api-51d2" class="crayons-story__hidden-navigation-link"&gt;Fintech Companies Lose Millions From Missed Filings — So I Built This API&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="/fluffyfi3" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2898143%2F47227e3d-e6cb-4b13-adec-3a63c84c2678.png" alt="fluffyfi3 profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/fluffyfi3" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Ella
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Ella
                
              
              &lt;div id="story-author-preview-content-3343220" 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="/fluffyfi3" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2898143%2F47227e3d-e6cb-4b13-adec-3a63c84c2678.png" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Ella&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/fluffyfi3/fintech-companies-lose-millions-from-missed-filings-so-i-built-this-api-51d2" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 12&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/fluffyfi3/fintech-companies-lose-millions-from-missed-filings-so-i-built-this-api-51d2" id="article-link-3343220"&gt;
          Fintech Companies Lose Millions From Missed Filings — So I Built This API
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/node"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;node&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/api"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;api&lt;/a&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/javascript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;javascript&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/fluffyfi3/fintech-companies-lose-millions-from-missed-filings-so-i-built-this-api-51d2" 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="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.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;3&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/fluffyfi3/fintech-companies-lose-millions-from-missed-filings-so-i-built-this-api-51d2#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


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

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

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

&lt;/div&gt;


</description>
      <category>discuss</category>
      <category>javascript</category>
      <category>productivity</category>
      <category>postgres</category>
    </item>
    <item>
      <title>new post</title>
      <dc:creator>Ella</dc:creator>
      <pubDate>Sat, 21 Mar 2026 13:55:49 +0000</pubDate>
      <link>https://dev.to/fluffyfi3/-56fl</link>
      <guid>https://dev.to/fluffyfi3/-56fl</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/fluffyfi3/i-built-a-payment-proof-tracker-for-agencies-fed-up-of-ive-paid-messages-2a0o" class="crayons-story__hidden-navigation-link"&gt;I built a payment proof tracker for agencies fed up of “I’ve paid” messages&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="/fluffyfi3" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2898143%2F47227e3d-e6cb-4b13-adec-3a63c84c2678.png" alt="fluffyfi3 profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/fluffyfi3" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Ella
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Ella
                
              
              &lt;div id="story-author-preview-content-3376372" 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="/fluffyfi3" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2898143%2F47227e3d-e6cb-4b13-adec-3a63c84c2678.png" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Ella&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/fluffyfi3/i-built-a-payment-proof-tracker-for-agencies-fed-up-of-ive-paid-messages-2a0o" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 20&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/fluffyfi3/i-built-a-payment-proof-tracker-for-agencies-fed-up-of-ive-paid-messages-2a0o" id="article-link-3376372"&gt;
          I built a payment proof tracker for agencies fed up of “I’ve paid” messages
        &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/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/javascript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;javascript&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/fluffyfi3/i-built-a-payment-proof-tracker-for-agencies-fed-up-of-ive-paid-messages-2a0o" 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="24" height="24"&gt;
                  &lt;/span&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/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;12&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/fluffyfi3/i-built-a-payment-proof-tracker-for-agencies-fed-up-of-ive-paid-messages-2a0o#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              10&lt;span class="hidden s:inline"&gt; 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;
            2 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

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

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

&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>backend</category>
      <category>javascript</category>
    </item>
    <item>
      <title>I built a payment proof tracker for agencies fed up of “I’ve paid” messages</title>
      <dc:creator>Ella</dc:creator>
      <pubDate>Fri, 20 Mar 2026 11:34:26 +0000</pubDate>
      <link>https://dev.to/fluffyfi3/i-built-a-payment-proof-tracker-for-agencies-fed-up-of-ive-paid-messages-2a0o</link>
      <guid>https://dev.to/fluffyfi3/i-built-a-payment-proof-tracker-for-agencies-fed-up-of-ive-paid-messages-2a0o</guid>
      <description>&lt;p&gt;The Problem:&lt;/p&gt;

&lt;p&gt;Every freelancer or agency has encountered the following scenario at some point:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Client says: "I've paid"&lt;/li&gt;
&lt;li&gt;You ask for proof of payment&lt;/li&gt;
&lt;li&gt;Client sends a random screenshot&lt;/li&gt;
&lt;li&gt;You scroll through your chat logs trying to find a match for a project&lt;/li&gt;
&lt;li&gt;Your spreadsheet is outdated and useless&lt;/li&gt;
&lt;li&gt;Your team has no idea what's been paid and what has not been paid&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It gets messy real quick.&lt;/p&gt;

&lt;p&gt;And it's not just about money... it's about trust, verification, and visibility among your team members.&lt;/p&gt;

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

&lt;p&gt;I built ProofPay API. It is a lightweight backend for payment tracking and proof verification.&lt;/p&gt;

&lt;p&gt;It allows you to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Track payments from your clients&lt;/li&gt;
&lt;li&gt;Upload and verify payment proofs&lt;/li&gt;
&lt;li&gt;Manage projects and track the status of payments&lt;/li&gt;
&lt;li&gt;Provide teams with a unified overview of what is paid and what is pending&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of using chats and spreadsheets to keep track of everything, everything is now in one system.&lt;/p&gt;

&lt;h3&gt;
  
  
  What It Does
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Authentication: User Registration &amp;amp; Login, JWT-based authentication&lt;/li&gt;
&lt;li&gt;Projects: Create client projects, Add payments to projects &amp;amp; Project status tracking&lt;/li&gt;
&lt;li&gt;Payments: Record payments per project, Add proof to payments (image, file, reference), Mark payments as (pending, verified, rejected)&lt;/li&gt;
&lt;li&gt;Team / Agencies: Multiple users under a single workspace, Visibility to all team members&lt;/li&gt;
&lt;li&gt;Dashboard: Overview of (total payments, pending proofs, verified transactions)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example Flow:
&lt;/h3&gt;

&lt;p&gt;So, here is an example of how it would work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a project&lt;/li&gt;
&lt;li&gt;Add a payment&lt;/li&gt;
&lt;li&gt;Client uploads proof&lt;/li&gt;
&lt;li&gt;You verify or reject it&lt;/li&gt;
&lt;li&gt;Dashboard updates automatically&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No more guessing. No more “check WhatsApp”.&lt;/p&gt;

&lt;h3&gt;
  
  
  API Example
&lt;/h3&gt;

&lt;p&gt;Here’s what a typical request looks like:&lt;/p&gt;

&lt;p&gt;Create Payment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST /payments

Headers:
Authorization: Bearer &amp;lt;token&amp;gt;

Body:
{
  "projectId": "123",
  "amount": 50000,
  "method": "bank_transfer",
  "proofUrl": "https://..."
}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;ul&gt;
&lt;li&gt;Backend: Node.js (Express / TypeScript)&lt;/li&gt;
&lt;li&gt;Database: Postgresql&lt;/li&gt;
&lt;li&gt;Auth: JWT&lt;/li&gt;
&lt;li&gt;Docs: Postman (auto-generated)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Docs
&lt;/h3&gt;

&lt;p&gt;You can explore the full API here:&lt;br&gt;
&lt;a href="https://documenter.getpostman.com/view/43051527/2sBXijHWgD" rel="noopener noreferrer"&gt;https://documenter.getpostman.com/view/43051527/2sBXijHWgD&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why I Built It This Way
&lt;/h3&gt;

&lt;p&gt;I didn’t want to overcomplicate things.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No heavy “fintech” system&lt;/li&gt;
&lt;li&gt;No unnecessary abstractions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Just:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;clear endpoints&lt;/li&gt;
&lt;li&gt;simple flows&lt;/li&gt;
&lt;li&gt;real-world usefulness&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What This Doesn’t Do
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;It’s not a payment processor (like Stripe)&lt;/li&gt;
&lt;li&gt;It doesn’t move money&lt;/li&gt;
&lt;li&gt;It focuses purely on tracking + verification&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Is This Actually Useful?
&lt;/h3&gt;

&lt;p&gt;Honestly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For solo freelancers: helps you stay organized&lt;/li&gt;
&lt;li&gt;For agencies: offers team-wide visibility&lt;/li&gt;
&lt;li&gt;For clients: adds accountability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s not trying to replace payment processors.&lt;/p&gt;

&lt;p&gt;It does just one thing exceptionally well:&lt;/p&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;“Has this client actually paid?”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  What Next
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Notifications for payment verification&lt;/li&gt;
&lt;li&gt;Improvements for reporting and exports&lt;/li&gt;
&lt;li&gt;Frontend dashboard (maybe 👀)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Feedback I Want
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Would you actually use this in your workflow?&lt;/li&gt;
&lt;li&gt;What’s missing for real-world usage?&lt;/li&gt;
&lt;li&gt;Does the API structure make sense?&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>backend</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Fintech Companies Lose Millions From Missed Filings — So I Built This API</title>
      <dc:creator>Ella</dc:creator>
      <pubDate>Thu, 12 Mar 2026 10:57:49 +0000</pubDate>
      <link>https://dev.to/fluffyfi3/fintech-companies-lose-millions-from-missed-filings-so-i-built-this-api-51d2</link>
      <guid>https://dev.to/fluffyfi3/fintech-companies-lose-millions-from-missed-filings-so-i-built-this-api-51d2</guid>
      <description>&lt;p&gt;Industries like &lt;strong&gt;fintech, healthcare, and insurance&lt;/strong&gt; operate in heavily regulated environments. Every quarter, month, or year they must submit filings, complete audits, renew licenses, and comply with regulatory requirements.&lt;/p&gt;

&lt;p&gt;Missing a deadline can be &lt;strong&gt;extremely expensive&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A delayed filing might cost &lt;strong&gt;thousands per day in penalties&lt;/strong&gt;, not to mention reputational damage and the legal consequences a company may face.&lt;/p&gt;

&lt;p&gt;Despite this, many compliance teams still track obligations using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;spreadsheets
&lt;/li&gt;
&lt;li&gt;emails
&lt;/li&gt;
&lt;li&gt;calendar reminders
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That got me thinking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What if compliance deadlines could be analyzed automatically through an API?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So I built a &lt;strong&gt;Regulatory Compliance Deadline Tracker API&lt;/strong&gt; using &lt;strong&gt;Node.js and Express&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This API accepts compliance obligations, calculates the remaining time before deadlines, categorizes risk levels, and flags urgent items — all in a single request.&lt;/p&gt;




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

&lt;p&gt;Industries like &lt;strong&gt;finance, fintech, healthcare, and insurance&lt;/strong&gt; deal with dozens (sometimes hundreds) of regulatory obligations.&lt;/p&gt;

&lt;p&gt;Examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quarterly financial filings
&lt;/li&gt;
&lt;li&gt;Data protection audits
&lt;/li&gt;
&lt;li&gt;Regulatory reports
&lt;/li&gt;
&lt;li&gt;License renewals
&lt;/li&gt;
&lt;li&gt;Compliance certifications
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tracking these manually can lead to problems such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;missed regulatory filings
&lt;/li&gt;
&lt;li&gt;late compliance submissions
&lt;/li&gt;
&lt;li&gt;expired licenses
&lt;/li&gt;
&lt;li&gt;unexpected financial penalties
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A small automation layer could dramatically reduce these risks.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Idea
&lt;/h2&gt;

&lt;p&gt;The goal of the API is simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Accept a list of compliance obligations
&lt;/li&gt;
&lt;li&gt;Calculate how many days remain until each deadline
&lt;/li&gt;
&lt;li&gt;Categorize the risk level
&lt;/li&gt;
&lt;li&gt;Identify urgent items
&lt;/li&gt;
&lt;li&gt;Estimate penalty exposure if deadlines are missed
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Instead of storing data in a database, the API works &lt;strong&gt;entirely from the request payload&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This keeps the API lightweight and makes it easy to integrate into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;dashboards
&lt;/li&gt;
&lt;li&gt;internal tools
&lt;/li&gt;
&lt;li&gt;automation systems
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  API Endpoint Design
&lt;/h2&gt;

&lt;p&gt;The API exposes a single endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST /analyze-deadlines
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;ul&gt;
&lt;li&gt;a company name
&lt;/li&gt;
&lt;li&gt;the current date
&lt;/li&gt;
&lt;li&gt;a list of regulatory obligations
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These fields are required. If they are missing, the API returns a &lt;strong&gt;400 Bad Request&lt;/strong&gt; response.&lt;/p&gt;




&lt;h2&gt;
  
  
  Example Request
&lt;/h2&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;"company"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ABC Corp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"today"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-03-01"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"obligations"&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;"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;"Quarterly Financial Filing"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"dueDate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-03-15"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"penaltyPerDay"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5000&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;"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;"Data Protection Audit"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"dueDate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-03-05"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"penaltyPerDay"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20000&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;h2&gt;
  
  
  Example Response (As of 12/03/2026)
&lt;/h2&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;"company"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ABC Corp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"analysis"&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;"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;"Quarterly Financial Filing"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"daysRemaining"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"riskLevel"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"HIGH"&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;"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;"Data Protection Audit"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"daysRemaining"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"riskLevel"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"CRITICAL"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"penaltyExposure"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;140000&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;"totalPenaltyExposureIfLateToday"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;140000&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;The response returns a structured analysis showing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the &lt;strong&gt;number of days remaining&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;risk level of each obligation&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;overall penalty exposure&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Example API Call in Postman
&lt;/h2&gt;

&lt;p&gt;Below is the API running in Postman.&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%2Fm7wo687nc4683omuau9x.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%2Fm7wo687nc4683omuau9x.png" alt="API Running in Postman"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How the Risk Calculation Works
&lt;/h2&gt;

&lt;p&gt;The API evaluates each compliance obligation and calculates how many days remain before the deadline.&lt;/p&gt;

&lt;p&gt;The risk level is determined using a simple classification system.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Days Remaining&lt;/th&gt;
&lt;th&gt;Risk Level&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;lt; 0 days&lt;/td&gt;
&lt;td&gt;CRITICAL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1 – 9 days&lt;/td&gt;
&lt;td&gt;HIGH&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10 – 30 days&lt;/td&gt;
&lt;td&gt;MEDIUM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;gt; 30 days&lt;/td&gt;
&lt;td&gt;LOW&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This allows compliance teams to quickly identify urgent filings.&lt;/p&gt;




&lt;h2&gt;
  
  
  Implementation with Node.js and Express
&lt;/h2&gt;

&lt;p&gt;The API was built using a simple &lt;strong&gt;Node.js + Express backend&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Key concepts implemented in this project include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;date parsing&lt;/li&gt;
&lt;li&gt;mathematical calculations&lt;/li&gt;
&lt;li&gt;conditional logic&lt;/li&gt;
&lt;li&gt;data transformation&lt;/li&gt;
&lt;li&gt;structured JSON responses&lt;/li&gt;
&lt;li&gt;API error handling&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Potential Real-World Use Cases
&lt;/h2&gt;

&lt;p&gt;This type of API could power several real systems.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;h3&gt;
  
  
  Compliance Dashboards
&lt;/h3&gt;

&lt;p&gt;Internal tools that monitor regulatory deadlines.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3&gt;
  
  
  Fintech Risk Monitoring
&lt;/h3&gt;

&lt;p&gt;Automatically identify high-risk regulatory obligations.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3&gt;
  
  
  Compliance Automation Platforms
&lt;/h3&gt;

&lt;p&gt;Trigger alerts or workflows when deadlines approach.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3&gt;
  
  
  Regulatory Alert Systems
&lt;/h3&gt;

&lt;p&gt;Send notifications when filings become urgent.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Why I Built This
&lt;/h2&gt;

&lt;p&gt;Many developer tutorials focus on simple projects like &lt;strong&gt;todo list APIs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;While those are useful for learning, I wanted to build something closer to &lt;strong&gt;real enterprise software problems&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Compliance automation is an area where small tools can have &lt;strong&gt;massive financial impact&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Even a simple API like this could help teams identify risk before penalties occur.&lt;/p&gt;




&lt;h2&gt;
  
  
  Future Improvements
&lt;/h2&gt;

&lt;p&gt;Some potential improvements include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;automatic penalty calculations for overdue filings
&lt;/li&gt;
&lt;li&gt;email or Slack alerts for urgent deadlines
&lt;/li&gt;
&lt;li&gt;recurring regulatory obligations
&lt;/li&gt;
&lt;li&gt;integration with compliance management platforms
&lt;/li&gt;
&lt;li&gt;persistent storage using a database
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  GitHub Repository
&lt;/h2&gt;

&lt;p&gt;If you'd like to explore the code or test the API yourself, the full project is available on GitHub.&lt;/p&gt;

&lt;p&gt;You can find it here: &lt;a href="https://github.com/git-ellea/rcdt_api" rel="noopener noreferrer"&gt;GitHub Repository Link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feel free to clone the project, experiment with the API, or suggest improvements. &lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Regulatory compliance might not sound glamorous, but it is a &lt;strong&gt;huge operational challenge&lt;/strong&gt; for regulated industries.&lt;/p&gt;

&lt;p&gt;Even small tools that improve visibility around deadlines can help companies &lt;strong&gt;avoid costly penalties and reduce compliance risk&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;If you found this interesting, feel free to check out my previous posts and consider following me for more backend and API development content:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/fluffyfi3/i-built-a-procurement-quotation-comparator-api-nodejs-typescript-3khb"&gt;I Built a Procurement Quotation Comparator API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/fluffyfi3/i-built-a-command-center-for-my-job-hunt-because-spreadsheets-are-where-dreams-go-to-die-2i53"&gt;I Built a "Command Center" for My Job Hunt Because Spreadsheets Are Where Dreams Go to Die&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>node</category>
      <category>api</category>
      <category>backend</category>
      <category>javascript</category>
    </item>
    <item>
      <title>I Built a Procurement Quotation Comparator API (Node.js + TypeScript)</title>
      <dc:creator>Ella</dc:creator>
      <pubDate>Fri, 06 Mar 2026 12:18:53 +0000</pubDate>
      <link>https://dev.to/fluffyfi3/i-built-a-procurement-quotation-comparator-api-nodejs-typescript-3khb</link>
      <guid>https://dev.to/fluffyfi3/i-built-a-procurement-quotation-comparator-api-nodejs-typescript-3khb</guid>
      <description>&lt;p&gt;Liquid syntax error: 'card' tag was never closed&lt;/p&gt;
</description>
      <category>node</category>
      <category>typescript</category>
      <category>backend</category>
      <category>api</category>
    </item>
    <item>
      <title>Why I’m building a 3-Tier Architecture (and why 2-tier aren't enough)</title>
      <dc:creator>Ella</dc:creator>
      <pubDate>Tue, 17 Feb 2026 10:46:06 +0000</pubDate>
      <link>https://dev.to/fluffyfi3/why-im-building-a-3-tier-architecture-and-why-2-tier-arent-enough-3oe6</link>
      <guid>https://dev.to/fluffyfi3/why-im-building-a-3-tier-architecture-and-why-2-tier-arent-enough-3oe6</guid>
      <description>&lt;p&gt;I’ve lately been trying to drive deeper into my skills and realized something: it’s very easy to build a 2-tier application "Todo List," but if you want to build something that actually survives the real world, you have to understand the "why" behind the layers.&lt;/p&gt;

&lt;p&gt;This is me learning in public, and here is what I’m mastering this week:&lt;/p&gt;

&lt;p&gt;I’ve started practicing this more because it’s more professional. It stops me from letting my Frontend talk directly to my Database, which is basically a security nightmare! Using a Backend middleman (Node.js/Express) to handle the logic keeps the data safe and the architecture clean.&lt;/p&gt;

&lt;p&gt;Second, I used to think a domain name was just a label. Now I see it as a complex routing system using A Records to point to global servers. Understanding how it asks your computer, goes to the Top Level Domain, and finally finds your IP has been eye-opening. It definitely explains why some sites take a bit to load&lt;/p&gt;

&lt;p&gt;Third, there’s something wild about knowing that anytime I send a message, it is broken into tiny chunks and reassembled perfectly using TCP when it reaches the receiver's IP address.&lt;/p&gt;

&lt;p&gt;Honestly, recalling the DNS process was not easy. It’s a lot of steps! I’ve been using AI to breakdown the parts that didn't click, and it has been a total game-changer for my learning speed.&lt;/p&gt;

&lt;p&gt;My Goal: I don't just want to "code," I want to understand the systems that make the code run.&lt;/p&gt;

&lt;p&gt;To the seniors in the industry:&lt;br&gt;
What is the one networking concept you wish you had learned sooner in your career, that you still use in your day-to-day runs?&lt;/p&gt;

&lt;p&gt;Let’s chat in the comments ↆↆↆ&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>webdev</category>
      <category>buildinpublic</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I Built a "Command Center" for My Job Hunt Because Spreadsheets Are Where Dreams Go to Die</title>
      <dc:creator>Ella</dc:creator>
      <pubDate>Wed, 11 Feb 2026 11:55:01 +0000</pubDate>
      <link>https://dev.to/fluffyfi3/i-built-a-command-center-for-my-job-hunt-because-spreadsheets-are-where-dreams-go-to-die-2i53</link>
      <guid>https://dev.to/fluffyfi3/i-built-a-command-center-for-my-job-hunt-because-spreadsheets-are-where-dreams-go-to-die-2i53</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;Jhella&lt;/strong&gt;, a terminal-based "Command Center" for developers who are officially done with messy job-hunt spreadsheets.&lt;/p&gt;

&lt;p&gt;We’ve all been there: 47 LinkedIn tabs open, a flooded inbox, and a spreadsheet named &lt;code&gt;Job_Hunt_Final_v3_REAL_THIS_TIME.xlsx&lt;/code&gt; that is a total disaster by week two. I got tired of tracking my high-tech career in a low-tech table, so I built a tool that lives where I do: the terminal. Jhella lets me log applications, auto-convert salary shorthand (like typing &lt;code&gt;$120k&lt;/code&gt; and having it actually save as &lt;code&gt;$120,000&lt;/code&gt;), and get visual ⚠️ alerts if I haven't followed up on an application in 7 days.&lt;/p&gt;

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

&lt;p&gt;You can try Jhella right now without even installing it:&lt;br&gt;
&lt;code&gt;npx jobhunt-ella-cli&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;NPM Package:&lt;/strong&gt; &lt;a href="https://www.npmjs.com/package/jobhunt-ella-cli" rel="noopener noreferrer"&gt;jobhunt-ella-cli&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/git-ellea/jobhunt-cli" rel="noopener noreferrer"&gt;Jhella Source Code&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📸 Screenshots
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tr&gt;
    &lt;td width="50%"&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%2Fgv9h3zbhhwhjktjhpl4u.png" alt="Jhella Dashboard" width="520" height="542"&gt;
      &lt;br&gt;
      &lt;em&gt;The view I check every morning to make sure I'm not getting ghosted.&lt;/em&gt;
    &lt;/td&gt;
    &lt;td width="50%"&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%2Fveyxryeve08lhl61c1ti.png" alt="Interactive Wizard" width="395" height="126"&gt;
      &lt;br&gt;
      &lt;em&gt;The step-by-step way I add new job leads.&lt;/em&gt;
    &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td width="50%"&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%2Fs0qfe0xitu9c222b9ift.png" alt="Salary Parsing" width="547" height="316"&gt;
      &lt;br&gt;
      &lt;em&gt;I type $150k and Jhella actually knows what I mean.&lt;/em&gt;
    &lt;/td&gt;
    &lt;td width="50%"&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%2Fypvit1rmq5hfe8xfgumj.png" alt="Pipeline Insights" width="556" height="381"&gt;
      &lt;br&gt;
      &lt;em&gt;A little motivation, seeing the 'Potential Max' salary helps on the tough days.&lt;/em&gt;
    &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  My Experience with GitHub Copilot CLI
&lt;/h2&gt;

&lt;p&gt;GitHub Copilot CLI was basically my pair programmer for this whole build. Here’s how it actually helped:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;No more Tab-Switching:&lt;/strong&gt; I used &lt;code&gt;gh copilot explain&lt;/code&gt; whenever I got confused by &lt;code&gt;commander.js&lt;/code&gt; or &lt;code&gt;inquirer&lt;/code&gt;. It saved me from constant context-switching between my code and documentation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regex without the Headache:&lt;/strong&gt; Honestly, I probably would have spent hours fighting with Regex patterns for the salary parser if I hadn't just asked Copilot CLI to help me generate the logic for currency shorthand. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fixing my NPM drama:&lt;/strong&gt; When I hit a &lt;code&gt;403 Forbidden&lt;/code&gt; error trying to publish my first package, I used the CLI to troubleshoot my 2FA and auth settings without ever leaving the terminal.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Instead of getting stuck on CLI boilerplate, Copilot CLI let me focus on making Jhella actually useful for my job hunt.&lt;/p&gt;




&lt;h3&gt;
  
  
  ✨ Support &amp;amp; Connect
&lt;/h3&gt;

&lt;p&gt;If Jhella helps you stay organized (or you just want to support a fellow dev on the hunt), I’d love your support:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Star the Repo:&lt;/strong&gt; &lt;a href="https://github.com/git-ellea/jobhunt-cli" rel="noopener noreferrer"&gt;Jhella on GitHub&lt;/a&gt; ⭐&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Follow me on DEV:&lt;/strong&gt; &lt;a href="https://dev.to/git-ellea"&gt;@git-ellea&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Try the Tool:&lt;/strong&gt; &lt;code&gt;npx jobhunt-ella-cli&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Good luck to everyone else in the challenge!&lt;/p&gt;

&lt;h6&gt;
  
  
  githubcopilotclichallenge #productivity #typescript #career
&lt;/h6&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
    <item>
      <title>Scaling Intelligence: How I Built a 1,500-Item AI Shopping Assistant with Next.js &amp; Algolia</title>
      <dc:creator>Ella</dc:creator>
      <pubDate>Sun, 08 Feb 2026 07:37:09 +0000</pubDate>
      <link>https://dev.to/fluffyfi3/scaling-intelligence-how-i-built-a-1500-item-ai-shopping-assistant-with-nextjs-algolia-37gh</link>
      <guid>https://dev.to/fluffyfi3/scaling-intelligence-how-i-built-a-1500-item-ai-shopping-assistant-with-nextjs-algolia-37gh</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/algolia"&gt;Algolia Agent Studio Challenge&lt;/a&gt;: Consumer-Facing Conversational Experiences&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;We've all been there: scrolling through 50 pages of products, filtering, unfiltering, and still not finding that &lt;em&gt;one&lt;/em&gt; thing that fits our budget. It’s exhausting. &lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;Inventory Pro&lt;/strong&gt; to kill "search fatigue" once and for all. It’s an AI-driven shopping assistant designed to turn a massive 1,500-item catalog into a simple, human conversation. Instead of clicking endless buttons, users just ask: &lt;em&gt;"I have ₦20,000, what accessories can I afford in the Lekki warehouse?"&lt;/em&gt; The result? A grounded, dialogue-based experience where the AI doesn't just "guess", it retrieves real-time data to give accurate, reliable shopping advice.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Live App:&lt;/strong&gt; &lt;a href="https://inventory-pro-assistant.vercel.app/" rel="noopener noreferrer"&gt;Inventory Pro&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Highlights
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&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%2Fevtiwl6snsm2eymszuz6.jpeg" alt="Interface" width="241" height="531"&gt;&lt;/th&gt;
&lt;th&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%2F41ianvdtp47sc861zv2d.jpeg" alt="Responses" width="240" height="517"&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;The clean, intuitive interface designed for fast communication.&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Context-aware responses that understand price, location, and availability.&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Intelligent Comparison&lt;/strong&gt;: No more switching tabs. The agent generates &lt;strong&gt;Markdown tables&lt;/strong&gt; on the fly so you can compare prices and specs side-by-side.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq9e84wplnz5buj0ehlnm.jpeg" 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%2Fq9e84wplnz5buj0ehlnm.jpeg" alt="Visual alerts that keep the user informed." width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Out-of-Stock Alerts&lt;/strong&gt;: Using custom &lt;strong&gt;Orange Highlights&lt;/strong&gt;, the agent warns you immediately if an item is unavailable, even providing the exact date it will be back. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise Scale&lt;/strong&gt;: I scaled the backend to &lt;strong&gt;1,500 diverse products&lt;/strong&gt; to ensure the AI could handle real-world inventory pressure without breaking a sweat.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How I Used Algolia Agent Studio
&lt;/h2&gt;

&lt;p&gt;I treated Algolia Agent Studio as the &lt;strong&gt;"Truth Engine"&lt;/strong&gt; for my Google Gemini model. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Index&lt;/strong&gt;: I indexed 1,500 records including &lt;code&gt;price&lt;/code&gt;, &lt;code&gt;stock_level&lt;/code&gt;, &lt;code&gt;warehouse_location&lt;/code&gt;, &lt;code&gt;category&lt;/code&gt;, and &lt;code&gt;restock_date&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retrieval-Augmented Dialogue&lt;/strong&gt;: By using Algolia’s retrieval, I eliminated AI "hallucinations." The assistant only talks about what is actually in the database.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompt Engineering&lt;/strong&gt;: I engineered the system prompts to act as a "Pro-Active Shop Manager." I specifically instructed the agent to monitor stock levels and proactively warn users if an item is low (under 5 units) using custom formatting.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Fast Retrieval Matters
&lt;/h2&gt;

&lt;p&gt;When you're dealing with 1,500 products, a standard LLM is like a librarian trying to memorize the entire building, it’s slow and prone to mistakes. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Algolia is the digital catalog.&lt;/strong&gt; It filters thousands of items in milliseconds. Even on a Free Tier plan, where I encountered some rate-limit latency, Algolia ensured that once the "thinking" was done, the data returned was 100% accurate. This speed transforms the experience from a "clunky chatbot" into a reliable, high-performance shopping tool.&lt;/p&gt;




&lt;h3&gt;
  
  
  🙌 Let's Connect!
&lt;/h3&gt;

&lt;p&gt;Building this was a journey of debugging and discovery (especially getting those 1,500 items to play nice!). If you’ve ever struggled with AI rate limits or scaling data, I’d love to hear your story in the comments!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you found this cool, drop a ❤️ and follow for more!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>algoliachallenge</category>
      <category>ai</category>
      <category>agents</category>
    </item>
  </channel>
</rss>
