Hi, I'm

Leonardo Bai

Android Engineer

5+ years delivering payment features and biometric SDKs at fintech scale — Kotlin, Clean Architecture, and testing culture included.

Leonardo Bai

About

Senior Android Engineer with 5+ years building production Kotlin apps in fintech and mobile security. At PicPay, I shipped corporate payment features — Boleto, Pix, and card flows — across a large-scale multimodular monorepo serving millions of business users. At Certta (formerly Caf), I contributed to the full redesign of a biometric SDK, reaching 95% test coverage and making it viable for enterprise fraud-prevention clients with strict reliability SLAs.

I specialize in Clean Architecture, Jetpack Compose, and SDK development. At PicPay, I introduced a testing culture from scratch — going from near-zero coverage to a practice the team actively maintained. At Certta, the team built that culture together from day one as part of a full SDK redesign, and I was part of establishing it. I've also built CI/CD pipelines with Docker and GitHub Actions — including automated release pipelines and Dokka-generated docs deployed to GitHub Pages in my open-source Ktor project — and served as the architectural reference for both teams.

Beyond Android, I build with Kotlin Multiplatform (KMP/Compose Multiplatform) targeting both Android and iOS, write Swift and SwiftUI for native iOS work, use Ktor for backend services, and integrate C++ via JNI for performance-critical native components. I publish to Google Play. Fluent in English — actively looking for remote international opportunities where engineering quality and delivery reliability are first-class concerns.

Android iOS Kotlin Jetpack Compose KMP Clean Architecture MVVM MVI SOLID Coroutines / Flow RxJava Dagger Ktor CI/CD Docker Swift Java Flutter Google Play Firebase

Experience

  1. Mar 2025 – Apr 2026 Corporate (PJ)

    Android Engineer

    PicPay

    Corporate (PJ) payment solutions at one of Brazil's largest digital banks. Built with Kotlin, Jetpack Compose, Clean Architecture, and MVVM in a large-scale multimodular monorepo. Introduced a testing culture from scratch during legacy refactoring — improving coverage, reducing production incidents, and increasing delivery reliability. Go-to reference for architectural decisions and code standards across the team. Worked on bank slips (boleto), Pix, and card payment methods.

    Android Kotlin Jetpack Compose Google Play Firebase MVVM Clean Architecture SOLID Testing
  2. May 2024 – Mar 2025

    Android Engineer

    Certta (formerly Caf)

    Mobile security SDK team with development in Kotlin and Swift. Contributed to the full redesign of the FaceLiveness SDK from scratch — new modular architecture with 95% test coverage built collaboratively with the team. Engineered reverse-proxy integration for both Android and iOS under urgent delivery pressure from a high-value enterprise client, stepping outside the Android domain to own the solution end-to-end. Developed runtime metric reporting and crash tracking to Metabase via a Kotlin Multiplatform (KMP) library shared across Android and iOS — avoiding Google dependencies that would conflict with client app integrations in a third-party SDK context. Managed Protobuf SDK flavors (Lite and standard).

    Android iOS Kotlin Swift Firebase MVVM Clean Architecture SOLID Mobile Security SDK Testing
  3. Feb 2022 – Apr 2024

    Android Engineer

    Invillia

    Android payment SDK and apps for card terminals, built with Kotlin, Java, and C++ via JNI for performance-critical native components. Diagnosed and resolved a battery drain and OS-level performance bottleneck on merchant devices: terminals used by street vendors would accumulate a full day's worth of queued metrics and flush everything at once via a background Service when connectivity returned — choking the OS. Replaced the trigger-based flush with a WorkManager job on a 30-minute configurable interval, draining metrics during idle time, and added a transaction guard to prevent mid-payment interference. Implemented R8 obfuscation for payment-grade reverse engineering protection. Built a CI pipeline for instrumented tests using Docker Compose and GitHub Actions. Managed PagBank payment SDK flavors across multiple integration contexts.

    Android Kotlin Java Firebase C++ / JNI MVVM Clean Architecture SOLID Testing Payment SDK Docker CI/CD R8
  4. Jan 2021 – Jan 2022

    Android Developer

    BRQ Digital Solutions

    Maintained legacy Java projects and developed Kotlin applications integrated with Salesforce. Built the company's first native Android app in Kotlin — introducing the language to a mobile portfolio written entirely in legacy Java — and its first Flutter app, reducing onboarding time. Built a native Kotlin upload library using the Salesforce Composite API.

    Android Kotlin Java Flutter Firebase MVVM

Education

Postgraduate
Software Architecture, Cybersecurity & Data Engineering
Pontifical Catholic University (PUC) — Curitiba, PR
2024 – 2025
Postgraduate
Mobile Application Development
Pontifical Catholic University (PUC) — Curitiba, PR
2023 – 2025
Bachelor's
Software Engineering
UniCesumar — Maringá, PR
2020 – 2024
Associate's
Systems Analysis and Development
UniCesumar — Maringá, PR
2020 – 2023

Projects

AstorMemory app icon

AstorMemory

Cross-platform memory matching game featuring fantasy creatures called Astors. Built with Kotlin Multiplatform and Compose Multiplatform for Android and iOS. Available on Google Play.

Android iOS Google Play Firebase KMP Compose Multiplatform SQLDelight Koin Ktor Client Coroutines
Project Middleware

Project Middleware

API transformation service that lets you define mapping rules to convert any public API's response into a custom format. Supports field renaming, nesting, concatenation, and empty-field exclusion — with a preview endpoint for safe testing before committing a route.

Kotlin Ktor Server Ktor Client MongoDB Docker Fly.io GitHub Actions
Middleware Playground app icon

Middleware Playground

Kotlin Multiplatform client for Project Middleware. Android (Jetpack Compose) and iOS (SwiftUI) apps share business logic via KMM, with a SQLDelight local cache and Ktor networking. Create, preview, and manage API route mappings from your phone.

Android iOS Google Play Firebase KMP Jetpack Compose SwiftUI SQLDelight Ktor Client Hilt Coroutines
Flutter

DeepBreath

Flutter app that shows real-time air quality data. Browse countries, select a location, and view detailed air quality parameters.

Flutter Dart GetX

Articles

I write about Android development, Kotlin, and architecture on Medium.

  • The AI Bubble: Subsidies, Sycophancy, Vibe Coding, and the Collapse That’s Coming

    This article is an English adaptation of my YouTube video “Entendendo de vez a BOLHA das Inteligências Artificiais” (Understanding the AI Bubble Once and For All), originally recorded in Portuguese for the Canal Backtracking channel. If you speak Portuguese, you can watch the ful…

  • Dokka Convention Plugins: Streamlined Documentation for Multi-Module Android Projects

    Why Convention Plugins for Dokka? As Android projects scale with multiple modules, maintaining consistent documentation standards becomes as crucial as code quality. Dokka, Kotlin’s official documentation engine ( kotlin/dokka ), is powerful for generating beautiful API documenta…

  • Detekt Convention Plugins: Effortless Code Quality for Android

    Why Convention Plugins for Detekt? As Android projects grow in complexity with multiple modules, maintaining consistent code quality standards becomes increasingly challenging. While Detekt is an excellent static analysis tool for Kotlin projects, configuring it across dozens of …

  • Simplifying Multi-Module Android Projects with Convention Plugins

    How Convention Plugins Fix Android Build Chaos Modern Android apps require multi-module setups, but traditional build configurations — copy-pasted, inconsistent, and bloated — slow teams down. Convention plugins replace 43+ lines of boilerplate with 3-line declarations, solving s…

All articles on Medium →

Get in Touch

Feel free to reach out — I'm happy to chat.