Week 43 | Jetlagged But Shipping
On The Road Week 43 found me bouncing between old haunts with my travel kit and a laptop that rarely left the bag. The wind hammered the camera, I forgot the microphone at home, and shipping time narrowed to minutes between family visits. Instead of forcing half-finished code, I treated the week as a checkpoint: the product is stable enough to hand to new people, the pipeline keeps publishing builds, and I get to absorb how the app feels after stepping away for a few days....
Week 42 | Android Tester Instructions
Android Test Mission Brief Thank you for lending your time to shape Shokken. This guide turns the Android testing session into a predictable checklist so every report lands with the details I need. Who Should Use This Guide Android devices only; the iOS flow lives in a separate briefing. You’ll need a Google account that can join testing groups and access Google Play. Keep shokken.rsvp handy—it is the single source of truth for builds, FAQs, and issue tracking....
Week 41 | Bottom Sheets, Builds, And Beta Prep
Last Week Last week I recorded the update from a parking lot while the houseguests I was hosting rotated through the city. I used the downtime to map Google Play’s closed testing requirements, built a checklist for the fourteen testers I need to keep the track alive, and rewrote my dogfooding playbook so the first bug hunts have scripts instead of improvisation. Most of my energy went into people logistics: scheduling those friends and family members for thirty-minute screen-sharing sessions, documenting how to install from the Play Console instead of sideloading, and figuring out how to capture their feedback without asking them to learn SQL....
Week 40 | Recruiting The Beta Flight
Last Week Last week I finally coaxed the Supabase cron job into draining the email outbox without manual babysitting. I replayed 500 queued notifications, watched the Kotlin client hand them off to Postgres, and confirmed Resend responds within the same edge invocation. With that loop stabilized the admin dashboard now reflects message success within seconds, and I officially declared the infrastructure feature complete. I did try to finish the Resend webhook, but Supabase keeps rejecting the callback with a 401 even after I disabled JWT enforcement....
Week 39 | Feature Complete, Webhook Pending
Last Week Last week I finally pried open the Supabase email pipeline that had been stuck in limbo. I rewired the outbox drainer so it writes to a dedicated log table before and after each batch, captured the payload that Resend expects, and added defensive retries around the queue reader. Most of that effort went into proving the cron job could wake the Edge Function reliably; I ended up setting up a cron_debug_log table, replaying scheduled jobs, and verifying Supabase’s pg_cron extension was actually firing once a minute....
Week 38.5 | Switching from Claude Code to Codex CLI
The Great Migration After months of using Claude Code as my primary AI coding assistant, I’m switching to Codex CLI. This isn’t clickbait - it’s a fundamental shift in my development workflow driven by tangible differences in model behavior, cost efficiency, and most importantly, trust in the tool’s ability to follow instructions. The AI landscape changes rapidly. Until recently, Claude Code and Claude models dominated agentic programming tasks. If you could afford it, Claude was the obvious choice....
Week 38 | Debugging Cron Jobs and Email Queues
Last Week Successfully set up the email outbox infrastructure in the database - a queue table that holds all emails waiting to be sent. Connected the app to this outbox so guest notification emails now properly queue instead of attempting immediate delivery. The architecture is solid: emails queue, the drainer function works when manually invoked, but the cron job automation isn’t triggering. The Cron Job Mystery The email infrastructure is 90% complete....
Week 37 | Email Infrastructure: The Outbox Pattern
Last Week Recording outside as summer comes to an end! Last week was productive - I successfully set up Kermit the Log and used it to diagnose a phantom UI error. The database insert was succeeding, but the frontend was showing failure. Turns out the post-insert fetch operation had a parsing error that was masquerading as an insert failure. Fixed the error handling to report these separately and resolved the parsing issue itself....
Week 36.5 | Ostris AI-ToolKit Explained
Taking a Break from Shokken Not every day is spent writing Kotlin and wrestling with subagents. Sometimes you need to explore other creative outlets. Today, I’m diving into something completely different: training LoRAs using Ostris’s AI toolkit for image and video generation models. When I first opened this tool, the wall of configuration options was overwhelming. Every toggle, every number field seemed important, but I had no idea what any of them actually did....
Week 36 | Kermit the Log
Last Week The presentation layer hookup to the backend is complete but riddled with a perplexing error: database operations succeed but the UI reports failure. This phantom error led to implementing proper logging infrastructure – enter Kermit the Log from TouchLabs. The implementation journey also revealed important lessons about when subagents help versus hinder development progress. The Phantom Error and the Need for Logging The error manifests in a maddening way: add something through the UI, the database operation succeeds, the record appears in the database, the operation returns successful – yet the UI stubbornly displays “Operation failed....