DEV Community

Cover image for No Degree. No Team. No API Bill. I Shipped Gemma 4 Into My Travel App at 58 — And So Can You. Gemma 4 Challenge: Write About Gemma 4 Submission
William
William

Posted on

No Degree. No Team. No API Bill. I Shipped Gemma 4 Into My Travel App at 58 — And So Can You. Gemma 4 Challenge: Write About Gemma 4 Submission

Let me be straight with you before we get into any of this.
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 )
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 )
Over the last year I built three live products from scratch:

Events Arena — a live sports prediction platform with Soccer, NHL, and expandable arenas for any type of event
SaaS Price DB — a REST API tracking pricing data for 1,000+ B2B SaaS tools
TripSync — an AI travel planner that takes plain-English trip descriptions and returns real destinations with flight estimates and booking links

Zero users on most of them. I wrote about that honestly on May 9th. ( zero judgement if you go read it ) But here's what I didn't fully explain in that post:
I built TripSync for myself.
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 )
TripSync was my solution to my own problem. I am the user.
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 )

The Fear Every Solo Builder Has But Won't Say Out Loud
I'll be honest about why I'm here because that's the kind of post this is.
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? )
But the thing that got me paying attention to Gemma 4 specifically? The API bill.
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 )
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 )
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.

What Gemma 4 Is, In Plain English
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 )
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 )
The family spans four sizes:

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

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 )
The question I wanted to answer: can Gemma 4 run meaningfully on real hardware that real people actually own?

What I Actually Built — And It's Actually Live
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.
TripSync runs on Flask and Groq on Render. And as of this submission, Gemma 4 is fully integrated and live — wired up via Ollama, powering Private AI Mode. Real users can flip the toggle right now and run every search locally. 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 )
Here's exactly what went in:

  1. Pulled Gemma 4 via Ollama bashollama pull gemma4 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 )
  2. Added dedicated local endpoints in server.py python@app.route('/api/tripsync-local', methods=['POST']) def tripsync_local(): # exact mirror of /api/tripsync # calls call_ollama() instead of Groq ...

@app.route('/api/generate-itinerary-local', methods=['POST'])
def generate_itinerary_local():
data = request.get_json()
destination = data.get('destination', '')
days = data.get('days', 5)
currency = data.get('currency', 'USD')
prompt = build_itinerary_prompt(destination, days, currency)
result = call_ollama(prompt)
if not result:
return jsonify({"error": "Local AI unavailable"}), 503
parsed = extract_json_safe(result)
if not parsed:
return jsonify({"error": "Could not parse response"}), 500
return jsonify(parsed)

  1. A ☁️ / 🔒 toggle across the whole app One click switches between Cloud AI and Private AI across both index.html and planner.html. Persists in localStorage. Every fetch routes to the right endpoint automatically. ( one click, that's it, I love when things are actually simple )
  2. The badge 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.
  3. Honest error handling 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 ) 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 )

What Actually Happened When I Ran It
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 )
Then it responds.
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 )
The fix is simple: close Chrome, give Ollama room to breathe, restart with ollama stop then ollama serve. The model isn't slow — a loaded machine is slow. There's a difference.
Once it's warm on a clean machine: under 1 second per query. And the quality is worth it.
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 )
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 )
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 )

The API Cost Math
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 )
With Gemma 4 running locally: unlimited. Zero marginal cost. The only constraint is hardware I already own.
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 )

The Privacy Thing I Didn't Expect to Care About
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.
That's personal. Budget. Travel dates. Who I'm with. Where I'm going.
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 )
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.
Relief. Genuine relief.
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 )

Wait — Can You Use Gemma 4 on a Live Site Without a Local Machine?
Yes. And this is worth knowing.
Google offers Gemma 4 through the Gemini API via Google AI Studio — 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.
pythonimport google.generativeai as genai

genai.configure(api_key="YOUR_GEMINI_API_KEY")
model = genai.GenerativeModel("gemma-3-27b-it")
response = model.generate_content(your_prompt)
For TripSync this opens up a clean three-tier architecture I'm working toward:

Cloud AI → Groq ( fast, reliable, what's live now )
Gemma 4 via API → Gemini API ( Gemma 4 quality for all users, no local setup needed )
Private AI → Ollama on the user's own machine ( fully local, fully private )

The honest trade-off: the Gemini API means data still leaves the user's machine — so the privacy angle changes. It's Gemma 4, but it's not local. 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 )
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.

Match Your Hardware to the Right Model
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 )
8GB RAM — Don't pull the full Gemma 4. Use E2B or E4B. Lighter, faster, genuinely capable for most text generation and summarization tasks.
bashollama pull gemma4:2b
16GB RAM — like mine — The full gemma4 (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.
bashollama pull gemma4 # full quality, needs a clean machine
ollama pull gemma3:8b # faster, great for iteration
32GB+ — 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.
bashollama pull gemma4:27b
64GB+ / VPS — 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.
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 )
Older hardware? 100% get the lighter versions and go to town — genuinely capable, completely free, ready right now. Newer hardware? Gemma 4 is lights out. No bill. No limits. No excuses.

What This Means For YOUR Project
Everything I found with TripSync applies to whatever you're building right now. ( yes, you, the one reading this at 11pm )
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.
The cost problem — 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.
The privacy problem — 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.
The complexity problem — 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.
The barrier to entry is one terminal command:
bashollama pull gemma4
That's it. That's the whole barrier.
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.
That's worth more than any prize. ( though the prize would also be nice, not going to lie )

What's Next For TripSync

Gemma 4 via Gemini API — bring it to live users without requiring local setup
Pre-warm on server start — eliminate the cold-start wait
Side-by-side performance comparison — let users see the difference and choose with real information

The live app: tripsync-ilao.onrender.com
The code: github.com/Tripsync-justmeMedia/tripsync

One Last Thing
Build something you enjoy. That's the whole advice.
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 )
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 )
The point isn't to become a developer. The point is to find what gives you energy and do more of that.
Good luck to everyone in the competition. Good luck with your projects. Whatever you're building — keep going.
Be good to yourself and others.
Nightowl out. ☮️

William Commu — Just Me Media
Minesing, Ontario | Cottage in Bracebridge
@nightowl on DEV
TripSync: tripsync-ilao.onrender.com

Top comments (0)