<?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: William</title>
    <description>The latest articles on Forem by William (@nightowl).</description>
    <link>https://forem.com/nightowl</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%2F3687804%2Fe809e257-c3d6-4770-8173-019640ed3560.jpg</url>
      <title>Forem: William</title>
      <link>https://forem.com/nightowl</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/nightowl"/>
    <language>en</language>
    <item>
      <title>TripSync — A Three-Tier Gemma 4 Travel Planner Running Live on Flask</title>
      <dc:creator>William</dc:creator>
      <pubDate>Sun, 10 May 2026 12:52:07 +0000</pubDate>
      <link>https://forem.com/nightowl/-tripsync-a-three-tier-gemma-4-travel-planner-running-live-on-flask-3iki</link>
      <guid>https://forem.com/nightowl/-tripsync-a-three-tier-gemma-4-travel-planner-running-live-on-flask-3iki</guid>
      <description>&lt;p&gt;This is a submission for the &lt;a href="https://dev.to/challenges/google-gemma-2026-05-06"&gt;Gemma 4 Challenge: Build With Gemma 4&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;TripSync is a live AI travel planner that takes plain-English trip descriptions and returns real destination recommendations with flight estimates, hotel options, and booking links.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live app:&lt;/strong&gt; &lt;a href="https://tripsync-ilao.onrender.com" rel="noopener noreferrer"&gt;tripsync-ilao.onrender.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/Tripsync-justmeMedia/tripsync" rel="noopener noreferrer"&gt;github.com/Tripsync-justmeMedia/tripsync&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stack:&lt;/strong&gt; Python / Flask · Vanilla HTML/JS · SQLite · Render · Ollama · Gemini API&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Gemma 4
&lt;/h2&gt;

&lt;p&gt;Every search on TripSync hits an AI API. Every destination card, every itinerary, every refinement — that's a call to a cloud model. Free tiers end. Traffic grows. And suddenly the thing you built for enjoyment is costing you money before it's made you a cent.&lt;/p&gt;

&lt;p&gt;Gemma 4 solved two problems at once:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The cost problem&lt;/strong&gt; — running locally means zero marginal cost per query. No traffic spike will break the budget.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The privacy problem&lt;/strong&gt; — travel data is personal. Budgets, travel dates, who you're travelling with. Gemma 4 running locally means that data never leaves the user's device. That's a real feature, not a marketing claim.&lt;/p&gt;

&lt;p&gt;I chose the &lt;code&gt;gemma4&lt;/code&gt; (9.6GB) model via Ollama for local inference on an M1 MacBook with 16GB unified memory — the limit of real consumer hardware. For the cloud API tier I chose &lt;code&gt;gemma-3-12b-it&lt;/code&gt; via the Gemini API — fast enough for live users, no local setup required.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Three-Tier Architecture
&lt;/h2&gt;

&lt;p&gt;TripSync runs three AI modes, switchable with one toggle:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;☁️ Cloud AI&lt;/strong&gt; — Groq, fast, reliable, the default&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✨ Gemma 4 Expert&lt;/strong&gt; — Gemma 4 12B via Gemini API, full Gemma 4 quality for every live user, no local setup needed&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔒 Private AI&lt;/strong&gt; — Gemma 4 running locally via Ollama, zero data leaving the device&lt;/p&gt;

&lt;p&gt;One toggle. All three live right now.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Local Gemma 4 endpoint:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nd"&gt;@app.route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/api/tripsync-local&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;methods&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;POST&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;tripsync_local&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;build_prompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;call_ollama&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;jsonify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;error&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Local AI unavailable&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt; &lt;span class="mi"&gt;503&lt;/span&gt;
    &lt;span class="n"&gt;parsed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;extract_json_safe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;parsed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;jsonify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;error&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Could not parse response&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;jsonify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;parsed&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Gemma 4 via Gemini API with silent fallback:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;call_gemma_api&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;GenerativeModel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemma-3-12b-it&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_content&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Gemma API error, falling back to Groq: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;call_groq&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Frontend toggle — three modes, one click:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;modes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cloud&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;gemma&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;local&lt;/span&gt;&lt;span class="dl"&gt;'&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;labels&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;cloud&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;icon&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;☁️&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Cloud AI&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;gemma&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;icon&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;✨&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Gemma 4 Expert&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;local&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;icon&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;🔒&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Private AI&lt;/span&gt;&lt;span class="dl"&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;h2&gt;
  
  
  What Gemma 4 Unlocked
&lt;/h2&gt;

&lt;p&gt;Before Gemma 4, TripSync had one AI mode — cloud, via Groq. Every query left the user's machine. Free tier limits capped growth.&lt;/p&gt;

&lt;p&gt;After Gemma 4:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Users with privacy concerns have a real, working, verifiable local option&lt;/li&gt;
&lt;li&gt;The app can serve Gemma 4 quality to live users via the Gemini API free tier at zero cost&lt;/li&gt;
&lt;li&gt;The architecture scales — local for privacy, API for quality, cloud for speed
Gemma 4 didn't just add a feature. It changed the architecture of the whole app.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Honest Performance Notes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Local cold start:&lt;/strong&gt; 30–45 seconds on M1 16GB. Warm queries under 1 second.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 4 Expert via API:&lt;/strong&gt; 10–15 seconds after warmup for three fully curated destination cards.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Silent fallback:&lt;/strong&gt; if the Gemini API rate limits or times out, Groq catches it instantly. Users never see an error.
Close Chrome when running local. Give Ollama the RAM it needs. The model isn't slow — a loaded machine is slow.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;Switch to &lt;strong&gt;✨ Gemma 4 Expert&lt;/strong&gt; mode on the live site and run any travel search. Results come back in 10–15 seconds with destination cards, match scores, booking links, and activity suggestions — all powered by Gemma 4.&lt;/p&gt;

&lt;p&gt;Switch to &lt;strong&gt;🔒 Private AI&lt;/strong&gt; mode and follow the GitHub setup guide to run it fully locally on your own machine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live app:&lt;/strong&gt; &lt;a href="https://tripsync-ilao.onrender.com" rel="noopener noreferrer"&gt;tripsync-ilao.onrender.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/Tripsync-justmeMedia/tripsync" rel="noopener noreferrer"&gt;github.com/Tripsync-justmeMedia/tripsync&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;William Commu — Just Me Media&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Minesing, Ontario&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://dev.to/nightowl"&gt;@nightowl on DEV&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>gemma</category>
      <category>gemmachallenge</category>
      <category>webdev</category>
      <category>devchallenge</category>
    </item>
    <item>
      <title>Gemma 4 on Real Hardware: Local Inference, Cloud API, and a Three-Tier Architecture That Actually Works</title>
      <dc:creator>William</dc:creator>
      <pubDate>Sat, 09 May 2026 22:13:58 +0000</pubDate>
      <link>https://forem.com/nightowl/no-degree-no-team-no-api-bill-i-shipped-gemma-4-into-my-travel-app-at-58-and-so-can-you-gemma-3oi7</link>
      <guid>https://forem.com/nightowl/no-degree-no-team-no-api-bill-i-shipped-gemma-4-into-my-travel-app-at-58-and-so-can-you-gemma-3oi7</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/google-gemma-2026-05-06"&gt;Gemma 4 Challenge: Write About Gemma 4&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Let me be straight with you before we get into any of this.&lt;br&gt;
I am 58 years old. Retired. I build products for enjoyment — income is just a by-product of the effort. ( and yes, that took me a long time to figure out, but once you do, everything changes ) I live in Minesing, Ontario. I have a cottage in Bracebridge. I work on projects at night, usually with a smoke and in my housecoat. ( don't judge me, it works )&lt;br&gt;
I have no computer science degree, no coding background, and no team. I am what people in this community politely call a "vibe coder" — which is a kind way of saying I build things with AI tools and a terminal and a lot of stubbornness. And push through. ( and push back ;) ) The tools are incredible and they will also confidently break your app and tell you it's your fault. Every. Single. Time. ( you get used to it, I promise )&lt;br&gt;
Over the last year I built three live products from scratch:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Events Arena&lt;/strong&gt; — a live sports prediction platform with Soccer, NHL, and expandable arenas for any type of event &lt;a href="https://www.sportsprophecyapp.com" rel="noopener noreferrer"&gt;https://www.sportsprophecyapp.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SaaS Price DB&lt;/strong&gt; — a REST API tracking pricing data for 1,000+ B2B SaaS tools &lt;a href="https://saaspricedb.com" rel="noopener noreferrer"&gt;https://saaspricedb.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TripSync&lt;/strong&gt; — an AI travel planner that takes plain-English trip descriptions and returns real destinations with flight estimates and booking links &lt;a href="https://tripsync-ilao.onrender.com" rel="noopener noreferrer"&gt;https://tripsync-ilao.onrender.com&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;I built TripSync for myself.&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Every winter I travel for 3–4 months. Multiple countries. Multiple cities. I move around — I don't sit in one place and call it a vacation. Canadian winters are not for me anymore. ( hard pass, no thank you, never again ) Planning those trips used to mean hours of browser tabs, scattered booking sites, trying to hold flight prices and hotel options and visa requirements in my head at the same time. Premium economy for long flights, economy for short ones. ( yes I have a system, don't we all )&lt;/p&gt;

&lt;p&gt;TripSync was my solution to my own problem. I am the user.&lt;/p&gt;

&lt;p&gt;This post is about what I added to it during the Gemma 4 Challenge, and what I actually found. Not what I hoped to find. What I actually found. ( spoiler: I was surprised, in the best way )&lt;/p&gt;
&lt;h2&gt;
  
  
  The Fear Every Solo Builder Has But Won't Say Out Loud
&lt;/h2&gt;

&lt;p&gt;I'll be honest about why I'm here because that's the kind of post this is.&lt;/p&gt;

&lt;p&gt;I'm in this contest for three reasons: the prize money, the exposure for my projects, and genuinely wanting to help other builders who are in the same position I was six months ago. All three matter. None of them are secret. ( refreshing right? )&lt;/p&gt;

&lt;p&gt;But the thing that got me paying attention to Gemma 4 specifically? The API bill.&lt;/p&gt;

&lt;p&gt;I try to build all my projects at zero budget. When a project makes some income, I reinvest a part of that into growth. If it makes nothing, I don't put myself in a worse position than I was before the project existed. That's the rule. ( simple rule, hard to follow when you're excited about an idea at 2am, but still the rule )&lt;/p&gt;

&lt;p&gt;Every search on TripSync hits an AI API. Every destination card, every itinerary, every refinement — that's a call to a cloud model. Right now I'm on free tiers. But free tiers end. Traffic grows. And suddenly the thing you built for enjoyment is costing you money before it's made you a cent. ( we've all seen this movie and it doesn't end well )&lt;/p&gt;

&lt;p&gt;So when the Gemma 4 Challenge came up — Google's open model family that runs locally, for free, no API calls, no data leaving the device — I thought: this is the exact problem I think about. Let me actually try it on a real app.&lt;/p&gt;
&lt;h2&gt;
  
  
  What Gemma 4 Is, In Plain English
&lt;/h2&gt;

&lt;p&gt;Skip this if you already know. Stay if you're like me and need someone to explain it without assuming a PhD is hiding in your back pocket. ( it's not, I checked )&lt;br&gt;
Gemma 4 is a family of AI models Google released as open weights. You download the model and run it on your own hardware. No subscription. No per-token charges. No sending user data to a third-party server. ( yes, really, I know, wild )&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;The family spans four sizes:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;E2B / E4B&lt;/strong&gt; — tiny, run on phones and Raspberry Pis ( yes, that little $75 thing )&lt;br&gt;
&lt;strong&gt;12B&lt;/strong&gt; — sweet spot for most developer laptops&lt;br&gt;
&lt;strong&gt;27B dense&lt;/strong&gt; - the workhorse, needs more RAM&lt;br&gt;
&lt;strong&gt;26B MoE&lt;/strong&gt; — efficient, built for high-throughput reasoning&lt;/p&gt;

&lt;p&gt;I have a MacBook Pro M1 with 16GB of unified memory. Not a beast of a machine. The kind of setup a lot of solo builders actually have sitting on their desk next to a cold coffee. ( always a cold coffee )&lt;/p&gt;

&lt;p&gt;The question I wanted to answer: &lt;em&gt;can Gemma 4 run meaningfully on real hardware that real people actually own?&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  What I Actually Built — And It's Actually Live
&lt;/h2&gt;

&lt;p&gt;I want to be honest here because I've read enough contest posts that oversell what was built. ( we all have, no names, you know who you are ) I'm not going to do that to you. But I'm also not going to undersell it.&lt;/p&gt;

&lt;p&gt;TripSync runs on Flask and Groq on Render. And as of this submission, &lt;em&gt;Gemma 4 is fully integrated across three tiers — all live.&lt;/em&gt; That's not a proof of concept. That's shipped. ( I'll be honest, I didn't think I'd be writing that sentence when I started this )&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;☁️ Cloud AI →&lt;/strong&gt; Groq — fast, reliable, the default for all users&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;2.&lt;strong&gt;✨ Gemma 4 Expert →&lt;/strong&gt; Gemma 4 26B via Gemini API — full Gemma 4 quality served to every user on the live site, no local setup needed. "Honest note on speed: the Gemma 4 Expert tier runs 10-15 seconds on the live site — the same cold-start reality as local, just in the cloud. Cloud AI via Groq is faster for snappy results. Gemma 4 Expert is for when you want the model, not just the speed. ( different tools, different purposes, both have their place )"&lt;br&gt;
3.&lt;strong&gt;🔒 Private AI →&lt;/strong&gt; Ollama on your own machine — fully local, fully private, zero data leaving your device&lt;/p&gt;

&lt;p&gt;Three modes. One toggle. All live right now at &lt;a href="https://tripsync-ilao.onrender.com" rel="noopener noreferrer"&gt;https://tripsync-ilao.onrender.com&lt;/a&gt;&lt;br&gt;
Here's exactly what went in:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Pulled Gemma 4 via Ollama&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bash
ollama pull gemma4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;9.6GB. I watched the progress bar and thought — this is the whole model. On my laptop. No monthly bill. ( I actually said "wild" out loud to nobody at 2pm on a Saturday, the housecoat was involved )&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Added dedicated local endpoints in server.py&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="nd"&gt;@app.route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/api/tripsync-local&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;methods&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;POST&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;tripsync_local&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="c1"&gt;# exact mirror of /api/tripsync
&lt;/span&gt;    &lt;span class="c1"&gt;# calls call_ollama() instead of Groq
&lt;/span&gt;    &lt;span class="bp"&gt;...&lt;/span&gt;

&lt;span class="nd"&gt;@app.route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/api/generate-itinerary-local&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;methods&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;POST&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;generate_itinerary_local&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;destination&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;destination&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;''&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;days&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;days&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;currency&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;currency&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;USD&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;build_itinerary_prompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;destination&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;days&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;currency&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;call_ollama&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;jsonify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;error&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Local AI unavailable&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt; &lt;span class="mi"&gt;503&lt;/span&gt;
    &lt;span class="n"&gt;parsed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;extract_json_safe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;parsed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;jsonify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;error&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Could not parse response&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;jsonify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;parsed&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. A ☁️ / 🔒 toggle across the whole app&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One click switches between Cloud AI and Private AI across both &lt;code&gt;index.html&lt;/code&gt; and &lt;code&gt;planner.html&lt;/code&gt;. Persists in localStorage. Every fetch routes to the right endpoint automatically. ( one click, that's it, I love when things are actually simple )&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. The badge&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When Private AI mode is active, results show "✨ Curated locally by Gemma 4" — so users know exactly what's powering their plan. Not a marketing claim. A real signal from a real local model doing real work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Honest error handling&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On the live site, Private AI requires a local machine running Ollama. When it's not available, users see exactly why — and a direct link to the GitHub repo with setup instructions. No broken states. No dead ends. ( this one I'm proud of )&lt;/p&gt;

&lt;p&gt;Three new routes. A dual-mode toggle. A badge. Clean repo push. I'm a vibe coder — if I can't understand what I'm building, I can't build it. Simple on purpose. Always. ( complexity is not a flex, it's a future problem )&lt;/p&gt;

&lt;h2&gt;
  
  
  What Actually Happened When I Ran It
&lt;/h2&gt;

&lt;p&gt;Cold start on a 9.6GB model takes 30–45 seconds. The spinner spins. You sit there. You wonder if you broke something. ( you probably did break something, but not this time )&lt;/p&gt;

&lt;p&gt;Then it responds.&lt;/p&gt;

&lt;p&gt;I'll be straight with you — Gemma 4 runs noticeably slower than the lighter Gemma 3 8B model on my M1 with 16GB. When the machine is loaded — Chrome eating memory, other tabs open — you feel it. That's real. That's the honest finding. ( and yes I'm telling you this in a competition post, because you deserve to know )&lt;/p&gt;

&lt;p&gt;The fix is simple: close Chrome, give Ollama room to breathe, restart with &lt;code&gt;ollama stop&lt;/code&gt; then &lt;code&gt;ollama serve&lt;/code&gt;. The model isn't slow — a loaded machine is slow. There's a difference.&lt;/p&gt;

&lt;p&gt;Once it's warm on a clean machine:&lt;strong&gt;under 1 second per query&lt;/strong&gt;. And the quality is worth it.&lt;/p&gt;

&lt;p&gt;I sat back on a Saturday afternoon with the light coming through the window and just looked at the screen for a moment. A model running entirely on my MacBook — no internet required for the inference — returning detailed travel itineraries faster than a cloud API call. ( I may have done a small fist pump, I'm not confirming or denying )&lt;/p&gt;

&lt;p&gt;I tested it with Thailand. Seven days, solo traveller, flying from Toronto, budget accommodation. Chiang Mai came back as the top result. I've actually been to Chiang Mai. The recommendations — Doi Suthep sunrise, Khao Soi noodles, the elephant sanctuary, the night bazaar — those are real. That captures the vibe of that city in a way that only someone who's actually been there would recognize. ( Gemma 4 has not been to Chiang Mai, and yet, somehow, it gets it )&lt;/p&gt;

&lt;p&gt;I expected to write a post about why it didn't quite work. That's not the post I'm writing. ( surprised myself on this one )&lt;/p&gt;

&lt;h2&gt;
  
  
  The API Cost Math
&lt;/h2&gt;

&lt;p&gt;On Groq's free tier: roughly 250–333 TripSync searches per day before hitting limits. For a travel app with real traffic that's nothing — a slow Tuesday afternoon. ( a very slow Tuesday )&lt;/p&gt;

&lt;p&gt;With Gemma 4 running locally: unlimited. Zero marginal cost. The only constraint is hardware I already own.&lt;/p&gt;

&lt;p&gt;What I've proven is that Gemma 4 is production-quality for this use case. The model is good enough. That's the more valuable finding — I wasn't sure it would be. It is. ( important distinction, write that down )&lt;/p&gt;

&lt;h2&gt;
  
  
  The Privacy Thing I Didn't Expect to Care About
&lt;/h2&gt;

&lt;p&gt;I travel a lot. I type things like "romantic trip for two, budget $4,000, leaving Toronto in January, somewhere warm, private villa preferred" into travel tools.&lt;/p&gt;

&lt;p&gt;That's personal. Budget. Travel dates. Who I'm with. Where I'm going.&lt;/p&gt;

&lt;p&gt;In Cloud AI mode, that goes to Groq. Groq has a privacy policy. I'm not suggesting anything nefarious. But it leaves my machine. ( it just does, that's the reality )&lt;/p&gt;

&lt;p&gt;When I ran the same search in Private AI mode — knowing it went from browser to local Flask to Ollama on my CPU and back, never touching an external server — I felt something I didn't expect.&lt;/p&gt;

&lt;p&gt;Relief. Genuine relief.&lt;/p&gt;

&lt;p&gt;There's a version of TripSync where users who care about privacy actually have it as a real, working, verifiable option. Not a marketing claim. Not a checkbox. A toggle that actually means something. Gemma 4 makes that possible. Given that I built this tool for my own travel planning, that's not abstract to me. It's personal. ( built it for me, privacy matters to me, simple )&lt;/p&gt;

&lt;h2&gt;
  
  
  Wait — Can You Use Gemma 4 on a Live Site Without a Local Machine?
&lt;/h2&gt;

&lt;p&gt;Yes. And this is worth knowing.&lt;/p&gt;

&lt;p&gt;Google offers Gemma 4 through the &lt;em&gt;Gemini API via Google AI Studio&lt;/em&gt; — free tier, no credit card required. That means you can point a live deployed app at it and serve real users without anyone needing Ollama installed locally.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;pythonimport&lt;/span&gt; &lt;span class="n"&gt;google&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;generativeai&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;

&lt;span class="n"&gt;genai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;configure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_GEMINI_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;GenerativeModel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemma-3-27b-it&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_content&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;your_prompt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;This is now live on TripSync.&lt;/strong&gt; All three tiers are working:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;☁️ Cloud AI&lt;/strong&gt; → Groq — fast, reliable, the default&lt;br&gt;
&lt;strong&gt;✨ Gemma 4 Expert&lt;/strong&gt; → Gemma 4 26B via Gemini API — full Gemma 4 quality for every user on the live site, no local setup needed&lt;br&gt;
&lt;strong&gt;🔒 Private AI&lt;/strong&gt; → Ollama on your own machine — fully local, fully private, zero data leaving your device&lt;/p&gt;

&lt;p&gt;The honest trade-off on the middle tier: the Gemini API means data still leaves the user's machine — so it's not private in the same way local is. It's Gemma 4, but it's cloud-hosted. That distinction matters. Don't call it Private AI if it isn't. ( your users will figure it out and trust matters more than marketing )&lt;br&gt;
For builders who want Gemma 4 quality on a live site today without wrestling with local inference infrastructure — the Gemini API free tier is your answer. Start there, go local when you're ready.&lt;/p&gt;
&lt;h2&gt;
  
  
  Match Your Hardware to the Right Model
&lt;/h2&gt;

&lt;p&gt;This is the section I wish existed when I started. Pulling the wrong model for your machine is how you end up staring at a spinning cursor for four minutes wondering what you broke. ( I have been that person, I am saving you from being that person )&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8GB RAM&lt;/strong&gt; — Don't pull the full Gemma 4. Use E2B or E4B. Lighter, faster, genuinely capable for most text generation and summarization tasks.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bash
ollama pull gemma4:2b

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;16GB RAM&lt;/strong&gt; — like mine — The full &lt;code&gt;gemma4&lt;/code&gt; (9.6GB) works, but be disciplined about what else is running. Close Chrome. Give Ollama the room it needs. For faster day-to-day iteration, Gemma 3 8B is your workhorse — switch to Gemma 4 when output quality really matters.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bash
ollama pull gemma4      &lt;span class="c"&gt;# full quality, needs a clean machine&lt;/span&gt;
ollama pull gemma3:8b   &lt;span class="c"&gt;# faster, great for iteration&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;32GB+&lt;/strong&gt; — This is where Gemma 4 opens up completely. Run it comfortably alongside other apps, and start looking at the 27B dense model for anything needing heavy reasoning or long context.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bash
ollama pull gemma4:27b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;64GB+ / VPS&lt;/strong&gt; — The 26B MoE model is built for this. High throughput, advanced reasoning, surprisingly efficient. This is the production architecture for serving real users at scale.&lt;/p&gt;

&lt;p&gt;The rule of thumb: take your available RAM, subtract 4GB for your OS, and don't load a model larger than what's left. A model that fits comfortably runs fast. A model that's squeezed runs slow and makes you think it's broken. ( it's not broken, it's just cramped )&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Older hardware?&lt;/strong&gt; 100% get the lighter versions and go to town — genuinely capable, completely free, ready right now. &lt;strong&gt;Newer hardware?&lt;/strong&gt; Gemma 4 is lights out. No bill. No limits. No excuses.&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Means For YOUR Project
&lt;/h2&gt;

&lt;p&gt;Everything I found with TripSync applies to whatever you're building right now. ( yes, you, the one reading this at 11pm )&lt;/p&gt;

&lt;p&gt;If your app makes AI calls you have the same three problems I had — the cost ceiling, the privacy gap, and the complexity fear. Gemma 4 is the same answer for all of them, whether you're building a recipe generator, a fitness coach, a journaling tool, or a customer support bot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The cost problem&lt;/strong&gt; — Gemma 4 running locally costs nothing after the download. One traffic spike won't break you. That's a real architectural choice you can make today on hardware you already own.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The privacy problem&lt;/strong&gt; — think about what your users type into your app. Health symptoms. Financial situations. Relationship problems. That data is personal. Gemma 4 means it never has to leave their machine. Most of your competitors can't offer that. You can. For free.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The complexity problem&lt;/strong&gt; — I added Gemma 4 to a live production app in a weekend. I am not a developer. I am a 58-year-old retired guy in a housecoat. If I can do it, you can do it. The model does the hard part. You just point your app at it.&lt;/p&gt;

&lt;p&gt;The barrier to entry is one terminal command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bash
ollama pull gemma4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. That's the whole barrier.&lt;/p&gt;

&lt;p&gt;Local AI is no longer a research project. It's a practical tool, available right now, on the machine sitting on your desk. I didn't expect to feel that strongly about this going in. I expected a neat experiment. What I got was a genuine shift in how I think about building things.&lt;/p&gt;

&lt;p&gt;That's worth more than any prize. ( though the prize would also be nice, not going to lie )&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next For TripSync
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;✅ Gemma 4 via Gemini API&lt;/strong&gt; — live now, serving all users on the public site&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pre-warm on server start&lt;/strong&gt; — eliminate the cold-start wait for local mode&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Side-by-side performance comparison&lt;/strong&gt; — let users see the difference across all three tiers and choose with real information&lt;/p&gt;

&lt;p&gt;The live app: &lt;a href="https://tripsync-ilao.onrender.com" rel="noopener noreferrer"&gt;https://tripsync-ilao.onrender.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The code: &lt;a href="https://github.com/Tripsync-justmeMedia/tripsync" rel="noopener noreferrer"&gt;https://github.com/Tripsync-justmeMedia/tripsync&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  One Last Thing
&lt;/h2&gt;

&lt;p&gt;Build something you enjoy. That's the whole advice.&lt;/p&gt;

&lt;p&gt;If you enjoyed the process, keep going — building anything is possible for you now. If you didn't enjoy it, maybe the answer isn't more building. Maybe it's marketing, or community, or writing, or getting outside and touching grass. ( seriously, touch grass, it resets everything )&lt;/p&gt;

&lt;p&gt;When things feel tough — step away. Take a breath. The right choices come to the top when you give them room. ( learned this the hard way, more than once )&lt;/p&gt;

&lt;p&gt;The point isn't to become a developer. The point is to find what gives you energy and do more of that.&lt;/p&gt;

&lt;p&gt;Good luck to everyone in the competition. Good luck with your projects. Whatever you're building — keep going.&lt;/p&gt;

&lt;p&gt;Be good to yourself and others.&lt;/p&gt;

&lt;p&gt;Nightowl out. ☮️&lt;/p&gt;

&lt;p&gt;William Commu — Just Me Media&lt;br&gt;
Minesing, Ontario | Cottage in Bracebridge&lt;br&gt;
&lt;a class="mentioned-user" href="https://dev.to/nightowl"&gt;@nightowl&lt;/a&gt; on DEV&lt;br&gt;
TripSync: &lt;a href="https://tripsync-ilao.onrender.com" rel="noopener noreferrer"&gt;https://tripsync-ilao.onrender.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gemmachallenge</category>
      <category>gemma</category>
      <category>devchallenge</category>
      <category>webdev</category>
    </item>
    <item>
      <title>3 products. 1 year. Zero users. Here's my honest update at 58 and what I'm doing differently</title>
      <dc:creator>William</dc:creator>
      <pubDate>Sat, 09 May 2026 17:28:29 +0000</pubDate>
      <link>https://forem.com/nightowl/3-products-1-year-zero-users-heres-my-honest-update-at-58-and-what-im-doing-differently-5cji</link>
      <guid>https://forem.com/nightowl/3-products-1-year-zero-users-heres-my-honest-update-at-58-and-what-im-doing-differently-5cji</guid>
      <description>&lt;p&gt;In the last year I taught myself to build three complete products from scratch using AI as my development partner.&lt;br&gt;
A live sports prediction platform. An AI travel planner. A SaaS pricing intelligence API.&lt;br&gt;
All live. All polished. Zero paying users across all three.&lt;br&gt;
I'm not bitter about it. I learned more in one year than most people learn in five. But I'm being honest with myself now — I'm a builder, not a marketer. I love the craft. I don't love finding customers.&lt;br&gt;
So I'm doing something different. I'm looking for a co-founder who has the customer relationships and the problem. I'll build the solution.&lt;br&gt;
I build. You sell. We split it fairly.&lt;br&gt;
Three live products to prove I ship: sportsprophecyapp.com | tripsync-ilao.onrender.com | saaspricedb.com&lt;br&gt;
Company: Just Me Media | Canada | Remote friendly&lt;br&gt;
If any of this resonates — drop a comment or reach out.&lt;br&gt;
MVNFRWRD. 🦉&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>cofounder</category>
      <category>startup</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>3 products. 1 year. Zero users. Here's my honest update at 58 and what I'm doing differently</title>
      <dc:creator>William</dc:creator>
      <pubDate>Sat, 09 May 2026 17:28:29 +0000</pubDate>
      <link>https://forem.com/nightowl/3-products-1-year-zero-users-heres-my-honest-update-at-58-and-what-im-doing-differently-emo</link>
      <guid>https://forem.com/nightowl/3-products-1-year-zero-users-heres-my-honest-update-at-58-and-what-im-doing-differently-emo</guid>
      <description>&lt;p&gt;In the last year I taught myself to build three complete products from scratch using AI as my development partner.&lt;br&gt;
A live sports prediction platform. An AI travel planner. A SaaS pricing intelligence API.&lt;br&gt;
All live. All polished. Zero paying users across all three.&lt;br&gt;
I'm not bitter about it. I learned more in one year than most people learn in five. But I'm being honest with myself now — I'm a builder, not a marketer. I love the craft. I don't love finding customers.&lt;br&gt;
So I'm doing something different. I'm looking for a co-founder who has the customer relationships and the problem. I'll build the solution.&lt;br&gt;
I build. You sell. We split it fairly.&lt;br&gt;
Three live products to prove I ship: sportsprophecyapp.com | tripsync-ilao.onrender.com | saaspricedb.com&lt;br&gt;
Company: Just Me Media | Canada | Remote friendly&lt;br&gt;
If any of this resonates — drop a comment or reach out.&lt;br&gt;
MVNFRWRD. 🦉&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>cofounder</category>
      <category>startup</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title># SaaSPriceDB: Real-Time Pricing API – My Vibe-Coding Journey from Zero Experience at 58 🦉</title>
      <dc:creator>William</dc:creator>
      <pubDate>Mon, 05 Jan 2026 06:20:36 +0000</pubDate>
      <link>https://forem.com/nightowl/-saaspricedb-real-time-pricing-api-my-vibe-coding-journey-from-zero-experience-at-58-koe</link>
      <guid>https://forem.com/nightowl/-saaspricedb-real-time-pricing-api-my-vibe-coding-journey-from-zero-experience-at-58-koe</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the DEV's Worldwide Show and Tell Challenge Presented by Mux&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Hey DEV community 👋&lt;/p&gt;

&lt;p&gt;I'm William, 58 years old, solo founder of Just Me Media, and a proud NightOwl (Claude even certified me — I’ve got some really funny screen recordings of me and Claude going back and forth 😂). Most nights around 3 a.m., you’ll find me in my house coat, talking to LLMs like Claude, ChatGPT, and Grok — describing ideas and watching them build real software. I call it &lt;strong&gt;vibe coding&lt;/strong&gt;: no syntax wars, just prompts, vibes, and results.&lt;/p&gt;

&lt;p&gt;Two months ago, I had &lt;strong&gt;zero coding experience&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;SaaSPriceDB&lt;/strong&gt; — a clean, production-ready REST API that delivers structured, real-time pricing data for &lt;strong&gt;185+&lt;/strong&gt; popular SaaS tools (and growing fast): Slack, Shopify, Stripe, Salesforce, Notion, GitHub, Zoom, MongoDB, and many more.&lt;/p&gt;

&lt;p&gt;It solves a real pain point: developers waste hours scraping fragile pricing pages that change frequently and break scrapers constantly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Daily automatic updates + price change detection&lt;/li&gt;
&lt;li&gt;Reliable structured JSON — no more manual maintenance or broken scripts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free public preview endpoint&lt;/strong&gt; (no signup, no API key — shows 5 sample products: Slack, Notion, Zoom, Asana, GitHub): &lt;a href="https://api.saaspricedb.com/api/free-preview" rel="noopener noreferrer"&gt;https://api.saaspricedb.com/api/free-preview&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Interactive Swagger API docs (explore structure publicly): &lt;a href="https://api.saaspricedb.com/docs" rel="noopener noreferrer"&gt;https://api.saaspricedb.com/docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Full access via API key (paid plans or judge special key) for 185+ tools, historical data, higher limits&lt;/li&gt;
&lt;li&gt;Live site: &lt;a href="https://saaspricedb.com" rel="noopener noreferrer"&gt;https://saaspricedb.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s in launch mode with limited-time early access pricing — coverage is expanding rapidly.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Pitch Video
&lt;/h2&gt;

&lt;p&gt;Here’s my under-1-minute talking-head pitch (recorded and edited by a total beginner in iMovie):&lt;/p&gt;

&lt;p&gt;

&lt;iframe src="https://player.mux.com/Aiq01iYM01rM7Vh9TLAAvib8jZt9uxVpDbdIBMP7GP01Ds" width="710" height="399"&gt;
&lt;/iframe&gt;



&lt;/p&gt;

&lt;p&gt;My 1st try was like 4 minutes — this was the hardest part of the challenge for me! 😅&lt;br&gt;&lt;br&gt;
In 60 seconds or less: the problem I solved,what makes SaaSPriceDB special,some of the features, real time walk though on the ease of setup and a quick look at how it works.&lt;br&gt;&lt;br&gt;
(Hosted, sub titles &amp;amp; delivered smoothly via Mux — perfect for indie pitches! Will add quick app demo footage soon for the &lt;strong&gt;Enterprise Package&lt;/strong&gt;.)&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo &amp;amp; Testing (Super Easy – No Signup Needed!)
&lt;/h2&gt;

&lt;p&gt;Judges and community: please test away!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Instant free preview&lt;/strong&gt; (public JSON, no key required — 5 samples): &lt;a href="https://api.saaspricedb.com/api/free-preview" rel="noopener noreferrer"&gt;https://api.saaspricedb.com/api/free-preview&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive Swagger docs&lt;/strong&gt; (view endpoints &amp;amp; structure): &lt;a href="https://api.saaspricedb.com/docs" rel="noopener noreferrer"&gt;https://api.saaspricedb.com/docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Live website: &lt;a href="https://saaspricedb.com" rel="noopener noreferrer"&gt;https://saaspricedb.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(Note: Full dataset requires an API key — see judges section below for easy full access.)&lt;/p&gt;

&lt;h3&gt;
  
  
  Special Note for DEV Challenge Judges – Full Access Made Easy!
&lt;/h3&gt;

&lt;p&gt;Thanks for reviewing! 🚀  &lt;/p&gt;

&lt;p&gt;To test the full power (185+ tools, historical price changes, high enterprise limits, etc.):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The site uses an &lt;strong&gt;API key system&lt;/strong&gt; (no traditional signup/login buttons visible on the landing page).&lt;/li&gt;
&lt;li&gt;For instant full access: reply or DM me here on DEV with "judge access" — I'll send you:

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;special enterprise-level API key&lt;/strong&gt; (high limits, full features)&lt;/li&gt;
&lt;li&gt;OR a &lt;strong&gt;magic link&lt;/strong&gt; to the dashboard where the Judges' Cheat Sheet auto-loads with your key, interactive tester, Swagger guide, test card (4242 4242 4242 4242), etc.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Once you have the key, authorize in Swagger (&lt;a href="https://api.saaspricedb.com/docs" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://api.saaspricedb.com/docs" rel="noopener noreferrer"&gt;https://api.saaspricedb.com/docs&lt;/a&gt;) → Bearer token → test any endpoint (e.g. /pricing/).&lt;/li&gt;

&lt;li&gt;Close any welcome popup with "X" or "Got it, let's explore!"&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Zero friction — happy to send instantly. Appreciate your time and feedback!&lt;/p&gt;

&lt;h2&gt;
  
  
  The Story Behind It
&lt;/h2&gt;

&lt;p&gt;My first project was &lt;a href="https://www.sportsprophecyapp.com/" rel="noopener noreferrer"&gt;https://www.sportsprophecyapp.com/&lt;/a&gt; — my vision of a user/sponsor ecosystem that’s adaptable for any event, television show, or social media moment — a fun, no-gambling sports prediction platform where fans pick winners for sponsor prizes. I learned massively through failure, late-night fixes, and rebuilds… but realized passion alone isn’t enough.&lt;/p&gt;

&lt;p&gt;I needed to solve a &lt;strong&gt;real problem people are already searching for&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So I asked Claude one night:&lt;br&gt;&lt;br&gt;
“What’s a painful problem we can solve with a simple tool?”&lt;/p&gt;

&lt;p&gt;The answer: fragile SaaS pricing scrapers that devs hate maintaining.&lt;/p&gt;

&lt;p&gt;When I found the domain saaspricedb.com had no owner and realized the branding would be insane… well, I was hooked on the idea to build this.&lt;/p&gt;

&lt;p&gt;That same night, &lt;strong&gt;SaaSPriceDB&lt;/strong&gt; was born — fully vibe-coded with LLM help from start to finish.&lt;/p&gt;

&lt;p&gt;If a 58-year-old beginner with zero tech background can ship a production API… anyone can.&lt;br&gt;&lt;br&gt;
The fails, the late nights, the small wins — they’re all part of the story.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My advice for late starters:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Use the tools. Keep trying. Fail, get up, keep moving forward. Enjoy the journey. All of us have the same final destination; it’s the journey that sets us apart as individuals.&lt;/p&gt;

&lt;p&gt;I’d love your honest feedback, suggestions for the next SaaS tool to add, or your own vibe-coding stories!&lt;br&gt;&lt;br&gt;
Early testers/collaborators for feedback, ratings, social proof, indie SaaS ideas — please say hi! 🦉&lt;br&gt;&lt;br&gt;
(Also open to the idea of a collaboration with others on a % basis to grow this into something that truly benefits others.)&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical Highlights
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Built entirely via vibe-coding: describe → prompt LLMs → refine → deploy&lt;/li&gt;
&lt;li&gt;Daily cron jobs for updates + change detection&lt;/li&gt;
&lt;li&gt;Simple REST API with structured JSON (public preview + authenticated full access)&lt;/li&gt;
&lt;li&gt;Designed to scale as more tools are added&lt;/li&gt;
&lt;li&gt;Through feedback, this tool truly grows to solve problems, save time, and create opportunities&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Use of Mux (Bonus Category)
&lt;/h2&gt;

&lt;p&gt;I used Mux to host and deliver my pitch video reliably — fast loading, great quality, and zero hassle for a beginner creator. Simple but effective, and there are more options I’ll learn and use with upcoming posts!&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next: Sports Prophecy
&lt;/h2&gt;

&lt;p&gt;While building SaaSPriceDB, was solving a problem. Im back to building and launching &lt;strong&gt;Sports Prophecy&lt;/strong&gt; my 1st app ever&lt;br&gt;
(&lt;a href="https://www.sportsprophecyapp.com" rel="noopener noreferrer"&gt;https://www.sportsprophecyapp.com&lt;/a&gt;) — a real-time community prediction &lt;br&gt;
platform for sports, events, and live streaming.&lt;/p&gt;

&lt;p&gt;Same vibe-coding approach. Same "build with AI, iterate fast" philosophy.&lt;/p&gt;

&lt;p&gt;Early users welcome. Check it out and let me know what you think!&lt;/p&gt;

&lt;p&gt;Thanks for reading, watching, and joining me on this journey. Still learning every day. &lt;strong&gt;NightOwl&lt;/strong&gt; 🦉&lt;/p&gt;

&lt;h1&gt;
  
  
  showdev #saas #api #nocode #devchallenge #muxchallenge #webdev #Anthropic #Google #Antigravity
&lt;/h1&gt;

</description>
      <category>muxchallenge</category>
      <category>showdev</category>
      <category>beginners</category>
      <category>devchallenge</category>
    </item>
    <item>
      <title># SaaSPriceDB: Real-Time Pricing API – My Vibe-Coding Journey from Zero Experience at 58 🦉</title>
      <dc:creator>William</dc:creator>
      <pubDate>Thu, 01 Jan 2026 10:28:43 +0000</pubDate>
      <link>https://forem.com/nightowl/saaspricedb-real-time-pricing-api-my-vibe-coding-journey-from-zero-experience-at-58-4i17</link>
      <guid>https://forem.com/nightowl/saaspricedb-real-time-pricing-api-my-vibe-coding-journey-from-zero-experience-at-58-4i17</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the DEV's Worldwide Show and Tell Challenge Presented by Mux&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Hey DEV community 👋&lt;/p&gt;

&lt;p&gt;I'm William, 58 years old, solo founder of Just Me Media, and a proud NightOwl (Claude even certified me — I’ve got some really funny screen recordings of me and Claude going back and forth 😂). Most nights around 3 a.m., you’ll find me in my house coat, talking to LLMs like Claude, ChatGPT, and Grok — describing ideas and watching them build real software. I call it &lt;strong&gt;vibe coding&lt;/strong&gt;: no syntax wars, just prompts, vibes, and results.&lt;/p&gt;

&lt;p&gt;Two months ago, I had &lt;strong&gt;zero coding experience&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;SaaSPriceDB&lt;/strong&gt; — a clean, production-ready REST API that delivers structured, real-time pricing data for &lt;strong&gt;185+&lt;/strong&gt; popular SaaS tools (and growing fast): Slack, Shopify, Stripe, Salesforce, Notion, GitHub, Zoom, MongoDB, and many more.&lt;/p&gt;

&lt;p&gt;It solves a real pain point: developers waste hours scraping fragile pricing pages that change frequently and break scrapers constantly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Daily automatic updates + price change detection&lt;/li&gt;
&lt;li&gt;Reliable structured JSON — no more manual maintenance or broken scripts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free public preview endpoint&lt;/strong&gt; (no signup, no API key — shows 5 sample products: Slack, Notion, Zoom, Asana, GitHub): &lt;a href="https://api.saaspricedb.com/api/free-preview" rel="noopener noreferrer"&gt;https://api.saaspricedb.com/api/free-preview&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Interactive Swagger API docs (explore structure publicly): &lt;a href="https://api.saaspricedb.com/docs" rel="noopener noreferrer"&gt;https://api.saaspricedb.com/docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Full access via API key (paid plans or judge special key) for 185+ tools, historical data, higher limits&lt;/li&gt;
&lt;li&gt;Live site: &lt;a href="https://saaspricedb.com" rel="noopener noreferrer"&gt;https://saaspricedb.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s in launch mode with limited-time early access pricing — coverage is expanding rapidly.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Pitch Video
&lt;/h2&gt;

&lt;p&gt;Here’s my under-1-minute talking-head pitch (recorded and edited by a total beginner in iMovie):&lt;/p&gt;

&lt;p&gt;

&lt;iframe src="https://player.mux.com/Aiq01iYM01rM7Vh9TLAAvib8jZt9uxVpDbdIBMP7GP01Ds" width="710" height="399"&gt;
&lt;/iframe&gt;



&lt;/p&gt;

&lt;p&gt;My 1st try was like 4 minutes — this was the hardest part of the challenge for me! 😅&lt;br&gt;&lt;br&gt;
In 60 seconds or less: the problem I solved,what makes SaaSPriceDB special,some of the features, real time walk though on the ease of setup and a quick look at how it works.&lt;br&gt;&lt;br&gt;
(Hosted, sub titles &amp;amp; delivered smoothly via Mux — perfect for indie pitches! Will add quick app demo footage soon for the &lt;strong&gt;Enterprise Package&lt;/strong&gt;.)&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo &amp;amp; Testing (Super Easy – No Signup Needed!)
&lt;/h2&gt;

&lt;p&gt;Judges and community: please test away!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Instant free preview&lt;/strong&gt; (public JSON, no key required — 5 samples): &lt;a href="https://api.saaspricedb.com/api/free-preview" rel="noopener noreferrer"&gt;https://api.saaspricedb.com/api/free-preview&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive Swagger docs&lt;/strong&gt; (view endpoints &amp;amp; structure): &lt;a href="https://api.saaspricedb.com/docs" rel="noopener noreferrer"&gt;https://api.saaspricedb.com/docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Live website: &lt;a href="https://saaspricedb.com" rel="noopener noreferrer"&gt;https://saaspricedb.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(Note: Full dataset requires an API key — see judges section below for easy full access.)&lt;/p&gt;

&lt;h3&gt;
  
  
  Special Note for DEV Challenge Judges – Full Access Made Easy!
&lt;/h3&gt;

&lt;p&gt;Thanks for reviewing! 🚀  &lt;/p&gt;

&lt;p&gt;To test the full power (185+ tools, historical price changes, high enterprise limits, etc.):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The site uses an &lt;strong&gt;API key system&lt;/strong&gt; (no traditional signup/login buttons visible on the landing page).&lt;/li&gt;
&lt;li&gt;For instant full access: reply or DM me here on DEV with "judge access" — I'll send you:

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;special enterprise-level API key&lt;/strong&gt; (high limits, full features)&lt;/li&gt;
&lt;li&gt;OR a &lt;strong&gt;magic link&lt;/strong&gt; to the dashboard where the Judges' Cheat Sheet auto-loads with your key, interactive tester, Swagger guide, test card (4242 4242 4242 4242), etc.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Once you have the key, authorize in Swagger (&lt;a href="https://api.saaspricedb.com/docs" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://api.saaspricedb.com/docs" rel="noopener noreferrer"&gt;https://api.saaspricedb.com/docs&lt;/a&gt;) → Bearer token → test any endpoint (e.g. /pricing/).&lt;/li&gt;

&lt;li&gt;Close any welcome popup with "X" or "Got it, let's explore!"&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Zero friction — happy to send instantly. Appreciate your time and feedback!&lt;/p&gt;

&lt;h2&gt;
  
  
  The Story Behind It
&lt;/h2&gt;

&lt;p&gt;My first project was &lt;a href="https://www.sportsprophecyapp.com/" rel="noopener noreferrer"&gt;https://www.sportsprophecyapp.com/&lt;/a&gt; — my vision of a user/sponsor ecosystem that’s adaptable for any event, television show, or social media moment — a fun, no-gambling sports prediction platform where fans pick winners for sponsor prizes. I learned massively through failure, late-night fixes, and rebuilds… but realized passion alone isn’t enough.&lt;/p&gt;

&lt;p&gt;I needed to solve a &lt;strong&gt;real problem people are already searching for&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So I asked Claude one night:&lt;br&gt;&lt;br&gt;
“What’s a painful problem we can solve with a simple tool?”&lt;/p&gt;

&lt;p&gt;The answer: fragile SaaS pricing scrapers that devs hate maintaining.&lt;/p&gt;

&lt;p&gt;When I found the domain saaspricedb.com had no owner and realized the branding would be insane… well, I was hooked on the idea to build this.&lt;/p&gt;

&lt;p&gt;That same night, &lt;strong&gt;SaaSPriceDB&lt;/strong&gt; was born — fully vibe-coded with LLM help from start to finish.&lt;/p&gt;

&lt;p&gt;If a 58-year-old beginner with zero tech background can ship a production API… anyone can.&lt;br&gt;&lt;br&gt;
The fails, the late nights, the small wins — they’re all part of the story.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My advice for late starters:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Use the tools. Keep trying. Fail, get up, keep moving forward. Enjoy the journey. All of us have the same final destination; it’s the journey that sets us apart as individuals.&lt;/p&gt;

&lt;p&gt;I’d love your honest feedback, suggestions for the next SaaS tool to add, or your own vibe-coding stories!&lt;br&gt;&lt;br&gt;
Early testers/collaborators for feedback, ratings, social proof, indie SaaS ideas — please say hi! 🦉&lt;br&gt;&lt;br&gt;
(Also open to the idea of a collaboration with others on a % basis to grow this into something that truly benefits others.)&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical Highlights
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Built entirely via vibe-coding: describe → prompt LLMs → refine → deploy&lt;/li&gt;
&lt;li&gt;Daily cron jobs for updates + change detection&lt;/li&gt;
&lt;li&gt;Simple REST API with structured JSON (public preview + authenticated full access)&lt;/li&gt;
&lt;li&gt;Designed to scale as more tools are added&lt;/li&gt;
&lt;li&gt;Through feedback, this tool truly grows to solve problems, save time, and create opportunities&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Use of Mux (Bonus Category)
&lt;/h2&gt;

&lt;p&gt;I used Mux to host and deliver my pitch video reliably — fast loading, great quality, and zero hassle for a beginner creator. Simple but effective, and there are more options I’ll learn and use with upcoming posts!&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next: Sports Prophecy
&lt;/h2&gt;

&lt;p&gt;While building SaaSPriceDB, was solving a problem. Im back to building and launching &lt;strong&gt;Sports Prophecy&lt;/strong&gt; my 1st app ever&lt;br&gt;
(&lt;a href="https://www.sportsprophecyapp.com" rel="noopener noreferrer"&gt;https://www.sportsprophecyapp.com&lt;/a&gt;) — a real-time community prediction &lt;br&gt;
platform for sports, events, and live streaming.&lt;/p&gt;

&lt;p&gt;Same vibe-coding approach. Same "build with AI, iterate fast" philosophy.&lt;/p&gt;

&lt;p&gt;Early users welcome. Check it out and let me know what you think!&lt;/p&gt;

&lt;p&gt;Thanks for reading, watching, and joining me on this journey. Still learning every day. &lt;strong&gt;NightOwl&lt;/strong&gt; 🦉&lt;/p&gt;

&lt;h1&gt;
  
  
  showdev #saas #api #nocode #devchallenge #muxchallenge #webdev #Anthropic #Google #Antigravity
&lt;/h1&gt;

</description>
      <category>saas</category>
      <category>api</category>
      <category>showdev</category>
      <category>b2b</category>
    </item>
  </channel>
</rss>
