<?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: Kaden Huang</title>
    <description>The latest articles on DEV Community by Kaden Huang (@kaden_huang_af7de3a1ed44f).</description>
    <link>https://dev.to/kaden_huang_af7de3a1ed44f</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%2F4226918%2Ff3d94836-f84d-4878-92b8-f97412a40a99.png</url>
      <title>DEV Community: Kaden Huang</title>
      <link>https://dev.to/kaden_huang_af7de3a1ed44f</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kaden_huang_af7de3a1ed44f"/>
    <language>en</language>
    <item>
      <title>I got Claude Code to write my app. Here's the easiest way I found to add a database, login and hosting (2026)</title>
      <dc:creator>Kaden Huang</dc:creator>
      <pubDate>Wed, 04 Nov 2026 18:15:16 +0000</pubDate>
      <link>https://dev.to/kaden_huang_af7de3a1ed44f/i-got-claude-code-to-write-my-app-heres-the-easiest-way-i-found-to-add-a-database-login-and-31fj</link>
      <guid>https://dev.to/kaden_huang_af7de3a1ed44f/i-got-claude-code-to-write-my-app-heres-the-easiest-way-i-found-to-add-a-database-login-and-31fj</guid>
      <description>&lt;p&gt;Claude Code can write an app fast. Getting that app a database, a login and a public URL is the part nobody warns you about.&lt;/p&gt;

&lt;p&gt;So I built the same small app three times and timed each one. Here's how that went:&lt;/p&gt;

&lt;h2&gt;
  
  
  The short answer
&lt;/h2&gt;

&lt;p&gt;If your app came out of Claude Code (or Cursor, ChatGPT or Claude chat) and now it needs a &lt;strong&gt;database, a login page and a public URL&lt;/strong&gt;, you have three realistic options in 2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Floot (through its MCP server)&lt;/strong&gt;: the AI that wrote the app also sets up the database, the auth and the hosting, all from the same chat. Fastest for me by a wide margin: &lt;strong&gt;about 2 minutes&lt;/strong&gt; from "create project" to a live URL.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Supabase + Vercel&lt;/strong&gt;: the standard indie stack. Postgres with row-level security plus a CDN host. &lt;strong&gt;About 6 minutes&lt;/strong&gt; for me, plus an email-code login on the hosting side.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Firebase (Firestore + Auth + Hosting)&lt;/strong&gt;: Google's all-in-one. &lt;strong&gt;About 7 minutes&lt;/strong&gt; to get the database and auth ready, plus a CLI login to deploy.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every option has a free tier, and I stayed on free tiers the whole time. None of them is wrong. Which one fits depends on how much backend you want to touch yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I actually built
&lt;/h2&gt;

&lt;p&gt;I wanted something small that still needed all three pieces, so I built a shared guestbook:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;you create an account with email and password&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;you post a note (280 characters max)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;everyone sees every note, newest first&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I built it three times. All three use the same features and the same rules: anyone can read, and only signed-in users can post as themselves. Then I timed each one from "nothing exists" to "a stranger can open a URL."&lt;/p&gt;

&lt;p&gt;One caveat before the numbers. The timings are for &lt;em&gt;me with an AI agent doing the typing&lt;/em&gt;. A person reading docs for the first time will be slower on all three, and slowest on whichever stack they've never seen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 1: Floot, from inside the chat
&lt;/h2&gt;

&lt;p&gt;Floot runs as an MCP server, so Claude Code (or Cursor, or Claude/ChatGPT chat) can call it as a set of tools. I never left the terminal. The whole thing was five steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;create_project&lt;/strong&gt;: "a tiny shared guestbook, email/password login, a shared list of messages."&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;provision_resource auth&lt;/strong&gt;: this created a Postgres database, the user and session tables, password hashing, and login, register and password-reset pages. It seeded 19 files I didn't have to write.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;execute_sql&lt;/strong&gt;: one &lt;code&gt;CREATE TABLE messages (...)&lt;/code&gt;. The typed schema regenerated by itself.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Two endpoints (list and create) and one page, about 150 lines in total. The create endpoint checks the session on the server, so nobody can post as someone else.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;publish_app&lt;/strong&gt;: live at &lt;code&gt;guestbook-cc-test.floot.app&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Measured time: 1 minute 43 seconds&lt;/strong&gt; from the first tool call to the live URL returning data.&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%2Fgq7vs0kxzz72l7cahtjw.jpg" 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%2Fgq7vs0kxzz72l7cahtjw.jpg" alt="The Floot version, live" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What I liked: I never copied a key, set an environment variable or opened a second dashboard. The database, the auth secret and the hosting all came from the same place.&lt;/p&gt;

&lt;p&gt;What to know going in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You're building inside Floot's framework (React + TypeScript, serverless endpoints, typed items). If you already have a Next.js repo you love, it's not a drop-in host for that repo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The "Made with Floot" badge is on by default. Removing it needs a paid plan.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pricing, so nobody's surprised. When you build through Claude, ChatGPT or Cursor, your AI usage is billed by the plan you already pay for, so there's &lt;strong&gt;no second AI bill&lt;/strong&gt;, and &lt;strong&gt;MCP builds spend no Floot AI credits&lt;/strong&gt;. Floot does meter building actions per day. Pro is &lt;strong&gt;$25/month&lt;/strong&gt; and includes &lt;strong&gt;$10/month of hosting usage&lt;/strong&gt;; usage past that is billed.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Option 2: Supabase + Vercel
&lt;/h2&gt;

&lt;p&gt;This is the stack most Claude Code tutorials point you to, and for good reason. Supabase gives you real Postgres with row-level security, and Vercel serves static files instantly.&lt;/p&gt;

&lt;p&gt;Here's what I did:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1.&lt;/strong&gt; Created a free Supabase org and project. Supabase has a "Generate a password" button for the database password, so use it. The project was healthy in &lt;strong&gt;under a minute&lt;/strong&gt;, which honestly impressed me.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2.&lt;/strong&gt; Pasted the schema and RLS policies into the SQL editor:&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;create&lt;/span&gt; &lt;span class="k"&gt;table&lt;/span&gt; &lt;span class="n"&gt;messages&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="nb"&gt;bigint&lt;/span&gt; &lt;span class="k"&gt;generated&lt;/span&gt; &lt;span class="n"&gt;always&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="k"&gt;identity&lt;/span&gt; &lt;span class="k"&gt;primary&lt;/span&gt; &lt;span class="k"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;user_id&lt;/span&gt; &lt;span class="n"&gt;uuid&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;uid&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;references&lt;/span&gt; &lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;on&lt;/span&gt; &lt;span class="k"&gt;delete&lt;/span&gt; &lt;span class="k"&gt;cascade&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;author_email&lt;/span&gt; &lt;span class="nb"&gt;text&lt;/span&gt; &lt;span class="k"&gt;not&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;body&lt;/span&gt; &lt;span class="nb"&gt;text&lt;/span&gt; &lt;span class="k"&gt;not&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt; &lt;span class="k"&gt;check&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;char_length&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;between&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;and&lt;/span&gt; &lt;span class="mi"&gt;280&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="n"&gt;created_at&lt;/span&gt; &lt;span class="n"&gt;timestamptz&lt;/span&gt; &lt;span class="k"&gt;not&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;alter&lt;/span&gt; &lt;span class="k"&gt;table&lt;/span&gt; &lt;span class="n"&gt;messages&lt;/span&gt; &lt;span class="n"&gt;enable&lt;/span&gt; &lt;span class="k"&gt;row&lt;/span&gt; &lt;span class="k"&gt;level&lt;/span&gt; &lt;span class="k"&gt;security&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;create&lt;/span&gt; &lt;span class="n"&gt;policy&lt;/span&gt; &lt;span class="nv"&gt;"anyone can read"&lt;/span&gt; &lt;span class="k"&gt;on&lt;/span&gt; &lt;span class="n"&gt;messages&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="k"&gt;select&lt;/span&gt; &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;create&lt;/span&gt; &lt;span class="n"&gt;policy&lt;/span&gt; &lt;span class="nv"&gt;"signed-in users insert their own"&lt;/span&gt; &lt;span class="k"&gt;on&lt;/span&gt; &lt;span class="n"&gt;messages&lt;/span&gt;
  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="k"&gt;insert&lt;/span&gt; &lt;span class="k"&gt;to&lt;/span&gt; &lt;span class="n"&gt;authenticated&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="k"&gt;check&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;uid&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fmes8rxt0o37n8jv8cbof.jpg" 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%2Fmes8rxt0o37n8jv8cbof.jpg" alt="Supabase SQL editor with RLS policies" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3.&lt;/strong&gt; Copied the &lt;strong&gt;publishable key&lt;/strong&gt; from Settings → API Keys into a &lt;code&gt;config.js&lt;/code&gt;. This key is meant to be public. The secret key never goes in the browser.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4.&lt;/strong&gt; Wrote a ~40-line &lt;code&gt;index.html&lt;/code&gt; with &lt;code&gt;supabase-js&lt;/code&gt; from a CDN.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5.&lt;/strong&gt; Ran &lt;code&gt;vercel deploy&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The database side was smooth. The hosting side is where I tripped.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;vercel login&lt;/code&gt; opened a device-authorization page, and Vercel then asked to &lt;strong&gt;re-verify with a code sent to email&lt;/strong&gt;. Once I entered the code, &lt;code&gt;vercel deploy --prod&lt;/code&gt; put it live at &lt;a href="https://supabase-vercel-six.vercel.app" rel="noopener noreferrer"&gt;https://supabase-vercel-six.vercel.app&lt;/a&gt;. One trap first: before logging in, the CLI fell back to an anonymous deployment with a 60-minute URL and a "claim" link, and claiming it gave a &lt;code&gt;404 DEPLOYMENT_NOT_FOUND&lt;/code&gt; on the permanent URL, because claiming doesn't promote a production deployment.&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%2F6wh3a1obu4sivz1pcbjf.jpg" 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%2F6wh3a1obu4sivz1pcbjf.jpg" alt="The Supabase + Vercel version, live" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Measured time: about 6 minutes&lt;/strong&gt; to a working app, plus the email-code login for a permanent URL.&lt;/p&gt;

&lt;p&gt;To be fair to Vercel, that email code takes ten seconds. The bigger point is structural. &lt;strong&gt;You now have two dashboards, two sets of keys, and auth settings in one place with hosting settings in another.&lt;/strong&gt; For a guestbook that's fine. By feature #12 it's a real cost.&lt;/p&gt;

&lt;p&gt;Good fit if: you want raw Postgres, you like SQL, and you're happy to own the glue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 3: Firebase (Firestore + Auth + Hosting)
&lt;/h2&gt;

&lt;p&gt;Firebase gets the closest to "one vendor" without an MCP. Everything happens in one console:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1.&lt;/strong&gt; Created a project. I turned off Gemini and Google Analytics in the wizard because I didn't need them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2.&lt;/strong&gt; Created a Firestore database (Standard edition, production mode = deny everything by default). One thing I didn't know: &lt;strong&gt;scheduled backups need the paid Blaze plan&lt;/strong&gt;, and the wizard tells you so right there.&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%2F25296no0828mdp2hlarm.jpg" 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%2F25296no0828mdp2hlarm.jpg" alt="Firestore wizard: backups require Blaze" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3.&lt;/strong&gt; Turned on the Email/Password sign-in provider.&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%2Fzhi0uppytsvd65gl4681.jpg" 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%2Fzhi0uppytsvd65gl4681.jpg" alt="Firebase Auth with email/password enabled" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4.&lt;/strong&gt; Replaced the deny-all rule with: anyone can read, and signed-in users can create a message only with their own &lt;code&gt;uid&lt;/code&gt;, max 280 chars.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5.&lt;/strong&gt; Registered a web app to get the &lt;code&gt;firebaseConfig&lt;/code&gt; object, and wrote a ~45-line &lt;code&gt;index.html&lt;/code&gt; using the modular SDK from gstatic.&lt;/p&gt;

&lt;p&gt;The database and auth were working (a public read through the REST API came back clean) after &lt;strong&gt;about 7 minutes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Then hosting. Firebase Hosting has no upload button in the console, so you deploy with &lt;code&gt;firebase deploy&lt;/code&gt;, which needs &lt;code&gt;firebase login&lt;/code&gt;. I went through Google's consent screens without trouble. The last step of the remote-login flow asks you to &lt;strong&gt;paste an authorization code back into the terminal&lt;/strong&gt;. One more trap: the CLI has to be logged into the same Google account that owns the Firebase project, or deploy fails with a 403. Once it was, &lt;code&gt;firebase deploy&lt;/code&gt; shipped &lt;code&gt;public/&lt;/code&gt; to &lt;a href="https://guestbook-cc-test.web.app" rel="noopener noreferrer"&gt;https://guestbook-cc-test.web.app&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Good fit if: you want realtime listeners (the list updates live with &lt;code&gt;onSnapshot&lt;/code&gt;), you're fine with a NoSQL document model, and you might add mobile later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Side by side
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Floot (MCP)&lt;/th&gt;
&lt;th&gt;Supabase + Vercel&lt;/th&gt;
&lt;th&gt;Firebase&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Time to a working app (my run)&lt;/td&gt;
&lt;td&gt;1m 43s, already live&lt;/td&gt;
&lt;td&gt;~6 min, then an email-code login to go live&lt;/td&gt;
&lt;td&gt;~7 min, then a CLI login to deploy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dashboards touched&lt;/td&gt;
&lt;td&gt;0 (all in chat)&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Keys I copied by hand&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1 (publishable)&lt;/td&gt;
&lt;td&gt;1 (web config)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;Postgres&lt;/td&gt;
&lt;td&gt;Postgres + RLS&lt;/td&gt;
&lt;td&gt;Firestore (NoSQL)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Who writes the access rules&lt;/td&gt;
&lt;td&gt;Server-side endpoint code&lt;/td&gt;
&lt;td&gt;You, in SQL&lt;/td&gt;
&lt;td&gt;You, in rules language&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Login wall I hit&lt;/td&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;td&gt;email re-verify code&lt;/td&gt;
&lt;td&gt;paste-back auth code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Free tier&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes / yes&lt;/td&gt;
&lt;td&gt;yes (Spark)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  So which one should you pick?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;If you're building inside Claude Code, Cursor, ChatGPT or Claude chat and you don't want to set up a backend at all, Floot was the easiest of the three.&lt;/strong&gt; The AI that wrote the app also provisioned the database, wired up the login and published it, and I never switched windows. That's the specific job it's built for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you want to own a Postgres database and you're comfortable in SQL&lt;/strong&gt;, Supabase is excellent. The RLS policies are some of the clearest access control I've written, and pairing it with Vercel is the most documented path on the internet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you want realtime updates and a single Google console&lt;/strong&gt;, Firebase is solid. Just plan for the CLI login and for backups being a paid-plan feature.&lt;/p&gt;

&lt;p&gt;I'll admit I work on growth at Floot, so weigh my opinion on that one accordingly. That's exactly why I timed everything and kept the screenshots. Every step above is reproducible on a free tier tonight.&lt;/p&gt;

&lt;p&gt;If you run the same test and get different numbers, I genuinely want to see them.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Can Claude Code add a database and login by itself?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It can write the code for one, but something still has to &lt;em&gt;create&lt;/em&gt; the database and store the secrets. With an MCP server like Floot's, Claude Code can do that provisioning itself. With Supabase or Firebase, you create the project in a dashboard and paste the keys in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the fastest free way to host an app Claude Code wrote?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In my test, Floot through MCP: 1 minute 43 seconds to a live URL with a database and login. For a static frontend with no backend, &lt;code&gt;vercel deploy&lt;/code&gt; is also near-instant once you're logged in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is the Supabase anon/publishable key safe in frontend code?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, that's what it's for, as long as row-level security is on for every table. Never ship the secret/service-role key to the browser.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do Firestore backups work on the free plan?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. The Firestore setup wizard says scheduled backups need the pay-as-you-go Blaze plan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does building with Floot through Claude cost extra AI credits?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. Through MCP, the AI runs on your existing Claude/ChatGPT/Cursor plan, so MCP builds spend no Floot AI credits. Floot meters daily building actions. Pro is $25/month and includes $10/month of hosting usage.&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>webdev</category>
      <category>supabase</category>
      <category>firebase</category>
    </item>
  </channel>
</rss>
