Aleksei Makeev.
← ALL WORK
02 / 07NONPROFIT · CYPRUSNEXT.JS · SUPABASE · STRIPE2025–26

Paws of Cyprus — donations with a public ledger

A volunteer animal-welfare network needed more than a Facebook page: a price on what each animal actually needs, card payments that work for locals and expats alike, and a public account of where the money went. Live at pawsofcyprus.org.

Next.js 14TypeScriptSupabaseStripeUpstash RedisResendTailwindVercel
The Paws of Cyprus home page in dark theme
PROBLEM

Rescue work in Cyprus runs on informal networks: a post in a group, a bank transfer, trust. Someone who wants to help cannot see what a particular animal actually needs, or what happened to the money afterwards, and volunteers spend months answering the same questions by direct message. The audience splits three ways — Greek-speaking Cypriots, English-speaking expats and a large Russian-speaking community — so one language was never going to be enough.

APPROACH

Every animal comes with costed help requests and a visible goal, so a donation goes to a named vet bill rather than into a general fund. Stripe takes the card payments, and a public balance page sets donations against withdrawals so anyone can check the arithmetic. The knowledge base covers what people actually search for at two in the morning: emergency vets by city, import rules, what to do with an animal you have just found. Volunteers write all of it in a separate admin panel, statistics are cached in Redis, and every page exists in English, Greek and Russian, chosen from the browser.

The animals catalogue with filters, in dark theme
The knowledge base: emergency vets by city, with a category sidebar
3
LOCALES — EN / EL / RU, WITH DETECTION
81
SQL MIGRATIONS, NO ORM
100%
OF DONATIONS TIED TO A NAMED VET BILL