<?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: Yusuf kızılkan</title>
    <description>The latest articles on DEV Community by Yusuf kızılkan (@yusuf_kzlkan_bec8219b13).</description>
    <link>https://dev.to/yusuf_kzlkan_bec8219b13</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%2F4052108%2F28b78e3d-fb00-4a0e-82ce-2d5a77d46bed.png</url>
      <title>DEV Community: Yusuf kızılkan</title>
      <link>https://dev.to/yusuf_kzlkan_bec8219b13</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yusuf_kzlkan_bec8219b13"/>
    <language>en</language>
    <item>
      <title>I built a free full-stack auth starter so you can skip "auth week" (Flutter + FastAPI)</title>
      <dc:creator>Yusuf kızılkan</dc:creator>
      <pubDate>Tue, 28 Jul 2026 23:22:55 +0000</pubDate>
      <link>https://dev.to/yusuf_kzlkan_bec8219b13/i-built-a-free-full-stack-auth-starter-so-you-can-skip-auth-week-flutter-fastapi-4e51</link>
      <guid>https://dev.to/yusuf_kzlkan_bec8219b13/i-built-a-free-full-stack-auth-starter-so-you-can-skip-auth-week-flutter-fastapi-4e51</guid>
      <description>&lt;p&gt;Every side project I've started died a little during the same seven days: &lt;strong&gt;auth week.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You know the drill. Login screen, register screen, forgot password. JWT access tokens, refresh tokens, where do I even store these securely? Then the Google Sign-In configuration maze — SHA-1 fingerprints, two different client IDs, the OAuth consent screen. A week of boring, error-prone work before you write a single line of your actual product.&lt;/p&gt;

&lt;p&gt;So I built the whole thing once, properly, and released it free.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's inside
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Flutter side:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Login, Register, Forgot Password and Auth Gate screens (light/dark themes, follows system)&lt;/li&gt;
&lt;li&gt;Email/password + Google Sign-In, fully wired&lt;/li&gt;
&lt;li&gt;JWT access + refresh tokens in &lt;code&gt;flutter_secure_storage&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Automatic refresh on 401 — expired tokens refresh silently, and the user only gets logged out if the refresh itself fails&lt;/li&gt;
&lt;li&gt;Riverpod + go_router, clean feature-based architecture&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Backend side (the part most starters skip):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;FastAPI + PostgreSQL with &lt;code&gt;/auth/register&lt;/code&gt;, &lt;code&gt;/login&lt;/code&gt;, &lt;code&gt;/refresh&lt;/code&gt;, &lt;code&gt;/forgot-password&lt;/code&gt;, &lt;code&gt;/me&lt;/code&gt;, &lt;code&gt;/google&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;bcrypt password hashing, short-lived access tokens, rotating refresh tokens&lt;/li&gt;
&lt;li&gt;Starts with one command: &lt;code&gt;docker compose up&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Interactive API docs at &lt;code&gt;/docs&lt;/code&gt; out of the box (thanks, FastAPI)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why full-stack?
&lt;/h2&gt;

&lt;p&gt;Most free auth templates give you beautiful screens and leave the backend as "an exercise for the reader." Which means auth week isn't actually over — you just moved it.&lt;/p&gt;

&lt;p&gt;This starter runs end to end: clone → &lt;code&gt;docker compose up&lt;/code&gt; → &lt;code&gt;flutter run&lt;/code&gt; → sign in. Real Postgres, real tokens, real error handling (wrong password shows a clean error banner, not a crash).&lt;/p&gt;

&lt;h2&gt;
  
  
  Two gotchas I hit (so you don't have to)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Non-ASCII Windows paths break the Flutter build.&lt;/strong&gt; My desktop folder is &lt;code&gt;Masaüstü&lt;/code&gt; (Turkish Windows). Gradle and Flutter's shader compiler choke on the &lt;code&gt;ü&lt;/code&gt;. If your Windows is in Turkish, German, Spanish... and your project lives under a localized path, you'll hit this too. The fix (subst a drive letter + &lt;code&gt;android.overridePathCheck=true&lt;/code&gt;) is documented in the repo's FAQ.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. &lt;code&gt;flutter_secure_storage&lt;/code&gt; needs minSdk 23+.&lt;/strong&gt; Recent versions silently require it; older project templates default lower and the build fails with a confusing error. Bump &lt;code&gt;minSdk&lt;/code&gt; to 23 and &lt;code&gt;compileSdk&lt;/code&gt; to 36.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub (MIT licensed):&lt;/strong&gt; &lt;a href="https://github.com/yusufkizilkan/flutter-fastapi-auth-starter" rel="noopener noreferrer"&gt;https://github.com/yusufkizilkan/flutter-fastapi-auth-starter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3-minute setup video:&lt;/strong&gt; &lt;a href="https://www.youtube.com/watch?v=x1ByQMPEy8g" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=x1ByQMPEy8g&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Download on Gumroad&lt;/strong&gt; (free, pay what you want): &lt;a href="https://kizilkan2.gumroad.com/l/flutter-auth-starter" rel="noopener noreferrer"&gt;https://kizilkan2.gumroad.com/l/flutter-auth-starter&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This starter is the foundation of a full SaaS kit I'm building in public — subscriptions (RevenueCat), push notifications, Apple Sign-In, admin panel. Star the repo if you want to follow along.&lt;/p&gt;

&lt;p&gt;I'd genuinely love feedback — especially on the token refresh flow and the folder structure. What does your auth week look like?&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>fastapi</category>
      <category>opensource</category>
      <category>android</category>
    </item>
  </channel>
</rss>
