
Greenpeace Apptivista
Año:2016
Industria:
ONG
Entregables:
androidioswebbackend
Tecnologías:
SwiftJavaPHPSymfonyMySQLTypeScriptFirebase
Introducción
Greenpeace vino con la idea de un canal nuevo de participación mobile para sus simpatizantes. Juntos hicimos el discovery, el diseño y el desarrollo de Apptivista.
Cada acción de una campaña era una tarjeta, y el simpatizante recorría el mazo con un swipe tipo Tinder: hacia un lado para participar, hacia el otro para pasar y hacia arriba para dejarla para después. La idea era participar en las campañas de Greenpeace desde el celular de la forma más simple y rápida posible.

Qué hacía la app
- Tarjetas de campaña de diez tipos: noticias, anuncios, peticiones que se firmaban con un swipe, preguntas de sí o no, convocatorias, audios, fotos y videos para sumar a la campaña, y llamadas y SMS a quienes toman las decisiones, con el guion o el mensaje ya escrito.
- Gamificación: puntos por cada acción, niveles, badges (por puntos, automáticos por logros en un período o asignados a mano), tarjetas doradas con puntos extra y ranking de usuarios.
- Registro con email, Facebook, Google o Twitter, invitaciones a amigos con código de referido, y la posibilidad de compartir en redes las tarjetas, los badges y los niveles.
- Varios países: cada país tenía sus propios campos de registro, sus notificaciones push y sus administradores.
- Consola de administración: armar y programar el mazo de cada país, ver y exportar las participaciones, gestionar badges, niveles y puntos, y un tablero de estadísticas con usuarios activos, participación por país y rankings.
Enfoque técnico
Lideré el proyecto técnicamente: definí la arquitectura, lideré al equipo y programé el motor de tarjetas de la app.
- Las apps eran nativas en las dos plataformas: Swift en iOS y Java en Android.
- El mazo de tarjetas era un componente propio, sin librerías de swipe, equivalente en las dos plataformas. El movimiento se resolvía con álgebra lineal: la dirección del arrastre, normalizada, definía hacia dónde salía despedida la tarjeta; la rotación dependía de si el dedo la había agarrado de la mitad de arriba o de abajo, y las tarjetas de atrás se acomodaban de forma gradual según cuánto se había arrastrado la de adelante. Las animaciones usaban curvas de aceleración y las vistas se reciclaban para que el mazo fuera fluido.
- La API y la consola de administración estaban hechas en PHP con Symfony 3 y MySQL, con el código separado en capas: dominio, datos, API y administración. La gamificación estaba desacoplada con eventos: cada acción publicaba un evento y el servicio de juego asignaba los puntos, los niveles y los badges.
- Videos: un proceso en el servidor normalizaba con FFmpeg los videos que se compartían y los publicaba en Facebook y Twitter.
- La consola de administración tenía el frontend en TypeScript.
- Traducciones: una herramienta propia generaba los textos de las tres plataformas (Symfony, Android e iOS) a partir de una sola planilla.
Hicimos 4 releases, de 3 meses cada uno.