
Greenpeace Apptivista
Year:2016
Industry:
NGO
Deliverables:
androidioswebbackend
Technologies:
SwiftJavaPHPSymfonyMySQLTypeScriptFirebase
Introduction
Greenpeace came to us with the idea of a new mobile participation channel for their supporters. Together we did the discovery, the design and the development of Apptivista.
Each action of a campaign was a card, and supporters went through the deck with a Tinder-like swipe: to one side to take part, to the other to skip, and up to leave it for later. The idea was to take part in Greenpeace campaigns from your phone in the simplest and fastest way.

What the app did
- Campaign cards of ten types: news, announcements, petitions signed with a swipe, yes-or-no questions, calls to action, audio clips, photos and videos to add to the campaign, and phone calls and text messages to decision makers, with the script or the message already written.
- Gamification: points for each action, levels, badges (for points, automatic for achievements within a period, or assigned by hand), golden cards with extra points and a user ranking.
- Sign-up with email, Facebook, Google or Twitter, inviting friends with a referral code, and sharing cards, badges and levels on social networks.
- Several countries: each country had its own sign-up fields, its own push notifications and its own administrators.
- Admin console: putting together and scheduling each country's deck, viewing and exporting participations, managing badges, levels and points, and a statistics dashboard with active users, participation by country and rankings.
Technical approach
I led the project technically: I defined the architecture, led the team and coded the card engine of the app.
- The apps were native on both platforms: Swift on iOS and Java on Android.
- The card deck was a custom component, with no swipe library, equivalent on both platforms. The movement was handled with linear algebra: the normalized drag direction defined where the card was thrown; the rotation depended on whether the finger had grabbed it by the top or the bottom half, and the cards behind adjusted gradually based on how far the front one had been dragged. The animations used acceleration curves and the views were recycled to keep the deck smooth.
- The API and the admin console were built in PHP with Symfony 3 and MySQL, with the code separated into layers: domain, data, API and administration. Gamification was decoupled through events: each action published an event and the game service assigned the points, levels and badges.
- Videos: a server process normalized the shared videos with FFmpeg and published them on Facebook and Twitter.
- The admin console had its frontend in TypeScript.
- Translations: an in-house tool generated the texts for the three platforms (Symfony, Android and iOS) from a single spreadsheet.
We did 4 releases, of 3 months each.