The iOS port, day one

First day of the SwiftUI port. Most of Phase 5 cleared in one sitting — because the shared KMP module already handled the business logic, only the platform-specific layers (audio engine, file storage, UI) needed iOS implementations. The workflow also shifted: Claude wrote the Swift directly instead of routing through an in-IDE AI.

May 14, 2026 · 9 min · Karl-Ernst Kiel

Day 13: UI polish, app icon, billing live, and Play Store listing

A full day of UI polish and Play Store prep. Nine UI issues fixed via Claude-prepared Gemini prompts, new app icon designed in Affinity Designer, in-app billing tested end-to-end, and the store listing copy and screenshots completed. Tomorrow: feature graphic, tablet screenshots, and a permission demo video.

April 20, 2026 · 6 min · Karl-Ernst Kiel

Day 12: Freemium gate, billing, Play Store registration, and first internal build

The freemium gate and Google Play Billing integration landed today, completing Phase 2. Then a pre-beta cleanup pass, privacy policy, Google Play Developer account registration (surprisingly complex), demo playlists, screenshots, a first app icon, and the first internal build installed on a real device via the Play Store.

April 19, 2026 · 8 min · Karl-Ernst Kiel

Day 11(a): Persistence refactor, export/import, UI polish, and splitting App.kt

The last Android-only code moved into shared KMP. JSON export and import landed. The app got a proper color schema with a dark/light toggle. Then App.kt — grown to 1400 lines — got split into focused files without touching the layout, after two earlier failed attempts taught us exactly which composables are safe to extract.

April 18, 2026 · 5 min · Karl-Ernst Kiel

Day 10: Preparing for iOS by testing Android

A feature sprint finished the Song pool with a full Library screen. Then a technical audit triggered an architectural refactor — 130 lines of domain logic moved from Android-only code into the shared KMP module, with 14 new tests that already run on the iOS simulator. Zero lines of iOS code written today, and the app is meaningfully closer to supporting it.

April 17, 2026 · 7 min · Karl-Ernst Kiel

Day 9: Editing, swiping, playlists, and a very satisfying number

The longest session so far. Song and special entry editing, a complete redesign of the swipe gestures, multiple playlist support, JSON persistence, and a jitter measurement that confirms the audio engine is production-ready.

April 16, 2026 · 7 min · Karl-Ernst Kiel

Day 7: Building the main screen — controls, playlist, and a lot of iteration

The main screen finally looks like a real app. A long session covering the last metronome controls, the playlist list, a responsive layout, and several bugs that only surface on a real device.

April 13, 2026 · 5 min · Karl-Ernst Kiel

Day 5: UI design, a foreground service, and a hard sync problem

Today had three acts: sketching the full UI concept, building a foreground service, and solving an audio/visual sync problem that turned out to require a C++ fix.

April 11, 2026 · 6 min · Karl-Ernst Kiel

Day 4: First audio prototype running on a real device

The metronome clicks on a real Android device. Here’s how Claude handled the architecture, Gemini wrote the code, and I directed traffic between them.

April 10, 2026 · 6 min · Karl-Ernst Kiel

Day 2: Picking a name, choosing an architecture, and making the first commit

SessionClick has a name, a GitHub repo, and a KMP project skeleton. Here’s how the decisions fell.

April 8, 2026 · 4 min · Karl-Ernst Kiel