RSSAmplifier

Blog

kbmjj123.cc — Indie Developer Log

KB MJJ123 .cc — Indie developer blog sharing coding, product, and startup insights.

kbmjj123.ccRSS feed ↗20 posts

Latest posts

SSG vs SSR vs Hybrid: A Decision Framework for Nuxt Deployment

Not another config tutorial — a decision framework based on three real projects, each running a different Nuxt 4 deployment mode on Cloudflare, with architecture diagrams and honest trade-off analysis.

How I Run Claude Code on My Phone for $29/Month — And Why I Stopped Chasing AI Tools

I quit Cursor, stopped testing every AI coding tool, and built a workflow that lets me use Claude Code from my phone during fragmented time. Here's the philosophy and the setup.

Google Search Console API with Node.js: Pull Real SEO Data Without googleapis

How I built a zero-dependency GSC data puller using only Node.js crypto and curl. Service account JWT auth, search analytics queries, and the bugs I hit along the way.

Nuxt 4 on Cloudflare: Three Deployment Modes and When to Use Each

A real-world comparison of Static, SSR, and Content+SSR Hybrid modes deploying Nuxt 4 to Cloudflare Pages — with configs, gotchas, and binding traps across three actual sites.

Does an Indie Developer Have to Be a Jack of All Trades?

AI now handles 85% of my indie dev workload. The real skill isn't mastering everything—it's knowing what to delegate and what to eliminate.

Running a Zero-Cost SaaS with Nuxt and Cloudflare

How I serve 5k+ daily UV on a pure static stack with Nuxt SSG, Cloudflare Pages, and R2 — and why I still haven't added Workers, D1, or KV.

How I Built a Multi-Model AI Coding Workflow for $0

Claude for planning, DeepSeek for execution, me for judgment. A split-model workflow using only free tiers—no API bills, no subscriptions.

From $2.45 RPM to a Pivot: What I Learned About Tool Site Ads

A batch image tool site's US RPM landed at $2.45. Here's what I found when I dug into the data—and why I'm adding paid features alongside ad optimization.

Building a Pixel Email Subscription System for kbmjj123.cc with Resend and D1

A zero-cost, self-contained email subscription system built with Nuxt Nitro server routes, Cloudflare D1, and Resend API — with a pixel aesthetic to match the blog.

From Zero to $2/Day: 6 Months of Running a Tool Site as an Indie Developer

A transparent six-month retrospective on building a tool site with Nuxt + Cloudflare: getting called out for AI garbage, fixing thin content after AdSense rejection, and making $2–$5/day in ad revenue.

Why Chinese Visitors Vanished from Umami — And the Custom Domain Fix

After weeks of running cleanly, I noticed zero data from China. The culprit wasn't IP parsing or GeoIP — it was that *.vercel.app is blocked in mainland China. Here's the diagnosis and the fix.

Deploying Umami on Vercel + Supabase: The Connection String Traps

The official docs say set DATABASE_URL and deploy. What they don't tell you: two different connection strings, a silent port mismatch, and a prisma.config.ts that overrides everything.

The Last Two Blockers: GeoIP Download and Manual Migration on Vercel

Vercel build silently hangs downloading a 66MB GeoIP database. Here's how to pre-bundle GeoLite2, bypass the migration step, run SQL manually in Supabase, and push a large binary with Git LFS.

When Your Free Analytics Hit the Ceiling: Why I Left Umami Cloud

My Umami Cloud free plan hit 100k events and data collection stopped. Here's what I tried — Cloudflare Web Analytics, why it wasn't enough, and why I ended up self-hosting.

A Platform-Agnostic Ad Component for Nuxt 4 SSG: Swapping AdSense and wwads Without Touching Page Code

How I built a two-layer ad component architecture for a multilingual Nuxt 4 SSG site — separating platform routing logic from SDK implementation, and fixing the adsbygoogle already-have-ads error that fires on SPA navigation.

68,000 Impressions, 8 Clicks: The Image Sitemap Blind Spot I Didn't Know I Had

I had 68,000 image search impressions and only 8 clicks. Here's the blind spot I discovered about image and video sitemap indexing, and what I actually did about it.

Why My Responsive AdSense Ad Went Square on Mobile (and Tall on Desktop) — and How I Fixed It With a Reusable Vue Component

A real debugging walkthrough of AdSense's data-full-width-responsive behavior, why I moved away from JS-based resize detection, and the Vue component I ended up with.

Why I Bet My Indie Project on Cloudflare Instead of a Server

An indie developer's honest case for choosing Cloudflare's D1, Workers, KV, and R2 over a traditional server — and what it's actually costing me so far.

Why GitHub OAuth Login Failed Locally (And How I Faked My Way Around It)

How a GitHub OAuth callback silently failed during local development behind China's network environment, and why I chose a dev-only mock endpoint over a tunneling tool to fix it.

Two Days, One Broken Monitor, and a Forced macOS Upgrade Just to Run Wrangler

Wrangler required macOS 14+ and my 2015 Mac had been abandoned by Apple. Here's the pre-flight checklist I wish I'd run first, and the real options for developers stuck on old hardware.