
Self-Employed | July 2025 - December 2025 | Toronto, ON
Career break between General Motors (Jun 2025) and PolarisMail (Jan 2026) — run as a self-directed product sprint in cross-platform engineering.
Overview
Instead of coasting between roles, I gave myself the brief that usually goes to an entire squad: take a product from idea to production, alone. Over six months I designed, built, and operated a cross-platform consumer app for cheese enthusiasts — a single Kotlin codebase running on Android, iOS, and desktop — along with the backend, infrastructure, and delivery pipeline behind it. The Kotlin Multiplatform depth built here fed directly into my current role as a Senior KMP Developer.
Key Responsibilities and Achievements
Cross-Platform Product Engineering
- Architected the app with Kotlin Multiplatform (KMP) and Compose Multiplatform (CMP): one implementation, three platforms, zero feature drift
- Bet early on the next-generation Android stack — Navigation 3, Paging 3, Metro DI, Ktor Client, Coil, Haze — adopting these libraries while they were still new and forming the firsthand opinions most teams don’t yet have
- Kept the UI adaptive and native-feeling across form factors, from phones to resizable desktop windows
Full-Stack Ownership
- Designed and built the product’s REST API with Kotlin/Spring Boot on PostgreSQL
- Containerized the backend with Docker and self-hosted the deployment — owning the ops story, not just the code
Engineering Rigor as a Team of One
- Set up GitHub Actions CI/CD running unit tests and Paparazzi screenshot tests on every change, so quality was enforced by the pipeline rather than by memory
- Designed and shipped this portfolio site as well: a bilingual Hugo site deployed on Cloudflare Pages with custom security middleware
- Used Claude Code and Mistral Vibe CLIs as light-touch assistants — deliberately kept to a supporting role, since the goal was to learn the frameworks and libraries firsthand rather than delegate that learning
Technical Stack
- Languages
- Kotlin
- Frameworks
- KMPCMPSpring Boot
- Backend
- PostgreSQLDockerself-hosted deployment
- Libraries
- Navigation3Paging3Ktor ClientCoilHazeMetro DI
- CI & Testing
- GitHub ActionsPaparazziUnit Testing
- AI Tooling
- Claude CodeMistral Vibe (light use)
- Web
- HugoCloudflare Pages
Challenges and Solutions
Challenge 01 Shipping one UI to Android, iOS, and desktop without settling for a lowest-common-denominator experience
Solution
Shared the entire UI with Compose Multiplatform while keeping it adaptive per form factor, and locked cross-platform rendering down with Paparazzi screenshot tests
Challenge 02 Betting on brand-new libraries (Navigation 3, Metro DI) with little community guidance to lean on
Solution
Went straight to source code and release notes, prototyped aggressively, and kept each library behind clean architecture boundaries so any bet could be swapped out cheaply
Challenge 03 Covering product, mobile, backend, and infrastructure as a single person
Solution
Let automation do the team’s job: Dockerized Spring Boot services, a self-hosted deployment, and a GitHub Actions pipeline gating every change
Impact
- Delivered solo what typically takes a cross-functional team: product design, mobile, backend, and infrastructure
- Built production-grade KMP/CMP expertise ahead of the curve — the direct springboard to my current Senior Kotlin Multiplatform role
- Proved full-stack range, from Compose UI down to Dockerized Spring Boot services on self-managed infrastructure