Blog

Notes on LLM infrastructure, cost optimization, and shipping AI products end to end.

How to Make Your Codebase Work for AI Coding Agents (Without Better Prompts)

·8 min read·13 views

If your agent keeps using the wrong test command or editing files it should not touch, the fix is usually the repo. A 15-minute AGENTS.md, golden commands that match CI, and one litmus test you can run today.

OpenCode Go + Oh My OpenAgent: The Model Routing Config That Actually Saves Money

·11 min read·120 views

OpenCode Go limits are dollar-denominated, not request-based. That changes everything about routing. Complete opencode.json + .omc/config.json setup to run 10 agents across 8 models for $10/month.

I Built a Browser SDK That Classifies Sessions Into Three Categories, Not Two

·10 min read·5 views

CAPTCHA and fingerprinting were built for clumsy bots. In 2026, LLM agents fill forms with realistic typing cadence, patch out webdriver flags, and solve CAPTCHA for $0.50. Nyasa adds a third actor to the model: AuthorizedAgent. One SDK, 24 signals, six detection rules.

Adding a view counter to your portfolio for free

·8 min read·2 views

How to track blog post views in a Next.js portfolio without paying anything. AWS DynamoDB, two API routes, and a five-second delay so bounces do not count.

2025

·2 min read

The hardest year of my life. A startup failed. I ran out of map. And somehow, I came out the other side a little more real.

Your Google Sheets Signup Form Is Silently Losing Rows. Here's Why.

·8 min read·4 views

The Google Sheets API drops rows under concurrent writes. It's a documented bug and every wrapper (SheetDB, Sheety, SheetBest) inherits it. I ran the test against all of them. Fifty parallel writes, somewhere between 35 and 47 rows. Every run different. Here is the bug, why a lock doesn't fix it, and what I built instead.

Gemini 2.5 Flash Was Returning 37 Tokens. Here's Why.

·6 min read·17 views

I set max_tokens=1000 on a Gemini 2.5 Flash call. Got back 37 tokens. No error, no warning. The real cause was reasoning tokens eating the output budget, a bug documented in 15+ open GitHub issues but missing from every tutorial. Here is the full debugging trail, the three-tier fix with tradeoffs, and a diagnostic script.

LiteLLM Got Hacked. I Built a Simpler LLM Gateway You Can Actually Audit.

·5 min read·5 views

The most popular LLM routing library got compromised in a supply chain attack. 95 million monthly downloads. Credential harvester, Kubernetes backdoor, persistent RCE. I built FreeLLM as a narrower, auditable alternative: 6 providers, 262 tests, one job.

I Built an OpenAI-Compatible Gateway That Routes Across 5 Free LLM Providers

·4 min read·14 views

Every LLM provider has a free tier. Combined, they give you ~80 requests per minute. FreeLLM routes your requests across Groq, Gemini, Mistral, Cerebras, and Ollama with automatic failover. One endpoint. Zero cost.

How I Validated a SaaS Product Before Writing Code: 70 Traders, 3 Interviews, 27 Days

·6 min read·1 views

91% of Indian retail traders lose money. I surveyed 70+ traders and did deep interviews before writing a single line of code. Here is exactly how I validated Metis, what I cut, and the one interview quote that killed 4 features.

Why Shopify Will Never Become Amazon And Why That’s a Strength

·Medium

A beginner’s take on why two giants are playing completely different gamesMost people who follow e-commerce assume Shopify and Amazon are on a collision cour...

Why Your .env Variables Are undefined in Production (And How to Fix It for Good)

·Medium

Your app works perfectly in development, with all your API keys loading correctly from your .env file using react-native-dotenv. But when… Continue reading o...

Why Your KeyboardAvoidingView Pushes Content Off-Screen (And How to Actually Fix It)

·Medium

You reach for KeyboardAvoidingView to prevent the keyboard from hiding your inputs. But instead of a smooth experience, your content gets… Continue reading o...