// 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 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