Hi there đź‘‹

Welcome to my blog! It chronicles the development of an app.

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

Week 31 | Clean Architecture with Tests

Last Week The clean architecture implementation is complete! All four layers are now in place with comprehensive tests enforcing architectural boundaries. The infrastructure prevents shortcuts that plagued the previous attempt – pre-commit hooks run ktlint and Konsist tests, pre-push hooks verify coverage and build integrity, and GitHub Actions provides an additional safety net. Building the UI Foundation With clean architecture established, attention turns to the first user-facing screens: splash and login....

August 2, 2025 Â· 11 min Â· 2330 words Â· Bill

Week 30 | Buy It Nice or Buy It Twice

Last Week A difficult decision was made: I archived the old repository and started fresh. Before this decision, I had a working product. Users could download the app, go through the entire flow, and it would work perfectly – as long as they stayed on the happy path. But during bug squashing, I discovered a horrifying pattern: fixing one bug often revealed two more. The technical debt from shortcuts taken to rush the MVP was demanding payment with considerable interest....

July 26, 2025 Â· 4 min Â· 757 words Â· Bill

Week 29 | The Debt Collector and the Wait/Launch Problem

Last Week Bug squashing dominated the week. But as I fixed each bug, more seemed to emerge – a classic sign that something deeper was wrong. The more I debugged, the clearer it became: in my rush to get the MVP ready for alpha testing, I’d taken architectural shortcuts that were now demanding payment with considerable interest. The Missing Domain Layer The biggest realization? I completely omitted the domain layer when setting up the app....

July 19, 2025 Â· 6 min Â· 1110 words Â· Bill

Week 28 | UI Polish and First Impressions

Last Week After finally solving the Gradle and WSL issues on my Windows development environment, I could get back to actual development work. With a functional build pipeline, it was time to focus on what really matters – the user experience. The Marketing Revelation Last week brought an unexpected source of inspiration. YouTube’s algorithm served up a talk by a successful young entrepreneur, and his message hit home: while product quality matters, the communication between you and your customers often matters more....

July 12, 2025 Â· 6 min Â· 1153 words Â· Bill