<?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: Syed Sakhi Lal Akram</title>
    <description>The latest articles on DEV Community by Syed Sakhi Lal Akram (@syedsakhiakram66).</description>
    <link>https://dev.to/syedsakhiakram66</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%2F3489024%2F43babba5-1fe9-4783-85a4-3ee16c719c02.png</url>
      <title>DEV Community: Syed Sakhi Lal Akram</title>
      <link>https://dev.to/syedsakhiakram66</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/syedsakhiakram66"/>
    <language>en</language>
    <item>
      <title>Jame Gam</title>
      <dc:creator>Syed Sakhi Lal Akram</dc:creator>
      <pubDate>Sat, 08 Aug 2026 07:40:02 +0000</pubDate>
      <link>https://dev.to/syedsakhiakram66/jame-gam-54da</link>
      <guid>https://dev.to/syedsakhiakram66/jame-gam-54da</guid>
      <description>&lt;h1&gt;
  
  
  Jame Gam
&lt;/h1&gt;

&lt;p&gt;Sooo, I was viewing the Hack Club programs page and I came across a page called Jame Gam. I checked it out, but I always found making a game overwhelming. So I was pretty much convinced I wasn’t going to participate, but after viewing the page properly and reading the FAQ, I saw a section that said “How do I get started?” and it had a few resources. I made up my mind that it was time to get my first game released.&lt;/p&gt;

&lt;p&gt;I saw that we had 4 days (wait for the plot twist). I was doing my set of 100 push-ups (I’m not flexing, and also I only do push-ups on the weekend). I was trying to brainstorm an idea, and I really wanted my first game to be like Super Mario. I mean, like jumping on enemies and killing them. Just then, a random idea spawned in my head: &lt;strong&gt;DIAPER BABY&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Now, the idea was deeply related to a short video I watched of two babies arguing with each other:&lt;/p&gt;

&lt;p&gt;Baby 1: Babies wear diapers and I am not a baby.&lt;br&gt;
Baby 2: But you are wearing a diaper.&lt;/p&gt;

&lt;p&gt;That’s what I watched. I haven’t found the exact video, but that was the spark. Also, I don’t know why, but I remember the words “diaper baby” being used in a TV show or movie I watched. I think it might have been &lt;em&gt;Young Sheldon&lt;/em&gt;, and maybe it was Missy who said it. I don’t actually know.&lt;/p&gt;

&lt;p&gt;Then, in my mind, I was planning the game, but nothing was coming.&lt;/p&gt;

&lt;p&gt;I went to YouTube and watched a tutorial video by Coco Code. He introduced me to level design and Pixel Adventure (a free asset for creating levels). I spent a few hours getting the level set up. It looked pretty good.&lt;/p&gt;

&lt;p&gt;I went to Piskel (a place to draw sprites), and I drew a really weird sprite. I knew it wasn’t going to work, so I searched on YouTube again and came across a golden video from Juniper Dev. She quickly explained all the important parts of pixel art, and then I got started. I made it in Piskel, and it was actually small.&lt;/p&gt;

&lt;p&gt;Then I had to go play football and be Ronaldo, jk again. I shut down the laptop and Piskel deleted my frickin’ design. I was really sad, and by then only one day was left for the game jam to finish, and I was really stressed because I hadn’t gotten much set up.&lt;/p&gt;

&lt;p&gt;I sat down, opened Slack, and read a message that the Game Jam begins in a few hours for the theme to be released. I was like, “Wasn’t it going to finish?” So when I asked, I was truly shocked. They said it was going to begin and our game had to follow a theme. I got scared that maybe my game wouldn’t match the theme, and I was hellbent on making Diaper Baby.&lt;/p&gt;

&lt;p&gt;![the chat i had with the people abt the theme]&lt;/p&gt;

&lt;p&gt;&lt;a href="https://app.notion.com" rel="noopener noreferrer"&gt;https://app.notion.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5kesing7ub7hq9og7822.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5kesing7ub7hq9og7822.png" alt="my first sprite design" width="800" height="1600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm12b5kn1ir331neaebyf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm12b5kn1ir331neaebyf.png" alt="my second sprite design" width="800" height="378"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyjpltf874svcd21gccbz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyjpltf874svcd21gccbz.png" alt="final sprite design" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Small thing that I forgot to mention:&lt;br&gt;
I was sharing my sprites and asking for feedback, and I would like to share some of it here.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2x67um72nevawocisgep.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2x67um72nevawocisgep.png" alt=" " width="700" height="943"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu08eryzq5a3agwdcgz4m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu08eryzq5a3agwdcgz4m.png" alt=" " width="653" height="920"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When I was making my second sprite, I asked for a little help with the shadow. Here is the chat.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9ssxjncg5l5x93dvqjo4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9ssxjncg5l5x93dvqjo4.png" alt=" " width="636" height="608"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I got to completing my level design and getting my sprite walking, and then wham, I was stuck again. My sprite had a few scenes, but I didn’t know how to make a 32×32 sprite walk. I mean, the sprite was tiny, so how was I going to make it walk? It made no sense to me. I asked a few more people and they gave suggestions. I came up with the idea of just playing the animation of my sprite moving their hands, which kind of looks like dancing. BUT IT IS NOT A DANCING BABY, IT IS A DIAPER BABY.&lt;/p&gt;

&lt;p&gt;Anyway, I set the sprite animation to autoplay throughout the entire game. It was kind of cool, and I was quite happy. Then the bad news came: I didn’t want to work anymore. It was Saturday, which meant we had 2 days left to submit. I was procrastinating so badly, and my game looked like this ⬇&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs60u5kqpt1n8b15u4h25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs60u5kqpt1n8b15u4h25.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwrcy2r0yi4b5fqzxmjdi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwrcy2r0yi4b5fqzxmjdi.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It had rained lightly, and there was no electricity for a lot of hours (very common in Pakistan), and most of my family was going to some kind of party. So I was at home with two of my brothers and I chilled. I chilled and procrastinated, and I procrastinated really badly. I doomscrolled and did everything I should not have done. I even went to sleep even though I had decided to stay awake to build the rest of the game.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Two things I didn’t realize:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The game had a lot of work&lt;/li&gt;
&lt;li&gt;I was relying on tomorrow without thinking about what life had in stock for me&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I had slept after 12:30, not very late. When I woke up, there was no electricity. I was under a lot of stress because 10:00 pm was the submission. I was already down to 12 hours and had nothing really set up. No enemies, no score, no timer.&lt;/p&gt;

&lt;p&gt;Btw, the theme was &lt;strong&gt;Countdown&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When the electricity came back, I had nearly 8 hours. I started working non-stop, and I also didn’t want to miss any of the features I had planned. So I went forward and expanded my level, added a camera view, everything to improve the feel of the game. I know I’m talking like a pro, but it took me a long time to figure these things out.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fde3ojbbw46t0s8vqtca2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fde3ojbbw46t0s8vqtca2.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Well, I was pretty happy with everything. I had to get my enemies set up too, the old Mario style one, where if you jump on the enemy it dies, but if you touch the side, you die.&lt;/p&gt;

&lt;p&gt;I tried a few math ways, where we were calculating a lot of things to determine if the baby was on the head of the enemy (fishies). I got into Piskel and rushed to make a random sprite that looked like a fish, so I called it a fishi. I then figured out a simpler way to use two colliders: one on the side and one on the head of the fishi. Now, if you jumped on the head collider, the code would delete the fishi, and if you touched the side, the code would delete you.&lt;/p&gt;

&lt;p&gt;I went on to build a main menu scene. It was simple, with the font I got from Augie. You could control Diaper Baby from there too, and there was one Start button. The scene looked like this ⬇  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc8ll5kojygmtx7qyhxlm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc8ll5kojygmtx7qyhxlm.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;pretty cool huh.&lt;/p&gt;

&lt;p&gt;I got the background from the Kenny Pack, and then I used Pixel Adventure’s tiles to match the theme. It still looked really cool, according to me.&lt;/p&gt;

&lt;p&gt;The game’s controls were slippery because I did it on purpose, and the game was getting too simple.&lt;/p&gt;

&lt;p&gt;I connected all the screens.&lt;/p&gt;

&lt;p&gt;Now, a big problem occurred. The weather was turning like it was going to rain really heavily. I had already left my laptop at the center (somewhere where I teach) with someone. I picked up the phone and Adan came with me. We reached there only to notice that my battery was exactly 90%, and there was no way to charge it. We knew that because it was going to rain, there was no chance for the electricity to come back on. Now, when I say the electricity went, it doesn’t mean everything goes dark; rather, you can’t charge anything (at least for me). SOOO, I locked in and tried to set up the score.&lt;/p&gt;

&lt;p&gt;The only problem was that it was stuck in one corner. I tried fixing the anchor. NOTHING WORKED! TIME WAS FINISHING AND SO WAS MY BATTERY! I didn’t manage to set it up at first, and I kept clicking the same things. Then it kicked me out of the game, and I spent another 15-20 minutes trying to put the score back in.&lt;/p&gt;

&lt;p&gt;I also faced a lot of issues trying to get the stupid timer set up. I got the timer to load, then the label was going somewhere else and the background was going somewhere else. I used a few anchors again and got a ton of help from a YouTube video (don’t remember it). Everything was working. The timer was still off because I guess that was the best I could do in so little time. The timer was set to 15 seconds.&lt;/p&gt;

&lt;p&gt;My battery was going to finish, and then all of a sudden, the electricity was working. I went on the roof and noticed that the weather had completely changed. I guess God was on my side. I took a few pictures, everything looked yellow. Here is a picture.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fik0i7nzt7lom743b0a1r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fik0i7nzt7lom743b0a1r.png" alt="i am aware that my finger got in the way." width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I went forward to getting the score set up. I had very little time. I think it was 8:00 pm and 2 hours were left for submission. I was speedrunning. I was really angry because I always take time to figure out bugs, but this time I was rushing. I had already decided that the score would increase with time, like the Chrome dino game.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwb5the75lxeo7vggyozk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwb5the75lxeo7vggyozk.png" alt="literally just searched on google “chrome dino game meme”" width="447" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It wasn’t a very big issue to set that up. I was increasing +3 score every second, but it looked weird, so I did (I think) +1 every 0.3s, something like that. It looked normal after that. I planned to use the same method and increment the score when we killed a fishi, so I made that +25.&lt;/p&gt;

&lt;p&gt;I also added a “try again” scene that said something. You should read it yourself.&lt;/p&gt;

&lt;p&gt;I forgot to mention a big problem: I had issues connecting elements to scenes and scripts. It took a year to figure out. I had nearly 1 hour left, and Adan (who happens to be my younger brother) was like, “Sakhi bhai, how much time? I am very hungry.” I didn’t tell him to come, but now it had been nearly 4 hours since he was sitting with me. I didn’t have time to go or tell him to buy something from the shop. I ONLY WANTED TO GET DIAPER BABY SUBMITTED! Just kidding. I was trying to finish everything fast because we were both really hungry.&lt;/p&gt;

&lt;p&gt;I had the score increasing, and the final task was to let the enemy sprite regenerate after some time after being killed so people could get more score. It took a few moments (and research) to figure out that &lt;code&gt;queue.free()&lt;/code&gt; deletes a sprite completely. I used a system where, on touching the head collider, instead of deleting the enemy, it would turn it off and make it disappear for some time, and then it would show again.&lt;/p&gt;

&lt;p&gt;Now, because everything was set up, I got ready to submit. I faced issues exporting my project because I didn’t know that I had to install the libraries before exporting. This was very time-consuming. I was very, very angry. In the end, some kind people guided me. I submitted.&lt;/p&gt;

&lt;p&gt;Then I saw that 6 minutes were left, and I searched for my project, but it wasn’t showing up, which made me feel like my project wasn’t submitted. The rules were that once the submission time was over there would be no exceptions. I completely freaked out. I kept looking, and in the end, I saw on my user page that my project was submitted.&lt;/p&gt;

&lt;p&gt;Long breath. The project was over. Me and Adan came home, and I was making duck sounds and even speaking in duck sounds. I do these kinds of things with people I’m close with. Adan is 4+ years younger than me, but still, it was quite fun coming home. I also noticed there was a one-hour extension. I was actually quite tired, so I ate my dinner.&lt;/p&gt;

&lt;p&gt;After that, I shared my rate link with a lot of people. I got nearly 30 ratings and 28 comments. I stayed up. It was not allowed to do rate-for-rate in the general channel, and I was teasing the mod, so I got banned. Hehe. Really cool. After one hour I was allowed in again. I talked to a lot of people. I talked about the game jam the entire night, until nearly 3:00 am. WOW!&lt;/p&gt;

&lt;p&gt;I also let some people I guide play the game. Funny story: most of them liked it.&lt;/p&gt;

&lt;p&gt;I will ask everyone who rated and played if I can list their names.&lt;/p&gt;

&lt;p&gt;**Moral: Never procrastinate. It hurts.&lt;/p&gt;

&lt;p&gt;Stayed up to write this too, now I’m going to pray Fajr.**&lt;/p&gt;

&lt;p&gt;Dooo Jame Gam, also psst, it is a secret. I might make a youtube video about this&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>godot</category>
      <category>game</category>
      <category>programming</category>
    </item>
    <item>
      <title>7 Best Authentication Frameworks for 2025 (Free &amp; Paid Compared)</title>
      <dc:creator>Syed Sakhi Lal Akram</dc:creator>
      <pubDate>Tue, 09 Sep 2025 08:19:15 +0000</pubDate>
      <link>https://dev.to/syedsakhiakram66/7-best-authentication-frameworks-for-2025-free-paid-compared-159g</link>
      <guid>https://dev.to/syedsakhiakram66/7-best-authentication-frameworks-for-2025-free-paid-compared-159g</guid>
      <description>&lt;p&gt;🔥 &lt;strong&gt;I just built 3 production apps with different auth approaches. Here's what actually works.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While completing Full Stack Open and building real apps with JWT, Clerk, and Appwrite, I discovered most "best framework" articles are written by people who've never shipped code.&lt;/p&gt;

&lt;p&gt;This isn't another theory-heavy comparison. This is what happens when you actually implement authentication in 2025 → real setup times, actual gotchas, honest pricing breakdowns, and the frameworks that don't break at 2 AM.&lt;/p&gt;

&lt;p&gt;Here are the 7 authentication solutions that survived real-world testing, ranked by someone who's actually used them.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Quick Comparison Table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Framework&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;th&gt;Free Tier&lt;/th&gt;
&lt;th&gt;Paid Starts&lt;/th&gt;
&lt;th&gt;Setup Time&lt;/th&gt;
&lt;th&gt;My Rating&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NextAuth.js&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;React/Next.js apps&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;Free forever&lt;/td&gt;
&lt;td&gt;30 min&lt;/td&gt;
&lt;td&gt;9/10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Clerk&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Modern UX + speed&lt;/td&gt;
&lt;td&gt;10K MAUs&lt;/td&gt;
&lt;td&gt;$25/mo&lt;/td&gt;
&lt;td&gt;15 min&lt;/td&gt;
&lt;td&gt;9/10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Supabase Auth&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Full-stack + database&lt;/td&gt;
&lt;td&gt;50K MAUs&lt;/td&gt;
&lt;td&gt;$25/mo&lt;/td&gt;
&lt;td&gt;20 min&lt;/td&gt;
&lt;td&gt;8/10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Firebase Auth&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Google ecosystem&lt;/td&gt;
&lt;td&gt;50K MAUs&lt;/td&gt;
&lt;td&gt;$0.0055/MAU&lt;/td&gt;
&lt;td&gt;25 min&lt;/td&gt;
&lt;td&gt;7/10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auth0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Enterprise features&lt;/td&gt;
&lt;td&gt;7.5K MAUs&lt;/td&gt;
&lt;td&gt;$35/mo&lt;/td&gt;
&lt;td&gt;35 min&lt;/td&gt;
&lt;td&gt;6/10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AWS Cognito&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AWS-heavy apps&lt;/td&gt;
&lt;td&gt;50K MAUs&lt;/td&gt;
&lt;td&gt;$0.0055/MAU&lt;/td&gt;
&lt;td&gt;45 min&lt;/td&gt;
&lt;td&gt;5/10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Magic.link&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Passwordless focus&lt;/td&gt;
&lt;td&gt;1K MAUs&lt;/td&gt;
&lt;td&gt;$99/mo&lt;/td&gt;
&lt;td&gt;20 min&lt;/td&gt;
&lt;td&gt;7/10&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  1. NextAuth.js - The Developer's Best Friend ⭐ 9/10
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;💰 Pricing:&lt;/strong&gt; Completely free (you handle hosting)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚡ Setup:&lt;/strong&gt; 30 minutes for basic implementation&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🎓 FSO Compatibility:&lt;/strong&gt; Perfect - builds on token concepts from Part 4&lt;/p&gt;

&lt;h3&gt;
  
  
  Why NextAuth.js Wins for Most Developers
&lt;/h3&gt;

&lt;p&gt;NextAuth.js is what I wish I'd started with. Coming from Full Stack Open's JWT implementation, this felt like a natural evolution - same concepts, but production-ready.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// pages/api/auth/[...nextauth].js&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;NextAuth&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;next-auth&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;GoogleProvider&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;next-auth/providers/google&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nc"&gt;NextAuth&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;providers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nc"&gt;GoogleProvider&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;clientId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;GOOGLE_CLIENT_ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;clientSecret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;GOOGLE_CLIENT_SECRET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;callbacks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;session&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;token&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="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sub&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;session&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;h3&gt;
  
  
  ✅ &lt;strong&gt;Real-World Pros:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Zero monthly costs (huge for students/indie developers)&lt;/li&gt;
&lt;li&gt;Massive provider support (Google, GitHub, Discord, 50+ others)&lt;/li&gt;
&lt;li&gt;Built specifically for Next.js - feels native&lt;/li&gt;
&lt;li&gt;Excellent TypeScript support&lt;/li&gt;
&lt;li&gt;Database adapters for every major DB&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ❌ &lt;strong&gt;Honest Cons:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;More initial configuration than plug-and-play solutions&lt;/li&gt;
&lt;li&gt;UI components are basic (you'll need to style everything)&lt;/li&gt;
&lt;li&gt;Session management requires some understanding&lt;/li&gt;
&lt;li&gt;Database setup needed for persistent sessions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🏆 &lt;strong&gt;Perfect For:&lt;/strong&gt; Students, indie developers, Next.js projects, anyone wanting full control
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;💡 Real Talk:&lt;/strong&gt; This is the closest thing to "free enterprise auth." If you're comfortable with the FSO backend concepts, NextAuth.js is a no-brainer.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Clerk - The "Just Works" Champion ⭐ 9/10
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;💰 Pricing:&lt;/strong&gt; Free for 10K MAUs, $25/mo after&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚡ Setup:&lt;/strong&gt; 15 minutes to fully working auth&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🎓 FSO Compatibility:&lt;/strong&gt; Skip straight to production-level auth&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Clerk is Taking Over
&lt;/h3&gt;

&lt;p&gt;I rebuilt my FSO phonebook app with Clerk in one afternoon. The difference was shocking - what took me days with custom JWT implementation took 15 minutes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// app.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;ClerkProvider&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;SignedIn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;SignedOut&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;SignInButton&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;UserButton&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;@clerk/nextjs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ClerkProvider&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;header&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;SignedOut&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;SignInButton&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;SignedOut&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;SignedIn&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;UserButton&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;SignedIn&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;header&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;ClerkProvider&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ &lt;strong&gt;Real-World Pros:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Drop-in components that actually look good&lt;/li&gt;
&lt;li&gt;User management dashboard included&lt;/li&gt;
&lt;li&gt;Organization/team features built-in&lt;/li&gt;
&lt;li&gt;10K monthly active users free - perfect for most projects&lt;/li&gt;
&lt;li&gt;Handles all the edge cases you haven't thought of&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ❌ &lt;strong&gt;Honest Cons:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Can get expensive quickly after 10K users&lt;/li&gt;
&lt;li&gt;Less customization control than NextAuth.js&lt;/li&gt;
&lt;li&gt;Vendor lock-in concerns for large apps&lt;/li&gt;
&lt;li&gt;Additional admin seats cost $10/month each&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🏆 &lt;strong&gt;Perfect For:&lt;/strong&gt; Rapid prototyping, startups, developers who want to focus on features, not auth
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;💡 Real Talk:&lt;/strong&gt; Clerk counts MAU differently - users only count as active when they return 24+ hours after signup, so you get more value than the number suggests.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Supabase Auth - The Full-Stack Powerhouse ⭐ 8/10
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;💰 Pricing:&lt;/strong&gt; 50K MAUs free, $0.00325 per MAU after&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚡ Setup:&lt;/strong&gt; 20 minutes including database&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🎓 FSO Compatibility:&lt;/strong&gt; Great - combines auth + database like FSO teaches&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Supabase Auth Makes Sense
&lt;/h3&gt;

&lt;p&gt;If you loved the PostgreSQL parts of FSO, Supabase Auth is perfect. It's authentication that plays nicely with a real database, not just JWT tokens floating around.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// supabase/client.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="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;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NEXT_PUBLIC_SUPABASE_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NEXT_PUBLIC_SUPABASE_ANON_KEY&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;// Login&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="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;signInWithOAuth&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;google&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;// Get user&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="p"&gt;}&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="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getUser&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ &lt;strong&gt;Real-World Pros:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Predictable pricing with no per-request billing&lt;/li&gt;
&lt;li&gt;Generous 50K MAU free tier&lt;/li&gt;
&lt;li&gt;Built-in Row Level Security (RLS) - security that actually works&lt;/li&gt;
&lt;li&gt;Real-time subscriptions included&lt;/li&gt;
&lt;li&gt;Open source - no vendor lock-in fears&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ❌ &lt;strong&gt;Honest Cons:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Learning curve for RLS policies&lt;/li&gt;
&lt;li&gt;Free tier has limited concurrent connections&lt;/li&gt;
&lt;li&gt;Less auth-specific features than dedicated auth providers&lt;/li&gt;
&lt;li&gt;UI components are more basic than Clerk&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🏆 &lt;strong&gt;Perfect For:&lt;/strong&gt; Full-stack apps, developers who want database + auth together, teams prioritizing open source
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;💡 Real Talk:&lt;/strong&gt; The RLS learning curve is worth it. Once you understand it, you'll never want to go back to manually checking permissions.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Firebase Auth - The Google Ecosystem Play ⭐ 7/10
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;💰 Pricing:&lt;/strong&gt; 50K MAUs free, $0.0055/MAU after&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚡ Setup:&lt;/strong&gt; 25 minutes (configuration can be tricky)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🎓 FSO Compatibility:&lt;/strong&gt; Different paradigm, but concepts transfer&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Firebase Auth Still Matters
&lt;/h3&gt;

&lt;p&gt;Firebase Auth is the reliable choice. It's been around forever, has incredible uptime, and if you're already in Google Cloud, it's a natural fit.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// firebase-config.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;initializeApp&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;firebase/app&lt;/span&gt;&lt;span class="dl"&gt;'&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;getAuth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;signInWithPopup&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;GoogleAuthProvider&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;firebase/auth&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;auth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getAuth&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;GoogleAuthProvider&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;signInWithGoogle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;signInWithPopup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ &lt;strong&gt;Real-World Pros:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Generous 50K MAU free tier&lt;/li&gt;
&lt;li&gt;Rock-solid reliability (Google infrastructure)&lt;/li&gt;
&lt;li&gt;Excellent mobile SDKs&lt;/li&gt;
&lt;li&gt;Fair pricing that matches Cognito&lt;/li&gt;
&lt;li&gt;Mature ecosystem with tons of tutorials&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ❌ &lt;strong&gt;Honest Cons:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;No built-in RBAC or organization management&lt;/li&gt;
&lt;li&gt;SMS fees and enterprise SSO costs add up quickly&lt;/li&gt;
&lt;li&gt;Google vendor lock-in&lt;/li&gt;
&lt;li&gt;Complex configuration for some providers&lt;/li&gt;
&lt;li&gt;Too restrictive for mid-size to enterprise companies&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🏆 &lt;strong&gt;Perfect For:&lt;/strong&gt; Mobile apps, Google Cloud users, projects needing bulletproof uptime
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;💡 Real Talk:&lt;/strong&gt; Firebase is boring in the best way. It works, it's fast, but don't expect exciting new features.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Auth0 - The Enterprise Heavyweight ⭐ 6/10
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;💰 Pricing:&lt;/strong&gt; 7.5K MAUs free, $35/mo for basic paid plan&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚡ Setup:&lt;/strong&gt; 35 minutes (lots of configuration)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🎓 FSO Compatibility:&lt;/strong&gt; Overkill for FSO-level projects&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Auth0 is Losing Ground
&lt;/h3&gt;

&lt;p&gt;Auth0 was the king, but honestly, it feels outdated now. The pricing is aggressive, and setup is more complex than modern alternatives.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ &lt;strong&gt;Real-World Pros:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Every enterprise feature you could want&lt;/li&gt;
&lt;li&gt;Incredible customization options&lt;/li&gt;
&lt;li&gt;Strong compliance (SOC2, HIPAA, etc.)&lt;/li&gt;
&lt;li&gt;Advanced attack protection&lt;/li&gt;
&lt;li&gt;Mature platform with extensive documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ❌ &lt;strong&gt;Honest Cons:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Expensive - $0.07 per MAU vs Supabase's $0.00325&lt;/li&gt;
&lt;li&gt;Pricing not public beyond 20K MAU - requires sales calls&lt;/li&gt;
&lt;li&gt;Complex setup process&lt;/li&gt;
&lt;li&gt;Overkill for most applications&lt;/li&gt;
&lt;li&gt;Feels heavy compared to modern alternatives&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🏆 &lt;strong&gt;Perfect For:&lt;/strong&gt; Large enterprises, apps with complex compliance needs, teams with dedicated DevOps
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;💡 Real Talk:&lt;/strong&gt; Unless you need specific enterprise features, there are better options in 2025.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. AWS Cognito - The AWS-Native Choice ⭐ 5/10
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;💰 Pricing:&lt;/strong&gt; 50K MAUs free, $0.0055/MAU after&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚡ Setup:&lt;/strong&gt; 45 minutes (AWS complexity)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🎓 FSO Compatibility:&lt;/strong&gt; Steep learning curve from FSO concepts&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Cognito is Hard to Recommend
&lt;/h3&gt;

&lt;p&gt;If you're already deep in AWS, Cognito makes sense. Otherwise, it's unnecessarily complex for what most developers need.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ &lt;strong&gt;Real-World Pros:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Massive free tier (50K MAUs)&lt;/li&gt;
&lt;li&gt;Deep AWS integration&lt;/li&gt;
&lt;li&gt;Highly scalable&lt;/li&gt;
&lt;li&gt;Pay-per-use pricing model&lt;/li&gt;
&lt;li&gt;Strong enterprise security features&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ❌ &lt;strong&gt;Honest Cons:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Steep learning curve&lt;/li&gt;
&lt;li&gt;Complex setup and configuration&lt;/li&gt;
&lt;li&gt;Limited customization options&lt;/li&gt;
&lt;li&gt;Poor developer experience&lt;/li&gt;
&lt;li&gt;AWS vendor lock-in&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🏆 &lt;strong&gt;Perfect For:&lt;/strong&gt; AWS-heavy infrastructure, teams with AWS expertise, high-scale applications
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;💡 Real Talk:&lt;/strong&gt; Only choose this if you're already committed to AWS for everything else.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Magic.link - The Passwordless Pioneer ⭐ 7/10
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;💰 Pricing:&lt;/strong&gt; 1K MAUs free, $99/mo after&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚡ Setup:&lt;/strong&gt; 20 minutes&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🎓 FSO Compatibility:&lt;/strong&gt; Completely different approach&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Passwordless Might Be the Future
&lt;/h3&gt;

&lt;p&gt;Magic.link bets on passwordless being the future. The UX is incredible when it works, but it's a niche solution.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ &lt;strong&gt;Real-World Pros:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Incredible user experience (no passwords!)&lt;/li&gt;
&lt;li&gt;Very secure (no password leaks)&lt;/li&gt;
&lt;li&gt;Simple implementation&lt;/li&gt;
&lt;li&gt;Future-forward approach&lt;/li&gt;
&lt;li&gt;Great for specific use cases&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ❌ &lt;strong&gt;Honest Cons:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Expensive pricing jump (1K to unlimited for $99/mo)&lt;/li&gt;
&lt;li&gt;Limited adoption - users might be confused&lt;/li&gt;
&lt;li&gt;Email dependency issues&lt;/li&gt;
&lt;li&gt;Smaller ecosystem&lt;/li&gt;
&lt;li&gt;Not suitable for all user types&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🏆 &lt;strong&gt;Perfect For:&lt;/strong&gt; Modern B2B apps, crypto/web3 projects, forward-thinking startups
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;💡 Real Talk:&lt;/strong&gt; Amazing concept, but the pricing jump is brutal for growing apps.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 My Real-World Recommendations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;For FSO Students/Beginners:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Start with NextAuth.js&lt;/strong&gt; - It builds on concepts you already know, costs nothing, and teaches you how auth actually works.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;For Rapid Prototyping:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Go with Clerk&lt;/strong&gt; - 15 minutes to working auth with beautiful UIs. Perfect for demos and MVPs.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;For Full-Stack Apps:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Choose Supabase Auth&lt;/strong&gt; - Get authentication AND a database that plays nicely together. The RLS learning curve pays off.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;For Mobile-First:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Pick Firebase Auth&lt;/strong&gt; - The mobile SDKs are unmatched, and Google's infrastructure is bulletproof.&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 What Full Stack Open Doesn't Tell You
&lt;/h2&gt;

&lt;p&gt;FSO teaches JWT tokens brilliantly, but production authentication is about more than tokens:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;User management&lt;/strong&gt; - profiles, password resets, email verification&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session handling&lt;/strong&gt; - refresh tokens, secure storage, logout everywhere&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Social logins&lt;/strong&gt; - OAuth flows, provider management, account linking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security&lt;/strong&gt; - rate limiting, attack protection, compliance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UX&lt;/strong&gt; - loading states, error handling, mobile experience&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The frameworks above handle these automatically. FSO gives you the foundation to understand WHY they work.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Decision Framework
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Choose based on your priorities:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;💰 Budget-conscious?&lt;/strong&gt; → NextAuth.js (free) or Supabase (generous free tier)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;⚡ Speed to market?&lt;/strong&gt; → Clerk (fastest setup) or Firebase (mature ecosystem)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🔐 Maximum control?&lt;/strong&gt; → NextAuth.js (full customization) or Supabase (open source)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;📈 Enterprise features?&lt;/strong&gt; → Auth0 (if budget allows) or Cognito (if already on AWS)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🚀 Future-forward?&lt;/strong&gt; → Magic.link (passwordless) or Clerk (modern UX)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚡ Quick Start Guide
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Ready to implement? Here's your 3-step process:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start with the free tier&lt;/strong&gt; of your chosen framework&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build a simple login flow&lt;/strong&gt; with one social provider&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test with real users&lt;/strong&gt; before adding complexity&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Don't over-engineer authentication. Pick one framework, ship it, iterate based on real user feedback.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Remember:&lt;/strong&gt; The best authentication system is the one your users actually use successfully. Perfect security means nothing if your signup flow has a 90% drop-off rate.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Which framework are you planning to try first? Have questions about any specific implementation? Drop a comment below - I've probably hit the same issues you're thinking about.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/yourusername" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Follow me for more Full Stack Open insights and real-world development tips! 🚀&lt;/a&gt;
&lt;/p&gt;




&lt;h3&gt;
  
  
  About the Author
&lt;/h3&gt;

&lt;p&gt;Currently completing Full Stack Open and building real applications with modern authentication solutions. Always learning, always shipping. 🚀&lt;/p&gt;

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