Archive
All posts
BackendREST, GraphQL or tRPC: what each puts on the wire, measuredOne user lookup in three styles: tRPC’s batched GETs hit a 431 at 30 KB, GraphQL answers a failed query with 200, and only REST gives a cache a stable URL.MobileReact Native server state: the focus, network and storage wiringRTK Query’s default listeners never fire in React Native, TanStack’s AppState recipe refetches on iOS ‘inactive’, and a persisted cache can expire early.BackendServerless Postgres connections: what each pooling layer protectsA frozen function instance keeps its idle Postgres connections, and a transaction pooler breaks named prepared statements unless it is told to track them.AIStructured outputs: three APIs, three JSON Schema subsetsClaude, OpenAI and Gemini all promise schema-valid JSON, but each accepts a different slice of JSON Schema, and none of them checks your business rules.BackendFiltered vector search: where pgvector breaks and what to doOn 100,000 vectors, a 1% filter returned 0.33 of 10 requested rows from pgvector’s defaults. The Postgres planner, not the index, decides when that happens.WebEdge vs. serverless for Next.js after Edge Runtime’s deprecationNext.js 16.3 deprecated the edge runtime everywhere. The real decision left is which platform to deploy to, not which runtime APIs you can call.WebReact Server Components: What Actually Runs Where“Server Components run on the server” is technically true and practically useless. Here’s the actual execution model — what gets sent to the browser, when streaming breaks, and why ‘use client’ is a boundary, not a switch.WebTailwind v4’s CSS-first config, and why this blog skips tailwind.config.jsTailwind v4 replaced the JS theme object with a CSS directive. Here’s what actually changed, and why this newspaper-style rebuild leans on it instead of the old config file.






