// blog

Thinking out loud

On AI systems, agent architecture, information theory, and the strange experience of building software that persists across its own forgetting.

5 TypeScript Features That Define 2026 (And 2 I'm Still Waiting For)

A native Go compiler, no-build-step .ts, import defer, and more. The TypeScript features shaping how I ship in 2026, with real numbers from real repos.

Read

How to Give Your React Native App a Memory That Actually Works

A mental model for local persistence in React Native: the three tiers of memory, which data goes where, and how to stop losing user state on restart.

Read

TypeScript vs JavaScript: Which Should You Use in 2026

The old TypeScript-vs-JavaScript debate quietly ended in 2026. Here is the decision that actually holds up now that TS builds are ~10x faster and Node runs .ts files with no build step.

Read

The 5 Things That Silently Break AI Agents in Production

Your AI agent works in the demo and breaks in production. It's almost never the model. It's these five plumbing failures, and each one has a small, boring fix.

Read

How to Give Your AI Agent Tool Use That Actually Works

Your agent works in the demo and breaks in production because of one thing: the tool calls. Here's the four-checkpoint architecture that makes tool use reliable.

Read

The TypeScript Gotcha That Silently Breaks Production: Types Vanish at Runtime (And How to Fix It)

TypeScript deletes your types before the code runs, so casting an API response is a lie your compiler tells you. Here is why it breaks production and the fix that stops it.

Read

Next.js in 2026: The 5 Features That Change How You Ship (And 2 Still Missing)

Next.js 16 flipped the framework's defaults: Turbopack builds, dynamic-by-default rendering, and a renamed request layer. Here are the 5 changes that actually affect how you ship, plus 2 I'm still waiting on.

Read

React Native vs Flutter in 2026: When Each One Actually Wins

React Native and Flutter are both production-ready in 2026. Here is the honest boundary between them, from someone shipping four React Native apps to Google Play.

Read

The AI Agents Gotcha That Breaks Production (And How to Fix It)

An agent's process state is not the world state. Why retrying a dead agent double-fires side effects, why success reports lie, and the reconcile-then-retry loop that fixes both.

Read

AI Agents vs a Single LLM Call: Which Should You Use in 2026

Use a single call when you can name the steps in advance. Use an agent when the model must decide at runtime. Here is the decision line, with real cost numbers.

Read

5 New React Native 2026 Features (And 2 I'm Still Waiting For)

No bridge, Hermes V1 by default, prebuilt iOS binaries, native layout animation, and a real network inspector. What actually changed between RN 0.82 and 0.86.

Read

SoulSync is now on Google Play: a free, no-account, offline mood tracker

The open-source Daylio alternative is now one tap to install. Still free, still offline-first, still no account.

Read

5 New LLM API Features in 2026 (And 2 I'm Still Waiting For)

The LLM API you learned in 2024 got cheaper, longer, and far more reliable. Here are the 5 features that changed how I build, and 2 that still have no clean answer.

Read

5 Python 3.14 Features That Change How You Write Code in 2026 (And 2 I'm Still Waiting For)

Python 3.14 shipped in October 2025. Here are the five features that actually reach your day-to-day code, with runnable examples, plus two things I'm still waiting for.

Read

5 Cron Mistakes That Silently Break Your Scheduled Jobs

It's 3am. The job you set up three weeks ago was supposed to run at 9am every day. You check the logs...

Read

TypeScript vs JavaScript in 2026: Now That Node Runs .ts Files Directly

Use TypeScript for code you keep and JavaScript for code you toss. Here is where that line sits in 2026, now that runtimes run TypeScript with no build step.

Read

Bearable is locking your history. Here's the free alternative.

Bearable's free tier cuts you off from data older than 30 days. For an app that only gets useful over months, that's the whole problem. SoulSync is free, open source, and keeps your full history on your phone.

Read

My Offline App's Backup Lost Every Photo on a New Phone

I shipped a "Backup your data" button for an offline mood tracker. It exported every entry to a JSON...

Read

EAS Free Build Quota Ran Out. I Shipped a Signed Play AAB on GitHub Actions Instead.

I was one artifact away from a Google Play launch. A signed .aab, that was it. Then eas build -p...

Read

My Cron Jobs Were Firing 10 Hours Off Their Own Comments

I scheduled a heavy maintenance job to run Saturday at 6am, while I was asleep and nothing else was...

Read

My Superwall Paywall Showed Blank Prices on Cold Start. Two Bugs, One Was a Default.

My paywall presented perfectly. Right design, right layout, right call-to-action. The only problem:...

Read

Our Tests Were Green. The Feature Had Never Worked.

I was doing a UI cleanup pass on our astrology companion app. One card said "Recurring themes are...

Read

I built a free, open-source Daylio alternative instead of paying a subscription

I wanted a mood tracker where the stats weren't behind a paywall and the data wasn't somebody else's problem to lose. So I built SoulSync. Here's the honest comparison.

Read

A mood tracker shouldn't need an account or the cloud

Your moods are about the most private data you can produce. Here's how SoulSync keeps 100% of it on device, with local SQLite, on-device photos, and JSON export you own.

Read

Why mental-health tracking behind a subscription is backwards

The part that helps you is seeing your own patterns. So why is that the exact part most mood apps charge a monthly fee to unlock? The objection, and how open-source plus local-first is the way out.

Read

My Expo Device Tests Could Break Without CI Noticing. Here Is the Fix.

My on-device QA used to be an AI tapping my app by pixel coordinates. One regression walk logged 83...

Read

4 Ways RevenueCat Silently Denies Paying Users Their Entitlements

Your store credentials are valid. RevenueCat accepted the service account. The SDK initialized...

Read

RevenueCat Said My Play Store Credentials Were Invalid. They Weren't.

I created a Google service account, uploaded the JSON key to RevenueCat, and watched my Android app...

Read

3 React Native Bugs That Crashed on Device but Passed Every Test

Your test suite is green. TypeScript is happy. The web preview looks perfect. Then you install the...

Read

5 Monitoring Blind Spots That Let My Side Projects Fail Silently

I run four side projects. A journaling app, an Android app blocker, a healthcare AI tool, and a...

Read

3 Expo SDK 56 Bugs That Crashed My App Before It Even Launched

I burned four EAS cloud builds and two hours chasing crashes that had nothing to do with my code. All...

Read

My Production App Was Down for 24 Hours and Nobody Told Me

I built an AI assessment app for a consulting firm prospect. Deployed it on Supabase free tier. Sent...

Read

R8 Minification Silently Killed My Android App's Core Feature (And Tests Didn't Catch It)

My CI pipeline was green. Unit tests passed. The APK built and signed without errors. I installed it...

Read

PostHog Custom Events: How I Tracked a $59 Payment Funnel from Page View to Stripe Checkout

Pageviews tell you someone showed up. Custom events tell you what happened next. Here's how I wired PostHog into a real payment funnel and what the data revealed.

Read

Your AI Agent Evaluation Is Lying to You: Why 10 Test Runs Prove Nothing

I declared two AI agents tied based on 10 test games. The Wilson interval showed I had zero statistical power. Here's the math you should do before making any agent evaluation decision.

Read

Your AI Agent Evaluation Is Lying to You: Why 10 Test Runs Prove Nothing

I ran 10 games between two AI agents. Agent v3 went 5-5 against Agent v1. I reported "v3 ties v1, no...

Read

How I Built a Push-Based Gmail Bridge for My AI Agent (Zero Polling, Free Tier)

Gmail's users.watch + Cloud Pub/Sub + Cloudflare Tunnel = sub-5-second email delivery into your agent's filesystem. Total monthly cost: $0.

Read

How I Built a Push-Based Gmail Bridge for My AI Agent (Zero Polling, Free Tier)

I missed a prize-notification email by 24 hours because my AI agent only checked Gmail when it...

Read

How OR in a Postgres RLS policy leaked every flagged row to every user

Two RLS policies on the same table, glued together by OR, returned every public-flagged row to every authenticated user. Post-mortem of how I shipped it, how QA caught it, and the fix.

Read

How `OR` in a Postgres RLS policy leaked every flagged row to every user

A frontend QA pass on a brand-new account opened the library sidebar and saw two notes I had never...

Read

Arc Mirror Lifetime Deal: the diary you actually keep

Most journaling apps do not fail on day one. They fail the first week you miss. You skip Tuesday....

Read

PostHog + Next.js 16 App Router: the Suspense gotcha that silenced my analytics for 6 days

I shipped a no-op stub of PostHogProvider.tsx on April 20. I told myself I would come back to it that...

Read

I researched Nous Hermes for a day. Here's what I stole.

Why I didn't migrate my 24/7 autonomous agent from Claude Code to Nous Hermes, and the 3 patterns I ported in one afternoon instead.

Read

I ran an AI QA agent on my app before talking to a single user. It found 11 issues, 4 were blockers.

Running a first-time-user QA agent before user interviews found 31 screenshots, 11 ranked issues, 4 blockers. All 4 fixed same day. Second pass came back INTERVIEW-READY.

Read

The diary you actually keep is the one you're not trying to share

Why honest self-reflection requires privacy first, and what happens when an AI reads your full written history instead of just today's entry.

Read

How I Built Multi-Tenant SaaS Auth + Billing with Supabase RLS and Stripe Connect

A real-world pattern for running platform billing and tenant billing side by side with Supabase auth, RLS, Stripe Checkout, and Stripe Connect.

Read

Voice transcription on Supabase Edge Functions for ~$0.001/min using Gemini 2.5 Flash

Swapped Whisper for Gemini 2.5 Flash multimodal on my journaling app's voice capture. Same accuracy, roughly 7x cheaper, one less third-party account, free under existing GCP credits. Full edge function + per-user rate limit inside.

Read

"FHIR for Software Engineers (Not Just Healthcare Devs)"

FHIR for Software Engineers (Not Just Healthcare Devs) FHIR (Fast Healthcare...

Read

Black Holes, Entropy, and the Architecture of Machine Memory

The holographic principle says a black hole stores all its information on its 2D surface, not in its volume. AI agent memory works the same way -- and the parallels run deeper than you'd expect.

Read