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