A London recycling-rewards company wanted people to recycle more, and to get something back for it. We built the software around its smart recycling machines: a cloud layer the machines report to, an eco-coin wallet on iOS, Android and the web, QR sign-in at the machine, an Apple Wallet pass and an admin dashboard. A drop at the machine reaches the user's wallet in under 500 ms, and recycling rose 65%.
The company is ReCyrcle, a deep-tech start-up tackling packaging waste, featured in Forbes for making sustainable practices pay.
At a glance
- Client: ReCyrcle, a recycling-rewards company in London, UK
- What we built: iOS and Android apps, a web app, a Django admin dashboard, and the cloud layer that connects the recycling machines to all of them
- How it works: people recycle at ReCyrcle's machines, earn eco coins, and spend them at partner stores
- Connected to: the smart recycling machines (built by a hardware partner in China), Apple Wallet and Firebase
- Timeline and team: three months, five specialists: a project manager, a UI designer, a Flutter engineer, a Django engineer and a React engineer
- Stack: Flutter, React, Django, Django REST Framework, MySQL, Firebase, Apple Wallet, Nginx, DigitalOcean
The challenge: make recycling worth people's time
ReCyrcle's mission is sustainability. Its idea was simple: reward people for recycling, so more of them do it. Turning that into a product meant solving problems on three sides at once:
- People needed a reason, and proof. A recycler wants to see what they dropped off, what it earned and what they can spend it on, instantly.
- The machines needed a brain in the cloud. Each machine knew what it had weighed, but not who was standing in front of it or what that drop was worth.
- The rewards needed somewhere to go. Eco coins only matter if partner stores accept them, so offers, balances and redemptions all had to stay in step.
A reward only changes behaviour if it arrives before the person walks away from the machine.
What we built
- iOS and Android apps in one Flutter codebase, for everyday recyclers: balance, recycling history, offers, notifications and a personal QR code
- A web app in React with the same account and the same wallet, for people who prefer a browser
- A cloud layer for the machines, built with Django REST Framework together with the machine maker's engineers, so every drop is recorded, weighed and credited
- QR scan sync and detection: the user scans their code at the machine, and that machine's session is tied to their account
- An Apple Wallet pass that carries the user's QR code, so they can recycle without opening the app
- A Django admin dashboard for ReCyrcle's team: users, machines, offers, reward tiers and campaigns
- Firebase for sign-in (Apple, Google or email) and push notifications
One loop ties it together: scan, recycle, get coins, spend them, with the machine, the cloud and every device agreeing on the balance.

For recyclers: drop it, see it, spend it
Sign in once, scan at any machine
People sign up with Apple, Google or email. Each account gets a personal QR code, in the app and as an Apple Wallet pass. At the machine, one scan links the drop-off to the right person.

Coins land before you walk away
The machine weighs the drop and reports it to the cloud; the cloud works out the eco coins and updates the wallet on every device in under 500 ms. A push notification confirms it: "Recycled successfully. 250 points earned." Every drop shows up in My Recycles with its weight, location and points.
Spend coins at partner stores
The Offers screen shows what eco coins can buy at ReCyrcle's partner stores, with expiring and trending offers, a countdown on each deal and one tap to redeem. Tiered rewards and achievements give people a reason to come back.

Find a machine, learn the habit
A map of machine locations sits on the dashboard, next to short how-to-recycle videos. A share button lets people invite friends and post what they've recycled.
For ReCyrcle's team: run the network from one place
- Users and rewards: manage accounts, segment users and configure reward tiers without a developer
- Offers and campaigns: publish partner offers, set expiry dates and run campaigns
- Machines and activity: see every drop-off and its status as it comes in, with analytics and reports on recycling across the network
The tech stack
| Tool | What it does in ReCyrcle |
|---|---|
| Flutter | One codebase for the iOS and Android apps |
| React | The user web app |
| Django + Django REST Framework | The API the machines and apps talk to, and the business logic for coins |
| Django admin | ReCyrcle's operations dashboard |
| MySQL | Users, drop-offs, balances, offers and redemptions |
| Firebase | Authentication (Apple, Google, email) and push notifications |
| Apple Wallet (PassKit) | The QR pass people scan at the machine |
| Nginx + DigitalOcean | Serving and hosting the API, web app and admin |
How we built it
One loop, three teams, three time zones
The hardest part wasn't code. The machines were built by a hardware team in China, the client was in London and we were in Bangladesh. Building the cloud layer meant working side by side with the machine maker's engineers, across a communication gap and a time-zone difference. Our team put in the hours, and the machines and apps now sync smoothly in under 500 ms.
One wallet on every screen
The same balance appears on a phone, a web page and ReCyrcle's admin screens. Every drop goes through the Django REST API, which works out the eco coins and updates the wallet on every device at once, with 60% lower machine-to-app latency.
One codebase for two phone platforms
Building the apps in Flutter let one engineer ship iOS and Android together, which is how five people delivered iOS, Android, web, admin and the machine layer in three months.
The results
| Before | After |
|---|---|
| Recycling gave people nothing back | Eco coins for every drop, spendable at partner stores |
| Machines that only knew a weight | Every drop tied to a person by a QR scan |
| No way to see what you'd recycled | A live history and balance on phone and web |
| Rewards that would arrive later, if ever | Coins in the wallet in under 500 ms |
- 65% more recycling through the machines
- 60% lower machine-to-app latency
- Live on iOS, Android and the web, with an admin dashboard, in three months
What we'd do again
- Treat the hardware team as part of the team. The machine maker's engineers were as important to the result as our own.
- Make the reward instant. Coins in the wallet before the person walks away is what turns one drop into a habit.
- Build both phone apps from one codebase. Flutter is how five people shipped iOS, Android, web and admin in three months.
- Meet people where they already are. The Apple Wallet pass meant recycling didn't depend on opening an app.
Frequently asked questions
How do you connect a recycling machine to a mobile app?
The machine reports each drop-off to a cloud API, and the API credits the user's account. In ReCyrcle, the user scans a personal QR code at the machine, the machine sends the weight to our Django REST API, and the wallet updates on every device in under 500 ms.
What tech stack is good for an IoT rewards app?
ReCyrcle runs on Flutter for iOS and Android, React for the web, Django and Django REST Framework for the API, MySQL for data, Firebase for sign-in and push notifications, and Apple Wallet for the QR pass, hosted on DigitalOcean behind Nginx.
How long does it take to build a recycling rewards app?
We delivered ReCyrcle's iOS and Android apps, web app, admin dashboard and machine integration in three months with a team of five.
What does a recycling rewards app need besides the app?
A cloud layer the machines report to, a way to tie each drop to a person (ReCyrcle uses a QR scan), a wallet that updates in real time, and an admin dashboard to manage offers, rewards and machines.
Connecting hardware, apps and rewards? Book a 30-minute call, or see how we approach mobile app development.
