All Articles
Six Weeks of Running an App Store vs. Google Play Review Diff with Gemini
A six-week record of using the Gemini API to classify App Store and Google Play reviews in parallel and surface platform-specific priority items. Notes from running this on an indie wallpaper app with 50M+ cumulative downloads, including the three platform gaps that actually showed up and the monthly cost.
Idempotency Key Design for the Gemini API: Patterns I Use to Prevent Duplicate Generation Across Six Sites
After five months of running six AI-driven sites in parallel, I built an idempotency layer in front of the Gemini API to neutralize retry storms. This deep dive shares the SHA-256 + Cloudflare Workers KV design, the operational numbers behind it, and the four gotchas that only surface in production.
Why Gemini API Returns Empty Responses with finishReason: RECITATION, and the Prompt + Post-Processing Design That Stopped It
Run a Gemini content agent long enough and one day logs fill with finishReason: 'RECITATION' and empty content arrays. This is the verbatim-quotation safety system firing. Here is the prompt rewriting pattern and TypeScript post-processor I deployed across six auto-publishing pipelines at Dolice — it dropped my incident rate by 90%.
Why Gemini Deep Research Gets Stuck for an Hour — Five Causes and the Workaround for Each
Sometimes Gemini Deep Research sits at 'researching…' for 30 minutes, then an hour, then dies silently. After six months of running market and competitive research across six sites as an indie developer at Dolice, I separated this single symptom into five distinct causes — only one of them actually heals with a retry.
Why Gemini API Returns MALFORMED_FUNCTION_CALL — Causes and Fixes
Hit by finishReason: MALFORMED_FUNCTION_CALL in production? Three root causes, how to diagnose each, and the workarounds that actually worked in our indie iOS/Android pipeline.
A Gemini API Control Plane for Indie Developers Running an App Portfolio
When you run several apps (wallpaper, healing, manifestation) on Gemini API, keys scatter and per-app cost attribution disappears. This is the three-layer control-plane architecture I have used for twelve months, with the traps that only show up over time.
Generating Multilingual Onboarding Copy with Gemini 2.5 Flash and Rolling It Out via Firebase Remote Config: An Indie Developer's Notes
An indie developer's implementation notes on generating multilingual onboarding copy for six wallpaper apps with Gemini 2.5 Flash and validating it through Firebase Remote Config gradual rollout, including Apps Script code, D1 retention measurement, and AdMob eCPM separation.
When responseSchema enum returns unexpected values — debugging Gemini API
Why Gemini API sometimes returns values outside the enum you defined in responseSchema, and the three-layer workaround I use in production for my wallpaper app classification pipeline.
Designing Event-Driven AI Workflows with Gemini API and Cloud Pub/Sub — Notes from an Indie Developer
An implementation memo on wiring Gemini API into Cloud Pub/Sub event-driven workflows. Using an app-review analysis pipeline as the running example, the article covers retry policy, dead-lettering, idempotency, and cost guardrails — from the perspective of someone running it solo.
Running Gemini Computer Use and Claude in Chrome Side by Side on the AdMob Console for a Week
A side-by-side journal of running Gemini Computer Use and Claude in Chrome on the AdMob console for a week, against three real tasks I face running wallpaper apps with 50M cumulative downloads: ad unit setup, mediation priority export, and eCPM anomaly detection.
Designing a Continuous Quality Monitoring Pipeline for the Gemini API
A practical, indie-developer-friendly design for a Gemini API evaluation pipeline that catches silent quality regressions using a Golden Dataset and a multi-aspect LLM-as-Judge, with full code and real cost numbers.
Gemini API Streaming Works Locally but Buffers in Production — Fixing Cloud Run, Vercel, and Cloudflare
Streaming responses flow token-by-token in local dev, then arrive as one big blob in production. A walkthrough of the five most common causes — Cloud Run timeouts, Vercel runtime mismatch, Cloudflare Workers proxying, server-side text() pitfalls, and client-side decoding — with the fixes I use on my own sites.