mamadra.dev RU

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.

Novi Sad, Serbia Open to mobile / KMP roles

Android

01

7+ years on a single shipping product. Java → Kotlin → Compose.

Kotlin Jetpack Compose Material 3 Coroutines · Flow Dagger 2 · KSP Room Retrofit · OkHttp Media3 / ExoPlayer

iOS

02

SwiftUI screens with Kotlin/Native interop in shared modules.

Swift SwiftUI UIKit interop Swift Package Manager CocoaPods XCFramework Xcode build phases

Kotlin Multiplatform

03

Cross-platform feature core: MVI, Decompose, Ktor, SQLDelight, Koin.

Kotlin Multiplatform Compose Multiplatform MVIKotlin Decompose Ktor 3 SQLDelight Koin kotlinx.serialization

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.
Kotlin Multiplatform Compose MP SwiftUI MVI Decompose Ktor SQLDelight

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.
Design Tokens Compose SwiftUI XCFramework Theming

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.
Python pytest pytest-xdist Pydantic 2 Faker GitHub Actions

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.
Claude Code MCP Spec-Driven Development AI agents Jira integration DX tooling

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.

Kotlin IntelliJ Platform SDK Jewel / Compose TDLib (JNI) TypeScript Node + SQLite Caddy Ubuntu VPS

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.

Kotlin Wear OS Wearable Data Layer API Material 3 AES256 Google Play Billing

TMDb KMP app

Personal Kotlin Multiplatform demonstrator outside Epic work — TMDB movie / TV / person browser with the same architecture stack I use professionally.

Kotlin Multiplatform Compose Multiplatform MVIKotlin Decompose Ktor 3 Koin Coil 3

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.

Python 3.11+ aiogram 3 APScheduler SQLite / aiosqlite Playwright httpx DigitalOcean / Ubuntu

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.

Python discord.py aiogram Bot interop

Experience

Where I've shipped.

  1. Senior Mobile Engineer

    May 2019 — Present

    Epic 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
  2. Mobile Lead / Android Engineer

    2017 — May 2019

    iXat 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
  3. Android Engineer

    2015 — 2017

    Vputi · 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

Kotlin Kotlin Multiplatform Swift Java Python Gradle Kotlin DSL

Android

Jetpack Compose Material 3 Android SDK ViewBinding RecyclerView WorkManager AndroidX Lifecycle AndroidX Navigation ExoPlayer / Media3 Glide Coil ARCore

iOS

SwiftUI UIKit Swift Package Manager CocoaPods XCFramework Kotlin/Native interop xcodegen xcodebuild

Multiplatform & architecture

Kotlin Multiplatform Compose Multiplatform Decompose MVIKotlin MVI Clean Architecture Modularization Essenty

Networking & data

Ktor Retrofit OkHttp kotlinx.serialization Gson REST API design SQLDelight Room multiplatform-settings Offline-first

DI & reactive

Koin Dagger 2 KSP Kotlin Coroutines Flow RxJava 2

Design systems

Design Tokens Figma-to-code Theming Component libraries Accessibility

Testing & SDET

pytest pytest-xdist Pydantic Faker JUnit MockK kotlin-test Ktor MockEngine Espresso Firebase Test Lab Allure

DevOps / build

GitHub Actions Gradle 8 + version catalogs Spotless / ktlint Kover ProGuard / R8 Firebase Crashlytics Firebase Cloud Messaging

Auth & security

OAuth 2.0 OpenID Connect 2FA AppAuth Google Identity Facebook Login Epic Games SSO JWT

Process & AI tooling

Spec-Driven Development (SDD) .sdd/specs · plans · tasks · progress Claude Code Custom agents authoring Slash commands authoring MCP servers MCP ↔ Jira / Atlassian MCP ↔ build pipeline AI-assisted code review Cursor Technical documentation

Contact

Let's talk.

Best reached by email. I'm based in Novi Sad and currently focused on KMP / Android / iOS engineering roles.