Overview
Riverse is a gamified volunteering platform for river clean-ups in Jakarta. It connects two groups. On one side are volunteers who want to help. On the other are the communities, foundations, companies and government bodies that run clean-ups along the Ciliwung.
Riverse started as Kevin's university thesis, built with classmates Elliot Lie Arifin and Cindy Amanda Onggirawan. The two big buttons on the home page sum up the idea. "Ingin Membantu" means "I want to help". "Butuh Bantuan" means "I need help". Each one opens its own sign-up flow.
The challenge
Jakarta's rivers carry a lot of plastic. A 2019 study in Environmental Research Letters estimated that about 2,100 tonnes of plastic travel from Jakarta's rivers into the sea every year. In a 2018 count in Jakarta, a team led by the same researcher recorded around 20,000 plastic items an hour flowing toward the ocean, mostly plastic bags and food wrappings. A 2022 survey of five Jakarta rivers found that plastic made up 74% of the human-made waste in them.
Clean-ups help, and Jakarta has community groups that run them. The hard part is turnout. Without a shared place to publish an event, an organiser has to recruit through personal networks, guess how many people will come and track attendance on paper. A volunteer who comes along has no record of what they did and no reason to come back beyond goodwill.
Our brief to ourselves was simple. Make it easy for a host to post a clean-up and fill it. Then give volunteers a reason to keep showing up.
Our approach
Discovery
We started from the two roles and the moments where things break. For hosts, that was recruiting enough people and then knowing who turned up. For volunteers, it was finding an event that fits their week and feeling that the effort counted for something.
We added a third role, an admin who verifies people and events. A clean-up platform asks strangers to meet by a river. Trust had to be part of the product from day one.
Design
The visual language is warm and illustrated rather than corporate, with purple accents and the Poppins typeface. The whole interface is in Bahasa Indonesia, because the people we designed for read it first.
The game layer rewards attendance and nothing else. A volunteer earns XP only when a host confirms they attended. XP feeds six levels, each with its own badge, and each level comes with a reward such as a voucher, a tote bag or a Riverse tee. A public leaderboard shows the top three on a podium and everyone else in a ranked table with their level, activity count and total XP. Signed-in volunteers also see their own rank.
For hosts, we broke activity creation into a three-step form. It covers the river and gathering point, the date and time, the volunteer role and its tasks, the criteria, the equipment to bring, a link to the group chat, the minimum number of volunteers and the XP the activity awards. Hosts write a lot of detail, but never all on one screen.
Build
Riverse is a Laravel web app with server-rendered Blade views, Bootstrap and jQuery on the front end, and an AdminLTE dashboard for admins. Kevin built the activity pages and the like system that powers the "most liked" sort.
The core of the build is two state machines:
- Activity status. A scheduled command runs every minute and moves each verified activity through five states: registration open, registration closed, not started, in progress and finished. It works from the registration deadline, clean-up date and start and end times. Hosts never update status by hand.
- Volunteer status. A volunteer goes from joined to clocked in to claimed. Clock-in only works on the clean-up day, within 30 minutes either side of the start time. The host then reviews joined and clocked-in volunteers and confirms attendance. Confirmation awards the XP and recalculates the volunteer's level in the same step.
We also prototyped a location check that compares the volunteer's position with the Google Maps gathering point, using a 2 km radius. We left it switched off in the final build and relied on the time window and host confirmation instead, which also spares volunteers a location prompt.
Key features
- Two sign-up paths. Separate multi-step registration for volunteers and for hosts, with host types such as foundations, community groups, companies and government agencies.
- Verification. Admins approve or reject volunteers, hosts and activities, and a rejection carries a written reason.
- Activity discovery. Search by activity or host name, sort by date or by likes, and like activities to save interest.
- Activity pages. Each page shows the registration deadline, the volunteer quota and how many spots are filled, host contact details, and links to open the route in Maps or add the date to Google Calendar.
- Attendance flow. Time-boxed clock-in, then host confirmation from tabs for joined, clocked-in and confirmed volunteers.
- XP, levels and badges. Six levels, a badge for each one and a reward at every level.
- Leaderboard. A podium for the top three and a full ranked table.
What we learned
Riverse taught us that gamification only works when the points mean something. Tying XP to confirmed attendance, not to sign-ups, keeps the leaderboard honest. It also makes the attendance flow the most important screen for hosts, because every point on the leaderboard passes through it.
It also showed us how much an automatic lifecycle helps. Hosts in a volunteer setting are busy people. When the platform moves an event from open to finished on its own, a listing cannot stay open past its deadline because someone forgot to close it.
Finally, trust work is product work. Verification for people and events added screens nobody asks for in a pitch. Those screens are why a stranger would feel safe joining a clean-up at a river they have never visited.
Riverse is not live today. We still point to it when someone asks how to design for people who have to meet in person. If you are building a volunteer platform, a community app or anything that needs people to show up in the real world, talk to us and we can help you design and build it.
