<?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: Ujjwal Sharma</title>
    <description>The latest articles on DEV Community by Ujjwal Sharma (@stackbyujjwal).</description>
    <link>https://dev.to/stackbyujjwal</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%2F3909588%2Fec4c7fa3-cf55-4b77-9f2a-2e37c8dd23ad.png</url>
      <title>DEV Community: Ujjwal Sharma</title>
      <link>https://dev.to/stackbyujjwal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/stackbyujjwal"/>
    <language>en</language>
    <item>
      <title>Stop Using Firebase for Everything: Why I Switched to PostgreSQL (Supabase)</title>
      <dc:creator>Ujjwal Sharma</dc:creator>
      <pubDate>Sat, 02 May 2026 21:34:14 +0000</pubDate>
      <link>https://dev.to/stackbyujjwal/stop-using-firebase-for-everything-why-i-switched-to-postgresql-supabase-53ci</link>
      <guid>https://dev.to/stackbyujjwal/stop-using-firebase-for-everything-why-i-switched-to-postgresql-supabase-53ci</guid>
      <description>&lt;p&gt;&lt;a href="https://dev.tourl"&gt;&lt;/a&gt;&lt;strong&gt;1. The Hook&lt;/strong&gt;&lt;br&gt;
We’ve all been there. You start a new project, you want to move fast, so you plug in Firebase. It feels like magic at first. But what happens 6 months down the line when your app scales, your data becomes relational, and suddenly you are paying a premium just to run complex queries? You hit the NoSQL wall.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The Problem&lt;/strong&gt;&lt;br&gt;
The biggest trap modern developers fall into is treating a NoSQL document store (like Firebase/Firestore) as the ultimate solution for every single app.&lt;br&gt;
Here is where the pain starts:&lt;br&gt;
Vendor Lock-in: Moving away from Firebase once your app is live is a nightmare.&lt;br&gt;
Complex Queries: Need to filter data based on multiple nested conditions? Good luck writing that without fetching half your database.&lt;br&gt;
Pricing Surprises: It's free until you accidentally run a bad query in an infinite loop and wake up to a massive bill.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The 'StackByUjjwal' Solution&lt;/strong&gt;&lt;br&gt;
It's time to respect Relational Databases again. If you love the ease of Firebase but need the power of PostgreSQL, the industry is rapidly shifting towards tools like Supabase (the open-source Firebase alternative).&lt;br&gt;
Here is how beautifully simple it is to fetch relational data using Supabase in your JavaScript app, without losing the power of SQL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// 📁 db-service.js&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createClient&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@supabase/supabase-js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="c1"&gt;// Initialize the PostgreSQL connection via Supabase&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;supabaseUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;[https://your-project-id.supabase.co](https://your-project-id.supabase.co)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;supabaseKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_ANON_KEY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;supabase&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;supabaseUrl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;supabaseKey&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;// Fetching Relational Data&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;getActiveUsersWithProfiles&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="p"&gt;}&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;supabase&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`
        id, 
        username, 
        profiles (avatar_url, bio)
      `&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;eq&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;status&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;active&lt;/span&gt;&lt;span class="dl"&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;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Database Query Failed: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;4. The Link Dump&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Written by Ujjwal Sharma, Founder of &lt;a class="mentioned-user" href="https://dev.to/stackbyujjwal"&gt;@stackbyujjwal&lt;/a&gt;. Passionate about Full-Stack Web Development, building scalable architectures, and sharing code that makes sense.&lt;br&gt;
Let's connect and build something awesome:&lt;br&gt;
🔗 Linktree: &lt;a href="https://linktr.ee/stackbyujjwal" rel="noopener noreferrer"&gt;https://linktr.ee/stackbyujjwal&lt;/a&gt;&lt;br&gt;
🐙 GitHub: &lt;a href="https://github.com/stackbyujjwal" rel="noopener noreferrer"&gt;https://github.com/stackbyujjwal&lt;/a&gt;&lt;br&gt;
📺 YouTube: &lt;a href="https://youtube.com/@stackbyujjwal?si=mRRyKaWoZ-xbXQWp" rel="noopener noreferrer"&gt;https://youtube.com/@stackbyujjwal?si=mRRyKaWoZ-xbXQWp&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>database</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
