Senior Mobile Engineer · ArtStation @ Epic Games
I ship mobile apps for hundreds of thousands of artists.
9+ years building Android products end-to-end. Today: leading the next-gen ArtStation client on Kotlin Multiplatform — Compose Multiplatform on Android, SwiftUI on iOS — while keeping the native Android app shipping to 300K+ users.
Android
017+ years on a single shipping product. Java → Kotlin → Compose.
iOS
02SwiftUI screens with Kotlin/Native interop in shared modules.
Kotlin Multiplatform
03Cross-platform feature core: MVI, Decompose, Ktor, SQLDelight, Koin.
Featured work
What I'm actually shipping.
ArtStation Android → KMP
Rebuilding the ArtStation mobile clients on a shared Kotlin Multiplatform core (home / discover / project / profile / messaging / comments / login / collections / deeplinks / create-artwork) with Compose Multiplatform on Android and SwiftUI on iOS.
- Shared feature core consumed by both Android (Compose) and iOS (SwiftUI) clients.
- MVI end-to-end (Intent → Executor → Reducer → State) with ViewState-driven UI.
- Ktor + SQLDelight + Koin baseline, exported to iOS as an XCFramework via a CocoaPods + Xcode build phase pipeline.
Epic Design System (EDS)
Cross-platform Kotlin Multiplatform design system: semantic tokens, enum-first component APIs, Figma-naming 1:1, strict Android ↔ iOS parity.
- Token layers: EdsColors, EdsDimension, EdsBorderRadius, EdsAction, EdsFeedback, EdsTypography.
- Enum-first component APIs over hand-rolled variants — drift between platforms is a compile error.
- Around 37 foundational components in the first focused sprint.
ArtStation API test framework
Python + pytest framework for the ArtStation mobile-backend: fluent Pydantic-validated assertions, role-matrix selection, parallel xdist with per-worker isolated staging users.
- Per-worker staging-user bootstrap so xdist parallelism doesn't blow up on shared state.
- user_types marker for role-matrix selection across the suite.
- Reference-data file cache + coverage gap analysis vs. iOS and Android clients.
- CI: GitHub Actions with per-role summaries and auto-opened issues on failure.
AI-assisted engineering & Spec-Driven Development
Daily-driver setup for the mobile team: Claude Code with custom-authored agents and slash commands, MCP server integrations, and a Spec-Driven Development workflow integrated with Jira and the build pipeline.
- Authored team agents: code-review (PR review), build-verifier (gate on green build before merge), apps-review-deck (App Store / Play review aggregation), my-jira-tasks (per-engineer Jira surface).
- Authored slash commands: /feature (spec → plan → tasks bootstrap), /commit (conventional + ticket linking), /add-screen (Compose + KMP screen scaffold).
- Adopted Spec-Driven Development across the team — .sdd/specs / plans / tasks / progress layout, every non-trivial feature ships with a spec doc and an executable plan.
- MCP servers wired into Jira, Atlassian, and the local build/test toolchain so agents can read tickets, run checks, and write back status without context-switching.
Side projects
What I build outside work.
Personal projects covering JetBrains plugin engineering, Wear OS, cross-platform mobile, Telegram bot infrastructure, and bot-to-bot interop.
IDEgram
JetBrains IDE plugin that embeds Telegram directly inside the IDE via TDLib, plus a TypeScript backend for encrypted snippet sharing. Two repos shipping as one product on the JetBrains Marketplace.
wearAuth
TOTP authenticator with a Wear OS Tile companion: AES256 local secret storage, RFC 6238 codes, QR onboarding, real-time sync between phone and watch via the Wearable Data Layer.
TMDb KMP app
Personal Kotlin Multiplatform demonstrator outside Epic work — TMDB movie / TV / person browser with the same architecture stack I use professionally.
Telegram bot zoo
A handful of production Telegram bots running on a single Ubuntu VPS — flight-price tracker (Aviasales / Travelpayouts), Ozon price tracker via Playwright scraping, and a few smaller utility bots. All same baseline stack.
Discord ↔ Telegram bridge bot
A bot pair bridging a Discord channel and a Telegram chat — a Discord bot talks to a Telegram bot and forwards messages both ways, giving each side a window into the other community.
Experience
Where I've shipped.
-
Senior Mobile Engineer
May 2019 — PresentEpic Games · ArtStation · Novi Sad, Serbia · Kazan (until 2023)
Full-time at Epic Games since Feb 2023 (post-relocation). Previously contractor on the same product under Balistiq, kept through the Epic Games acquisition.
- Lead engineer on the ArtStation Android app: drove the Java → Kotlin migration, ButterKnife → ViewBinding rewrite, Room K-migration, kapt → KSP, AGP 8 / Gradle 8 / version-catalog modernization.
- Building the next-gen ArtStation mobile clients on Kotlin Multiplatform with Compose Multiplatform (Android) and SwiftUI (iOS) — MVI via Decompose + MVIKotlin, Ktor + SQLDelight + Koin.
- Shipped create-artwork (multi-step async upload pipeline, drag-to-reorder, drafts) and the security-driven OAuth2 / Epic SSO redesign through Chrome Custom Tabs + deeplinks.
- Co-built the Epic Design System: Figma-driven token system, KMP tokens + Compose / SwiftUI components, strict Android ↔ iOS API parity.
- After FTE transition, also leads the mobile team: sets up process, runs technical direction, and still ships features end-to-end.
- Authored the team's Python pytest API test framework and Claude Code agents / slash commands integrated with Jira and the build pipeline.
Kotlin Kotlin Multiplatform Swift Compose SwiftUI Ktor SQLDelight Decompose MVIKotlin Koin Python pytest -
Mobile Lead / Android Engineer
2017 — May 2019iXat Taxi · Kazan, Russia
- Multi-tenant Android taxi platform sold as a white-label franchise: shared business logic, per-fleet package name, branding, and theme.
- Grew from individual contributor to mobile lead — managed a small team, owned the client ↔ engineering interface, drove project planning.
- Shipped multiple white-label clients off the same modular codebase until project funding wound down.
Android Java Kotlin Multi-module Gradle REST APIs -
Android Engineer
2015 — 2017Vputi · Kazan, Russia
- Contract Android development for external clients: most projects were multi-module apps sharing infrastructure modules across customers.
- When the studio wound down, the core team continued together into iXat Taxi.
Android Java Multi-module Gradle
Skills
Stack I work in.
Languages
Android
iOS
Multiplatform & architecture
Networking & data
DI & reactive
Design systems
Testing & SDET
DevOps / build
Auth & security
Process & AI tooling
Contact
Let's talk.
Best reached by email. I'm based in Novi Sad and currently focused on KMP / Android / iOS engineering roles.