Background
Senior Android engineer in Athens, Greece — nearly a decade into the craft. I work primarily in Kotlin and Jetpack Compose with opinions about clean architecture and quiet code: the kind that makes a feature feel obvious in retrospect and stays maintainable six months later. Fluent in Greek and English.
AI-assisted development is core to how I work: I build with coding agents like Claude Code day to day, write my own Claude skills to encode a project's conventions and workflows, and treat reviewing and correcting their output as its own engineering skill — an agent accelerates the work, but the judgment on what ships stays mine.
Currently
At Tapforce I ship four production apps: Parsnip, a learn-to-cook
app; Builder Brigade, a home-construction project manager;
Edda, an audiobook player; and Gemini Near Me, an astrology
and self-development app. Parsnip, Builder Brigade, and Edda are
feature-sliced — every feature a top-level package owning its own
data, domain, and presentation over a shared core — while Gemini
Near Me runs the classic layer-based spine; three on Hilt, Edda on
Koin. Working across both DI ecosystems and both organizing principles
is a useful discipline: the right architecture is always the one that
fits the team and the product, not the one that won a blog post war.
The fifth codebase, Brrrr, is the multiplatform one: a
personal-finance app I took through a complete Kotlin Multiplatform +
Compose Multiplatform rewrite, with all logic and UI shared in
commonMain and running on both Android and iOS.
Across all of them the conventions are machine-enforced rather than documented and hoped for: custom detekt rule modules, Konsist architecture-boundary tests, and CI ratchets that are only allowed to tighten.
Stack
- Languages: Kotlin, Java (legacy)
- UI: Jetpack Compose, Material 3, Compose Multiplatform
- Architecture: MVVM + Clean Architecture; feature-sliced and layer-based in production
- Multiplatform: Kotlin Multiplatform — shared Compose UI,
expect/actualkept to a handful of seams, GitLive Firebase - Async: Coroutines, Flow
- DI: Hilt, Koin
- Persistence: Room, DataStore, Supabase, Firebase
- Networking: Retrofit, OkHttp, Ktor, Apollo GraphQL (normalized cache, subscriptions)
- Media: Media3/ExoPlayer — HLS, MediaSession playback services
- Quality: JUnit, MockK, Espresso; Konsist architecture tests, custom detekt rules, Spotless/ktfmt
- Tooling / CI: GitHub Actions, Fastlane, Figma
- AI-assisted development: Claude Code, agentic coding workflows
Timeline
Tapforce — Senior Android Engineer 2022–present. Lead Android engineer owning the four production apps above end-to-end. I set the Android architecture, code standards, and review culture; drove the team's move to Jetpack Compose, Clean Architecture, and Kotlin Multiplatform; and built the enforcement layer that keeps five codebases consistent — custom detekt rules, Konsist boundary tests, CI ratchets — plus the Figma-to-code design-token pipeline behind Parsnip.
Open to
Not actively looking, but happy to talk to teams doing interesting Android work — particularly consumer apps.
