<?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: Theo</title>
    <description>The latest articles on DEV Community by Theo (@theosucksatcode).</description>
    <link>https://dev.to/theosucksatcode</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%2F3611534%2F04daf1eb-5568-485a-9bec-0c58f8f197bc.jpeg</url>
      <title>DEV Community: Theo</title>
      <link>https://dev.to/theosucksatcode</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/theosucksatcode"/>
    <language>en</language>
    <item>
      <title>I made a production ready auth scaffold with Nuxt and Supabase</title>
      <dc:creator>Theo</dc:creator>
      <pubDate>Sun, 28 Jun 2026 19:33:23 +0000</pubDate>
      <link>https://dev.to/theosucksatcode/i-made-a-production-ready-auth-scaffold-with-nuxt-and-supabase-35m2</link>
      <guid>https://dev.to/theosucksatcode/i-made-a-production-ready-auth-scaffold-with-nuxt-and-supabase-35m2</guid>
      <description>&lt;p&gt;I have a lot of ideas. The kind of ideas you get at midnight, the ones that seem brilliant, and then I have to implement auth and all traction on a brilliant idea gets lost within 15 minutes of overthinking how I want to set up auth this time.&lt;/p&gt;

&lt;p&gt;The next brilliant idea I got, not at midnight this time was building an auth scaffold for myself that I can simply reuse for every single idea. But the caveat is I decided against just vibe coding it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Auth is a weird one. It's boring enough that you want to hammer through it, but it's also your first line of security. Cutting corners here means cutting corners on the one thing that protects your users.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So I actually spent some time clueing myself up on how to do this properly for Nuxt/Supabase projects (my preferred 10x developer stack). I didn't just hook this project up and called it done, I spent time thinking through edge cases, user flows, error handling, user feedback, and my desired initial application behaviour... to be honest I don't think I've ever thought as much as I did with this ever before.&lt;/p&gt;

&lt;p&gt;Feel free to check out the &lt;a href="https://nuxt-supabase-auth-scaffold.vercel.app/" rel="noopener noreferrer"&gt;live demo&lt;/a&gt; or dig through the &lt;a href="https://github.com/theosucksatcode/NuxtSupabaseAuthScaffold" rel="noopener noreferrer"&gt;repository&lt;/a&gt;. I'd love to hear your thoughts and feedback.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's in the box though?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Sign up with email confirmation (optional because I made sure both was supported)&lt;/li&gt;
&lt;li&gt;Sign in&lt;/li&gt;
&lt;li&gt;Forgot password + password reset via email link&lt;/li&gt;
&lt;li&gt;All PKCE code exchanges handled in a dedicated route&lt;/li&gt;
&lt;li&gt;Protected routes via Supabase's redirect options + a guest middleware that boots authenticated users off the auth pages where they don't belong&lt;/li&gt;
&lt;li&gt;Live password strength feedback during sign up (built as a composable considering its used in a few places and potentially a few more)&lt;/li&gt;
&lt;li&gt;Friendly, specific error handling throughout&lt;/li&gt;
&lt;li&gt;Dark mode (based on the system's preference)&lt;/li&gt;
&lt;li&gt;Polished UI with Nuxt UI&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tech stack
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What&lt;/th&gt;
&lt;th&gt;Package&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Framework&lt;/td&gt;
&lt;td&gt;Nuxt 4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auth + DB&lt;/td&gt;
&lt;td&gt;Supabase&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UI&lt;/td&gt;
&lt;td&gt;Nuxt UI 4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Validation&lt;/td&gt;
&lt;td&gt;Zod&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Styling&lt;/td&gt;
&lt;td&gt;Tailwind CSS 4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>nuxt</category>
      <category>supabase</category>
      <category>vue</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
