Aleksei Makeev.
← ALL WORK
03 / 07OPERATIONS APPLEAFLET · TELEGRAM · CRON2025–26

Volunteers — a duty roster for street feeding

The people who actually feed Cyprus's street animals coordinate in a Telegram group. This app gives them a map, a rota and a way to hand over a shift — without replacing the chat they already live in. Live at volunteers.pawsofcyprus.org, behind a sign-in.

Next.js 14TypeScriptSupabaseLeafletTelegram Bot APIResendVercel Cron
Feeding locations on a map beside the duty panel for one point
PROBLEM

Feeding a colony every day is a logistics problem before it is anything else: who covers which point, who is away this week, which places have nobody down for tonight, and where it is not safe to go alone. All of it lived in one Telegram group, where a message scrolling past means an animal does not get fed. The volunteers are mostly Russian-speaking, unpaid, and looking at their phones in the dark.

APPROACH

Feeding points sit on a map with their schedule, their photos and the name of whoever is responsible. Recurring shifts get laid out automatically, an exception is recorded when someone is away, and a slot nobody has taken can be claimed; every morning a cron job looks for points with no one on them and writes to the group. Telegram is kept in the loop rather than replaced — a bare number typed into the group counts as that many bags of food pledged, and after every deploy the bot re-reads the chat history, so a restart cannot lose someone’s promise.

The volunteer sign-in screen, protected by Supabase Auth
The weekly duty schedule with recurring shifts, exceptions and open slots
4
TABLES BEHIND THE ROTA ENGINE
3+4
CRON JOBS AND TRANSACTIONAL EMAILS
48
TABLES ACROSS THE PLATFORM