carlos.piñán

Carlos Piñán

Staff Android Engineer · Kotlin & AI-augmented engineering · Lima, Peru Staff Android Engineer · Kotlin e ingeniería aumentada con IA · Lima, Perú

I build Android software at 2B-user scale — and games on the side. Construyo software Android a escala de 2B usuarios — y juegos en el camino.

14+ years building and leading mobile software. Most recently Staff Engineer (IC6) at Meta, on WhatsApp's media infrastructure — photos, videos, files and stickers for more than 2 billion users. As tech lead I shipped Sticker Maker for Android end to end, from architecture to global launch, reversing a long-standing decline in sticker usage. Más de 14 años construyendo y liderando software móvil. Recientemente Staff Engineer (IC6) en Meta, en la infraestructura de medios de WhatsApp — fotos, videos, archivos y stickers para más de 2 mil millones de usuarios. Como tech lead entregué Sticker Maker para Android de punta a punta, de la arquitectura al lanzamiento global, revirtiendo una caída sostenida en el uso de stickers.

I work with Kotlin, Jetpack Compose, Clean Architecture and KMM, and use AI tools and agents daily for design decisions, coding and problem-solving. Android is my depth, not my limit — I also build with React and React Native, Flutter and iOS, and I'm open to learning anything and adapting to any environment: new language, unfamiliar stack, whatever the team already runs on. Outside work I maintain 95+ open-source repos, ship apps on Google Play, and build small games. Based in Lima, open to senior / staff mobile roles remotely. Trabajo con Kotlin, Jetpack Compose, Clean Architecture y KMM, y uso herramientas y agentes de IA a diario para decisiones de diseño, código y resolución de problemas. Android es mi especialidad, no mi límite — también desarrollo con React y React Native, Flutter e iOS, y estoy abierto a aprender cualquier cosa y a adaptarme a cualquier entorno: lenguaje nuevo, stack desconocido, lo que el equipo ya use. Fuera del trabajo mantengo más de 95 repos open source, publico apps en Google Play y hago juegos pequeños. Radico en Lima y estoy abierto a roles senior / staff móviles en remoto.

What I doEn qué trabajo

Six things I keep being paid forSeis cosas que hago bien

Consumer Android at scale, the architecture underneath it, the graphics work I do for fun, cross-platform work outside Android, the people side of engineering — and a habit of picking up whatever the job actually needs. Android de consumo a gran escala, la arquitectura debajo, el trabajo gráfico que hago por gusto, el desarrollo multiplataforma fuera de Android, el lado humano de la ingeniería — y la costumbre de aprender lo que el trabajo realmente necesite.

Android at scaleAndroid a gran escala

Media pipelines, gallery and picker surfaces, ExoPlayer, Android 13 granular media permissions, Google Photo Picker as a native entry point. Reliability work: ANR fixes and deadlocks in download, cursor and sticker pipelines. 50+ A/B experiments authored and managed. Pipelines de medios, galería y pickers, ExoPlayer, permisos granulares de Android 13, Google Photo Picker como punto de entrada nativo. Confiabilidad: correcciones de ANR y deadlocks en descarga, cursores y pipelines de stickers. Más de 50 experimentos A/B diseñados y gestionados.

  • Kotlin
  • ExoPlayer
  • A/B testing
  • ANR & deadlocks

Architecture & KotlinArquitectura y Kotlin

Clean Architecture, modularization of monolithic media stacks into independent modules, XML-to-Compose migrations, server-driven UI for banking apps, and Kotlin Multiplatform. Plus build automation: custom Gradle tasks and Python scripts that cut compile times. Clean Architecture, modularización de stacks de medios monolíticos en módulos independientes, migraciones de XML a Compose, server-driven UI para apps bancarias y Kotlin Multiplatform. Además automatización de builds: tareas Gradle propias y scripts en Python que reducen tiempos de compilación.

  • Jetpack Compose
  • KMM
  • Clean Architecture
  • Gradle

Graphics, games & on-device MLGráficos, juegos y ML en dispositivo

Led the migration of an on-device ML model from PyTorch to ExecuTorch across the Family of Apps — lower memory, zero regressions across A/B rounds. On my own time: OpenGL ES renderers, Godot 4 games, cocos2d-x in C++, and game loops written from scratch on a canvas. Lideré la migración de un modelo de ML en dispositivo de PyTorch a ExecuTorch en toda la familia de apps — menos memoria, cero regresiones en varias rondas A/B. Por mi cuenta: renderizadores OpenGL ES, juegos en Godot 4, cocos2d-x en C++ y game loops escritos desde cero sobre un canvas.

  • ExecuTorch
  • OpenGL ES
  • Godot 4
  • cocos2d-x

Leadership & mentoringLiderazgo y mentoría

Mentored engineers from IC3 to IC5 on architecture and career growth, ran technical interviews, wrote milestone plans and built team wikis so knowledge outlives the project. Certified Scrum Master, former GDG Lima organizer and speaker. Mentoría a ingenieros de IC3 a IC5 en arquitectura y desarrollo de carrera, entrevistas técnicas, planes de hitos y wikis de equipo para que el conocimiento sobreviva al proyecto. Certified Scrum Master, ex organizador y ponente de GDG Lima.

  • Tech lead
  • Mentoring
  • Hiring
  • GDG Lima

Cross-platform & iOSMultiplataforma e iOS

Android is where I go deepest, but it isn't the only place I ship. React and React Native — Stat Calculator on the store is React Native. Flutter for cross-platform apps, iOS with Swift and SwiftUI, and Kotlin Multiplatform when the shared layer belongs in Kotlin. Web too: PWAs, WebAssembly builds and plain HTML/CSS/JS, this site included. Android es donde llego más profundo, pero no es lo único que publico. React y React Native — Stat Calculator, publicada en la tienda, es React Native. Flutter para apps multiplataforma, iOS con Swift y SwiftUI, y Kotlin Multiplatform cuando la capa compartida va en Kotlin. También web: PWAs, builds en WebAssembly y HTML/CSS/JS puro, incluida esta página.

  • React
  • React Native
  • Flutter
  • iOS / Swift
  • KMP

Learning whatever the job needsAprender lo que el trabajo necesite

I'm open to learning anything and I adapt to any environment. In 14+ years I've moved from cocos2d-x and C++ games to banking apps, to WhatsApp at 2B users, and picked up Godot, ExecuTorch, Python tooling and AI agents along the way — usually because a project needed them, not because I planned it. New language, unfamiliar stack, legacy codebase, a team that works nothing like the last one: point me at it and I'll be useful quickly. Estoy abierto a aprender cualquier cosa y me adapto a cualquier entorno. En más de 14 años pasé de juegos en cocos2d-x y C++ a apps bancarias, luego a WhatsApp con 2 mil millones de usuarios, y en el camino aprendí Godot, ExecuTorch, herramientas en Python y agentes de IA — casi siempre porque el proyecto lo pedía, no porque estuviera planeado. Lenguaje nuevo, stack desconocido, código heredado, un equipo que funciona distinto al anterior: apúntame ahí y seré útil rápido.

  • Fast ramp-upAprendizaje rápido
  • Any stackCualquier stack
  • Remote & on-siteRemoto y presencial
  • EN / ES

ShippedPublicado

Apps on Google PlayApps en Google Play

Seven are live on the store and two are on their way; each one has its landing page and privacy policy hosted here. Siete están publicadas en la tienda y dos están en camino; cada una tiene su página y su política de privacidad alojadas aquí.

Stat Calculator

Stat Calculator

Pokémon stat calculator across all nine generations — DVs and Stat Exp for Gen I–II, IVs/EVs/natures from Gen III on. 1,025 species cached offline, build comparison, formula reference, six languages. Calculadora de estadísticas Pokémon para las nueve generaciones — DVs y Stat Exp en Gen I–II, IVs/EVs/naturalezas desde Gen III. 1,025 especies en caché offline, comparación de builds, referencia de fórmulas, seis idiomas.

  • React Native
  • Offline
  • 6 languages
Corta Spam

Corta Spam

Open-source call blocker for Peru and beyond. Rule engine with wildcard patterns, country matching, quiet hours, repeat-call rules and a bundled offline spam list. It does not declare the internet permission, so it cannot phone home. Bloqueador de llamadas open source para Perú y más allá. Motor de reglas con comodines, coincidencia por país, horas de silencio, reglas de llamadas repetidas y una lista de spam offline incluida. No declara el permiso de internet, así que no puede enviar nada.

  • Kotlin
  • MIT
  • No internet permission
Retro 3D Maze

Retro 3D Maze

The Windows 95 maze screen saver rebuilt for Android as four things in one: screen saver, playable game, live wallpaper and Daydream. Eleven maze algorithms, five sizes, texture packs drawn at runtime. El protector de pantalla del laberinto de Windows 95 rehecho para Android como cuatro cosas en una: protector, juego, fondo animado y Daydream. Once algoritmos de laberinto, cinco tamaños y texturas dibujadas en tiempo de ejecución.

  • Kotlin
  • OpenGL ES
  • Live wallpaper
Turbo Race

Turbo Race

Endless tunnel runner: three difficulties, Play Games leaderboards and achievements. Rewritten in Godot 4 from a cocos2d-x game I shipped years ago — and it runs in the browser, no install. Runner de túnel infinito: tres dificultades, tablas de líderes y logros de Play Games. Reescrito en Godot 4 a partir de un juego en cocos2d-x que publiqué hace años — y corre en el navegador, sin instalar nada.

  • Godot 4
  • Play Games
  • Web build
Peru Combi Rush

Peru Combi Rush

Drive a Lima combi: pick up passengers, dodge traffic, survive the route. A love letter to Peruvian public transport, built in Godot. Maneja una combi en Lima: recoge pasajeros, esquiva el tráfico y sobrevive la ruta. Una carta de amor al transporte público peruano, hecha en Godot.

  • Godot 4
  • Pseudo-3D
  • TypeScript
  • EN / ES
Piano Solfeo

Piano Solfeo

Sight-reading and music theory drills. Eight modes covering treble and bass clef notes, chords, intervals, scales, the circle of fifths and an interactive keyboard. Do-Re-Mi or C-D-E naming, streaks, fully offline. Ejercicios de lectura a primera vista y teoría musical. Ocho modos: notas en clave de sol y fa, acordes, intervalos, escalas, círculo de quintas y un teclado interactivo. Nombres Do-Re-Mi o C-D-E, rachas y todo offline.

  • Kotlin
  • Compose
  • Offline
Bendiciones

Bendiciones

Spanish greetings ready to send over WhatsApp: photos with a phrase, animated GIFs, sticker packs and optional verses, sorted by time of day and tone. Kotlin Multiplatform, offline catalogue, TalkBack support. Saludos en español listos para mandar por WhatsApp: fotos con frase, GIFs animados, packs de stickers y versículos opcionales, ordenados por momento del día y tono. Kotlin Multiplatform, catálogo offline y compatible con TalkBack.

  • KMP
  • Compose
  • Stickers
  • ES / EN / PT-BR
Pocket Kit

Pocket Kit

Four WhatsApp chores in one app: open a chat without saving the contact, scan pages to a PDF, cut a subject out of a photo into a sticker pack, and split a video into status-sized clips. Everything runs on the device — no account, and no storage permission on any Android version. Landing page and policy are live; the store listing is next. Cuatro molestias de WhatsApp en una app: abrir un chat sin guardar el contacto, escanear páginas a PDF, recortar a una persona de una foto para un pack de stickers y cortar un video en clips que entran en un estado. Todo se procesa en el teléfono — sin cuenta y sin permiso de almacenamiento en ninguna versión de Android. La página y la política ya están publicadas; la ficha de la tienda es lo siguiente.

  • Kotlin
  • Compose
  • ML Kit
  • EN / ES
Huellitas al Día

Huellitas al Día

A pet health record that builds the schedule instead of asking you to. Give it the species, the age and whatever the animal already received, and it derives the vaccines, deworming and check-ups from there. Built for rescued pets: an unknown history stays unknown rather than being guessed as overdue. The app declares no internet permission, so it cannot make a network request. Landing page and policy are live; the store listing is next. Un historial de salud que arma el calendario en vez de pedirte que lo armes tú. Le dices la especie, la edad y lo que la mascota ya recibió, y de ahí deriva las vacunas, la desparasitación y los controles. Pensada para mascotas rescatadas: un historial desconocido queda como desconocido en lugar de aparecer atrasado. No declara el permiso de internet, así que es incapaz de hacer una petición de red. La página y la política ya están publicadas; la ficha de la tienda es lo siguiente.

  • KMP
  • Compose
  • SQLDelight
  • No internet permission

No installSin instalar

Open it in a browserÁbrelo en el navegador

These run straight from a URL — no store account, nothing to download. Corren directo desde una URL — sin cuenta de tienda ni descargas.

Turbo Race

Turbo Race — web

The full Godot game exported to WebAssembly. Arrow keys or touch, same physics as the Android build. El juego completo de Godot exportado a WebAssembly. Flechas o toque, con la misma física que la versión Android.

Mis Mascotas

Mis Mascotas

A memorial site for pets — installable PWA, works offline, photo collages per pet, all driven by JSON files. Un sitio memorial para mascotas — PWA instalable, funciona offline, collages por mascota y todo definido con archivos JSON.

Open sourceCódigo abierto

Repositories I wroteRepositorios que escribí

95+ public repos on GitHub, 60 of them written by me, 150+ stars, Arctic Code Vault contributor. These ten are the ones worth your time, ordered by how much use they've seen — the rest are listed by theme below. Más de 95 repos públicos en GitHub, 60 escritos por mí, 150+ estrellas y contribuidor del Arctic Code Vault. Estos diez son los que valen tu tiempo, ordenados por el uso que han tenido — el resto está listado por tema más abajo.

Also on GitHub También en GitHub

The other 49 repositories I wrote, by theme. Some are talk and workshop sources, some are practice — where a repo follows a book, a course or someone else's game, it says so. Los otros 49 repositorios que escribí, por tema. Algunos son fuentes de charlas y talleres, otros son práctica — cuando un repo sigue un libro, un curso o el juego de otra persona, lo dice.

Graphics & 3D on AndroidGráficos y 3D en Android

Maze-3D · OpenGLES-32-Samples-App · OpenGLES2-Android · Android-Cube-OpenGLES-2 · Android-Canvas-Spritesheet · 3D-Graphics-Engine · Frogger · AndroidStudioAndengine · OpenGL-ES-2.0-Android-to-Kotlin (book, ported to Kotlin)(libro, portado a Kotlin) · Mobile-3D-Game-Development (book source)(código de libro)

cocos2d-x & the C++ yearscocos2d-x y los años de C++

Turbo-Race (the 2012 game, updated to cocos2d-x 4.0)(el juego de 2012, actualizado a cocos2d-x 4.0) · TweeJumpCocos2dx (12 ★ — my cocos2d-x port of haqu's TweeJump)(12 ★ — mi port a cocos2d-x del TweeJump de haqu) · SneakyInput-Cocos2dx-2.0.x (2 ★, 13 forks — my fix of the joystick lib for v2.0.x)(2 ★, 13 forks — mi arreglo de la librería de joystick para v2.0.x)

Talks & workshops — GDG Lima, 2012–2019Charlas y talleres — GDG Lima, 2012–2019

DevFestLima2012_AndroidGame · GameDevConferenceLima15Julio · WorkshopAndroidGame2012 · GDayX · AndroidPE · DartSaltarin · CalculadoraDart · 01-Introduccion-SRC, 02-Fisica-Basica, 03-Colisiones-Basicas (my "game dev from zero" course, in Spanish)(mi curso «desarrollo de juegos desde cero», en español) · Android-Jetpack-Composer · CameraX-and-MLKit (Kotlin Everywhere)(Kotlin Everywhere)

HTML5 games, 2013–2014Juegos HTML5, 2013–2014

SnakeHTML5 · TetrisHTML5 · Bomberman · PlatformerExampleHTML5 · box2d

Compose, Android platform & webCompose, plataforma Android y web

Basic-Bluetooth-Compose-Chat · Jetpack-Compose-Challenge-Week-1, Week-2 · AndroidDevChallenge · Pokedex (follows a video series)(sigue una serie de videos) · Android-Template-Libraries · Android-Associate-Developer-Training · AugmentedReality · GoogleMobileVision · pokestats-pwa · Ionic-Practice

Algorithms & courseworkAlgoritmos y cursos

Algorithms-Practice · Leetcode-Solutions · Kotlin-for-Java-Developers · AndroidNanodegree, CapstoneProject, android_spotify_streamer · Advanced-Android-Updated, Android-Kotlin-Advanced (Udacity courses, updated to current APIs)(cursos de Udacity, actualizados a APIs actuales)

Browse all 60 repositories I authored on GitHub Ver los 60 repositorios que escribí en GitHub

ExperienceExperiencia

Where I've beenDónde he estado

From cocos2d-x games in Lima to WhatsApp media infrastructure in London. De juegos en cocos2d-x en Lima a la infraestructura de medios de WhatsApp en Londres.

Shall we work together?¿Trabajamos juntos?

Open to senior / staff mobile roles — Android, KMM, React Native, Flutter or iOS — remote from Lima. If your stack is none of those, I'm happy to learn it; I adapt to whatever environment the team already works in. Also happy to talk about games, OpenGL, or why your app ANRs on cold start. Abierto a roles senior / staff móviles — Android, KMM, React Native, Flutter o iOS — en remoto desde Lima. Si tu stack no es ninguno de esos, lo aprendo con gusto; me adapto al entorno en el que el equipo ya trabaja. También me encanta hablar de juegos, OpenGL o de por qué tu app hace ANR en el arranque en frío.

carlos.pinan@gmail.com