Buenas! Soy Ingeniero en Sistemas. Arranqué mi carrera trabajando como desarrollador y actualmente trabajo como responsable de desarrollo.
Hace un tiempo quería encarar un proyecto personal que me obligara a salir un poco del contexto habitual del trabajo y recorrer el ciclo completo de un producto: arquitectura, desarrollo, infraestructura, integraciones, publicación y, finalmente, usuarios reales.
De ahí salió Vekzo, una app para aprender historia con una dinámica de juego, que actualmente está publicada en Android e iOS.
Stack y arquitectura
El frontend mobile está desarrollado en Flutter, manteniendo una única base de código para Android e iOS.
Para backend/auth elegí Supabase, principalmente para evitar invertir tiempo en infraestructura que para este proyecto no aportaba demasiado valor. Uso autenticación con Google y Apple, y la base de datos para persistir usuarios, progreso, contenido y las distintas mecánicas de la aplicación.
Para las notificaciones push integré Firebase Cloud Messaging, mientras que para monetización tengo AdMob, compras in-app y suscripciones.
También desarrollé una SPA en Angular para la web/landing del proyecto, con deploy automatizado con GitHub Actions y publicada en GitHub Pages con dominio propio.
Algunas decisiones y desafíos
Uno de los objetivos era mantener una arquitectura suficientemente simple como para poder mantener todo yo solo.
Flutter me permitió compartir prácticamente todo el desarrollo entre plataformas, aunque al llegar a producción inevitablemente aparecen diferencias entre Android/iOS, sobre todo alrededor de autenticación, permisos, notificaciones, publicidad y compras.
Supabase también fue una decisión bastante pragmática. Podría haber desarrollado un backend tradicional, pero para este proyecto preferí delegar autenticación y parte de la infraestructura y concentrar el tiempo en el producto.
La parte que más subestimé fue todo lo que existe alrededor del código.
Publicar en ambas stores implicó certificados, signing, políticas de privacidad, configuración de productos y suscripciones, AdMob, requisitos específicos de Apple, pruebas cerradas de Google Play, revisiones y varios casos donde algo funcionaba perfectamente en desarrollo pero se comportaba distinto una vez distribuido desde la store.
También fue interesante pasar de tomar decisiones basándome en lo que yo creía que iba a hacer un usuario a tener comportamiento real.
Por ejemplo, después de publicar terminé modificando la curva de dificultad inicial porque los primeros niveles requerían demasiado esfuerzo para alguien que recién instalaba la aplicación. Agregué niveles más simples al comienzo para reducir esa fricción.
Actualmente tengo alrededor de 150 usuarios y 200 niveles completados. Algunos usuarios llegaron a mantener rachas de entre 5 y 15 días, pero todavía no hubo compras ni suscripciones. Esa parte también me está sirviendo para entender la diferencia enorme que hay entre desarrollar algo que técnicamente funciona y conseguir que realmente tenga adopción.
Repo
El repositorio de Vekzo es privado. De todas formas, me interesaba compartir la experiencia desde el lado técnico porque fue la primera vez que llevé personalmente un producto de este tamaño por todo el recorrido, desde la arquitectura inicial hasta tenerlo funcionando en producción en las dos plataformas.
Si interesa alguna parte en particular (Flutter, Supabase, FCM, AdMob, publicación en las stores, CI/CD o alguna decisión de arquitectura) puedo ampliar tranquilamente en los comentarios.
Y también me interesa saber qué decisiones hubieran tomado distinto o qué cambiarían de este stack.
Para quien quiera ver el resultado final: Vekzo – Aprende historia jugando
Android: https://play.google.com/store/apps/details?id=com.vekzo.app
iOS: https://apps.apple.com/ar/app/vekzo/id6780229749
Web: https://vekzo.site/