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

September 24, 2025 · 11 min · 2226 words · Bill

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

September 20, 2025 · 13 min · 2702 words · Bill

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

September 13, 2025 · 14 min · 2839 words · Bill

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

September 10, 2025 · 9 min · 1774 words · Bill

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

September 6, 2025 · 8 min · 1653 words · Bill

Week 35.5 | Raw with Claude

Real Development, Unfiltered This is 1.8 hours of unedited, raw development footage showing exactly how I work with Claude Code on the Shokken app. No cuts, no edits, just the real workflow with all its iterations, mistakes, and eventual victories. Watch as we debug a deceptively simple phone validation issue that reveals deeper insights about AI-assisted development. The Setup The development environment showcases several key components: JetBrains Gateway for remote development (my machine is just a thin client) Ubuntu home server hosting the entire development environment Physical Pixel tablet for testing (emulators don’t work with remote development) Claude Code with Opus model ($200/month subscription) Seven specialized subagents for different development tasks The project is Shokken, a Kotlin Multiplatform app using Compose Multiplatform, targeting Android, iOS, desktop, and web platforms with strict clean architecture and 95% test coverage requirements....

September 3, 2025 · 6 min · 1236 words · Bill

Week 35 | Hooking Up Presentation Layer

Last Week The transition from mock data to real backend integration began in earnest. The home dashboard, which had been displaying carefully crafted fake data, started connecting to the actual Supabase repository through properly architected domain and data layers. Connecting the Layers The waitlist management features are now fully operational – users can view their created waitlists and add new ones through a complete vertical slice of the architecture. The guest list details pane is partially implemented, with some testing challenges arising from the transition from mock to real implementation....

August 30, 2025 · 10 min · 1954 words · Bill

Week 34 | Subagents: The Context Window Revolution

Last Week The home screen implementation is complete with responsive design supporting everything from portrait phones to landscape tablets. Dark mode works beautifully – a telltale sign of an app “written with love.” All UI work was done in isolation with mock data, keeping the presentation layer pure until the backend integration is ready. The Context Window Crisis Working with Claude Code revealed a fundamental limitation of AI-assisted development: the 128,000 token context window....

August 23, 2025 · 7 min · 1422 words · Bill

Week 33 | Shoehorning Imperative into Declarative

Last Week Database work consumed most of the week, bringing newfound respect for database engineers who navigate the treacherous waters between imperative and declarative paradigms. The Supabase diff tool’s quirks alone cost several days of development time. The Database Declaration Dilemma Understanding why databases resist declarative approaches requires grasping the fundamental difference between imperative and declarative programming. Imperative: Give the computer step-by-step instructions (like handing an interior decorator a list of furniture movements) Declarative: Describe the desired outcome (like showing a floor plan)...

August 16, 2025 · 7 min · 1312 words · Bill

Week 32 | User Authentication

Last Week The login procedure is complete! The implementation spans all architectural layers – presentation, domain, and data – with OTP authentication fully operational. Setting up the email infrastructure with Resend for SMTP services ensures the app can scale beyond Supabase’s built-in email limits. Login Implementation Across All Layers The week-long implementation might seem excessive for a login flow, but strict adherence to clean architecture and test-driven development justified the time investment....

August 9, 2025 · 4 min · 754 words · Bill