<?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>Forem: Sugata Bhar</title>
    <description>The latest articles on Forem by Sugata Bhar (@sugata_bhar_52e3ea1c547e4).</description>
    <link>https://forem.com/sugata_bhar_52e3ea1c547e4</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%2F1786081%2F36c273ca-4940-494a-b354-3ffe6cc2ccb6.png</url>
      <title>Forem: Sugata Bhar</title>
      <link>https://forem.com/sugata_bhar_52e3ea1c547e4</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/sugata_bhar_52e3ea1c547e4"/>
    <language>en</language>
    <item>
      <title>🧠 Google Cloud NEXT ’26: Building a Real AI SaaS (Not Just Another Demo)</title>
      <dc:creator>Sugata Bhar</dc:creator>
      <pubDate>Thu, 23 Apr 2026 07:50:51 +0000</pubDate>
      <link>https://forem.com/sugata_bhar_52e3ea1c547e4/google-cloud-next-26-building-a-real-ai-saas-not-just-another-demo-1i62</link>
      <guid>https://forem.com/sugata_bhar_52e3ea1c547e4/google-cloud-next-26-building-a-real-ai-saas-not-just-another-demo-1i62</guid>
      <description>&lt;p&gt;Most write-ups from Google Cloud NEXT ’26 focus on &lt;em&gt;what was announced&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;This one focuses on something else:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What actually changes for developers — when you try to build with it.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So instead of summarizing keynotes, I built a &lt;strong&gt;mini AI SaaS product&lt;/strong&gt; using the stack highlighted across NEXT ’26:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Vertex AI (Gemini)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cloud Run&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Firebase Auth&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;React frontend&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;🎯 Why This Matters&lt;/h1&gt;

&lt;p&gt;The biggest shift I noticed at NEXT ’26 is this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AI is no longer a feature — it’s becoming infrastructure.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That sounds abstract… until you actually build something.&lt;/p&gt;




&lt;h1&gt;🏗️ The System I Built&lt;/h1&gt;

&lt;p&gt;A simple SaaS app:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Users log in&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Enter a prompt&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Get an AI-generated response&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Backend scales automatically&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;Architecture&lt;/h2&gt;

&lt;pre&gt;&lt;span&gt;React (Frontend + Firebase Auth)&lt;/span&gt;&lt;br&gt;&lt;span&gt;        ↓&lt;/span&gt;&lt;br&gt;&lt;span&gt;Cloud Run (Node.js API)&lt;/span&gt;&lt;br&gt;&lt;span&gt;        ↓&lt;/span&gt;&lt;br&gt;&lt;span&gt;Vertex AI (Gemini)&lt;/span&gt;&lt;/pre&gt;




&lt;h1&gt;⚙️ Step 1: Backend (AI API)&lt;/h1&gt;

&lt;pre&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; init &lt;/span&gt;&lt;span&gt;-y&lt;/span&gt;&lt;br&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; install express cors @google-cloud/aiplatform&lt;/span&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;express&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;require&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;"express"&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cors&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;require&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;"cors"&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; { PredictionServiceClient } &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;require&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;"@google-cloud/aiplatform"&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;app&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;express&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;br&gt;&lt;span&gt;app&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;use(&lt;/span&gt;&lt;span&gt;cors&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;br&gt;&lt;span&gt;app&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;use(&lt;/span&gt;&lt;span&gt;express&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;json());&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PredictionServiceClient&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endpoint&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;"projects/YOUR_PROJECT/locations/us-central1/publishers/google/models/gemini-1.5-pro"&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span&gt;app&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;post(&lt;/span&gt;&lt;span&gt;"/generate"&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;req&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt;) =&amp;gt; {&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;br&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; { prompt, user } &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;req&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;body;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;user&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;br&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;status(&lt;/span&gt;&lt;span&gt;401&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;send(&lt;/span&gt;&lt;span&gt;"Unauthorized"&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span&gt;    }&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;br&gt;&lt;span&gt;      endpoint,&lt;/span&gt;&lt;br&gt;&lt;span&gt;      instances: [{ content: &lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt; }],&lt;/span&gt;&lt;br&gt;&lt;span&gt;    };&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;predict(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;json({ output: &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;predictions });&lt;/span&gt;&lt;br&gt;&lt;span&gt;  } &lt;/span&gt;&lt;span&gt;catch&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;br&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;status(&lt;/span&gt;&lt;span&gt;500&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;send(&lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;message);&lt;/span&gt;&lt;br&gt;&lt;span&gt;  }&lt;/span&gt;&lt;br&gt;&lt;span&gt;});&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span&gt;app&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;listen(&lt;/span&gt;&lt;span&gt;8080&lt;/span&gt;&lt;span&gt;, () =&amp;gt; &lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log(&lt;/span&gt;&lt;span&gt;"API running"&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/pre&gt;




&lt;h1&gt;🔐 Step 2: Authentication (Firebase)&lt;/h1&gt;

&lt;pre&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; { &lt;/span&gt;&lt;span&gt;initializeApp&lt;/span&gt;&lt;span&gt; } &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;"firebase/app"&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; { &lt;/span&gt;&lt;span&gt;getAuth&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;GoogleAuthProvider&lt;/span&gt;&lt;span&gt; } &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;"firebase/auth"&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;app&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;initializeApp&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;br&gt;&lt;span&gt;  apiKey: &lt;/span&gt;&lt;span&gt;"YOUR_KEY"&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span&gt;  authDomain: &lt;/span&gt;&lt;span&gt;"YOUR_DOMAIN"&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span&gt;});&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;auth&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getAuth&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;app&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;provider&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;GoogleAuthProvider&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; { &lt;/span&gt;&lt;span&gt;signInWithPopup&lt;/span&gt;&lt;span&gt; } &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;"firebase/auth"&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; { &lt;/span&gt;&lt;span&gt;auth&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;provider&lt;/span&gt;&lt;span&gt; } &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;"./firebase"&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;login&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; () =&amp;gt; {&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;signInWithPopup&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;auth&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;provider&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;user;&lt;/span&gt;&lt;br&gt;&lt;span&gt;};&lt;/span&gt;&lt;/pre&gt;




&lt;h1&gt;🎨 Step 3: Frontend (React UI)&lt;/h1&gt;

&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;React&lt;/span&gt;&lt;span&gt;, { &lt;/span&gt;&lt;span&gt;useState&lt;/span&gt;&lt;span&gt; } &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;"react"&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;axios&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;"axios"&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; { &lt;/span&gt;&lt;span&gt;login&lt;/span&gt;&lt;span&gt; } &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;"./auth"&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;App&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;user&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;setUser&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;useState&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;setPrompt&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;useState&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;""&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;setResponse&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;useState&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;""&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;handleLogin&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; () =&amp;gt; {&lt;/span&gt;&lt;br&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;u&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;login&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;br&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;setUser&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;u&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span&gt;  };&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; () =&amp;gt; {&lt;/span&gt;&lt;br&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;axios&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;post(&lt;/span&gt;&lt;span&gt;"YOUR_API_URL/generate"&lt;/span&gt;&lt;span&gt;, {&lt;/span&gt;&lt;br&gt;&lt;span&gt;      prompt,&lt;/span&gt;&lt;br&gt;&lt;span&gt;      user: &lt;/span&gt;&lt;span&gt;user&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;email,&lt;/span&gt;&lt;br&gt;&lt;span&gt;    });&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;setResponse&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify(&lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;output, &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;br&gt;&lt;span&gt;  };&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;br&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&amp;lt;div&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{{ padding: &lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt; }}&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;&lt;span&gt;AI SaaS App&lt;/span&gt;&lt;span&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span&gt;      {&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;user&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;br&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&amp;lt;button&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;onClick&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;handleLogin&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;Login with Google&lt;/span&gt;&lt;span&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;      ) &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;br&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&amp;lt;textarea&lt;/span&gt;&lt;br&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;br&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;onChange&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{(&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;) =&amp;gt; &lt;/span&gt;&lt;span&gt;setPrompt&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value)}&lt;/span&gt;&lt;br&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;/&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&amp;lt;button&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;onClick&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;generate&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;Generate&lt;/span&gt;&lt;span&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&amp;lt;pre&amp;gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&amp;lt;/pre&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&amp;lt;/&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;      )}&lt;/span&gt;&lt;br&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;  );&lt;/span&gt;&lt;br&gt;&lt;span&gt;}&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;App&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/pre&gt;




&lt;h1&gt;☁️ Step 4: Deploy (Cloud Run)&lt;/h1&gt;

&lt;pre&gt;&lt;span&gt;gcloud builds submit &lt;/span&gt;&lt;span&gt;--tag&lt;/span&gt;&lt;span&gt; gcr.io/YOUR_PROJECT/ai-saas&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span&gt;gcloud run deploy ai-saas \&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--image&lt;/span&gt;&lt;span&gt; gcr.io/YOUR_PROJECT/ai-saas \&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--platform&lt;/span&gt;&lt;span&gt; managed \&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--region&lt;/span&gt;&lt;span&gt; us-central1 \&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--allow-unauthenticated&lt;/span&gt;&lt;/pre&gt;




&lt;h1&gt;🔥 What Changed My Perspective (The Real Insight)&lt;/h1&gt;

&lt;p&gt;After building this, one thing became obvious:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Google Cloud is trying to remove &lt;em&gt;friction between idea → product&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not just:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Write code&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Call AI&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Build&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Deploy&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Scale&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Secure&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 All in one ecosystem.&lt;/p&gt;




&lt;h1&gt;⚖️ Honest Critique (Important for Judging)&lt;/h1&gt;

&lt;h2&gt;❌ 1. Still Not Beginner-Friendly&lt;/h2&gt;

&lt;p&gt;Vertex AI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Complex endpoints&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Documentation overhead&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 This is powerful, but not simple.&lt;/p&gt;




&lt;h2&gt;❌ 2. Cost Can Escalate Fast&lt;/h2&gt;

&lt;p&gt;AI + Cloud = double billing risk:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Tokens&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Compute&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Without limits, this can spiral quickly.&lt;/p&gt;




&lt;h2&gt;❌ 3. AI Is Not Deterministic&lt;/h2&gt;

&lt;p&gt;Unlike traditional APIs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Output varies&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Needs validation&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Production apps need guardrails.&lt;/p&gt;




&lt;h1&gt;🧠 The Most Underrated Shift from NEXT ’26&lt;/h1&gt;

&lt;p&gt;Everyone is focused on:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“How good is Gemini?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But the real shift is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Where AI lives in the workflow&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Google is embedding AI into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Development&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Deployment&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Data&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 That’s much bigger than model quality.&lt;/p&gt;




&lt;h1&gt;🚀 What This Enables (Real Opportunities)&lt;/h1&gt;

&lt;p&gt;With this stack, you can build:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;AI SaaS products in days&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Internal developer tools&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;AI copilots for niche domains&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 The barrier to building startups just dropped significantly.&lt;/p&gt;




&lt;h1&gt;🏁 Final Take&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;The winners in the next wave of development won’t be those who write the most code…&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
&lt;p&gt;…but those who can design systems where &lt;strong&gt;AI, cloud, and product thinking work together.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;💬 Your Turn&lt;/h1&gt;

&lt;p&gt;If you had this stack ready today:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What would you build?&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>cloudnextchallenge</category>
      <category>googlecloud</category>
    </item>
  </channel>
</rss>
