
Changa is a mobile-first PWA built around a very specific real-world task: treasurers in Kenyan WhatsApp groups tracking contributions as payments come in via M-Pesa, bank transfers, or cash. The goal wasn’t just to digitize a list - it was to cut out the repetitive editing loop and make posting accurate updates feel instant on a phone.
Problem
Fundraisers are often coordinated in WhatsApp, but the operational workflow is still manual. A treasurer receives a payment notification, edits the existing message, adds the new contributor, recalculates the running total, and reposts the update to the group. That creates unnecessary friction in a high-frequency task and introduces room for mistakes, especially when everything is happening on mobile and in real time.
Solution
The real problem wasn’t storing data - it was the copy-paste loop the treasurer had to do after every payment. Changa separates data capture from message formatting: record a contribution once, and the app handles numbering, totals, progress tracking, and WhatsApp-ready output. Campaigns support multiple concurrent fundraisers, reusable templates cut down repetitive formatting, and local-first storage keeps everything fast, private, and usable without a signal or an account.
Product Engineering Decisions
- Built around the actual task: quick contributor entry, fast copying, low friction on mobile
- Went local-first so the app works reliably in the same environments where WhatsApp coordination happens - often on mobile, often with patchy connectivity
- Skipped the backend entirely because the core value is speed and convenience, not syncing across devices
- Added template variables and summary generation so the app fits into how groups already communicate, rather than asking people to change their habits
Tech Stack
- HTML, CSS, and vanilla JavaScript
localStoragefor client-side persistence- Service Worker for offline support
- Docker and Nginx for deployment
Highlights
- Multi-campaign support for running several fundraisers at once
- WhatsApp-focused message generation with reusable header and footer templates
- Dynamic variables such as
{{campaign}},{{total}},{{count}},{{target}}, and{{remaining}} - CSV export and shareable contribution summaries
- Installable, mobile-first PWA built as a lightweight single-page app
Demo
- Live demo: changa.pgicharu.dev