Алексей Макеев.
← ВСЕ ПРОЕКТЫ
02 / 03НКО · КИПР3 ПРИЛОЖЕНИЯ · 1 БАЗА2025–26

Paws of Cyprus — три приложения для одной организации

Волонтёрской сети помощи животным нужна была не страница в соцсети. Получилось три приложения: публичный сайт, где у каждого животного посчитанная заявка и виден каждый евро; приложение дежурств для тех, кто по ночам кормит уличные колонии; и админка, которой пользуются люди без опыта в разработке. Под ними одна база, делал один человек. Работает на pawsofcyprus.org.

Next.js 14 & 15React 19TypeScriptSupabaseStripeLeafletMapLibre GLTipTapCloudflare R2Telegram Bot APIUpstash RedisVercel
Главная страница Paws of Cyprus
01

Публичный сайт — сборы с отчётностью, которую можно проверить

ЗАДАЧА

Спасение животных на Кипре держится на неформальных связях: пост в группе, перевод на карту, доверие. Тот, кто хочет помочь, не видит ни что именно нужно этому животному, ни куда потом ушли деньги, а волонтёры месяцами отвечают на одни и те же вопросы в личке. Аудитория делится натрое — грекоговорящие киприоты, англоязычные экспаты и большое русскоязычное сообщество, — и одного языка тут никак не хватало.

ПОДХОД

У каждого животного — заявки с посчитанной суммой и понятной целью: перевод уходит на конкретный счёт от ветеринара, а не в общий котёл. Оплату картой принимает Stripe, а публичная страница баланса сводит поступления с расходами — итог может проверить кто угодно. База знаний закрывает то, что ищут в два часа ночи: круглосуточные ветклиники по городам, правила ввоза, что делать с только что найденным животным. Каждая страница есть на английском, греческом и русском — язык подхватывается из браузера.

Публичная страница баланса: поступления и расходы, имена жертвователей на этом скриншоте скрыты
Страница контактов: почта, форма сообщения и телефоны клиник, которые принимают экстренно, с разбивкой по городам
02

Волонтёры — график дежурств по кормлению

ЗАДАЧА

Кормить колонию каждый день — это в основном логистика: кто закрывает какую точку, кто уехал на этой неделе, где сегодня вечером никого нет и куда одному лучше не ходить. Всё это жило в одном чате, где улетевшее вверх сообщение означает, что животное не покормили. Волонтёры в основном русскоязычные, работают бесплатно и смотрят в телефон в темноте.

ПОДХОД

Каждая точка кормления есть на карте — с расписанием, фотографиями и именем ответственного. Повторяющиеся смены раскладываются сами, подмены запоминаются, когда кто-то уехал, а свободный слот можно забрать; по утрам cron ищет точки, на которых сегодня никого, и пишет в группу. Telegram при этом никто не отменяет: голое число в чате бот засчитывает как столько же обещанных мешков корма, а после каждого деплоя перечитывает историю — чтобы перезапуск не потерял чьё-то обещание.

График одной точки кормления: дни недели, которые волонтёр взял на себя постоянно, и все ближайшие даты с кнопкой «вернуть»
Экран входа для волонтёров, защищённый Supabase Auth
Точки

Каждая точка кормления на карте — со своим расписанием, фотографиями и ответственным волонтёром.

Дежурства

Повторяющиеся смены раскладываются сами, отсутствие записывается исключением, а свободный слот может занять любой.

Ночная проверка

Крон находит точки, на которые никто не записан, и пишет в телеграм-группу до вечернего обхода.

И всё ещё Telegram

Голое число в группе бот засчитывает как столько же обещанных мешков корма. После деплоя бот перечитывает историю, поэтому перезапуск ничьё обещание не теряет.

03

Админка — панель, из которой управляют организацией

ЗАДАЧА

У волонтёров нет лишних часов на борьбу с CMS. Админкой должен пользоваться тот, кто сегодня на дежурстве: с ноутбука и по-русски. Но вокруг денег нужна жёсткая граница — человек, который правит статью, не должен быть в одном неверном клике от экрана выплат.

ПОДХОД

Текстовый редактор с менеджером медиа: файл перетащили — он ушёл прямо в Cloudflare R2 по подписанной ссылке; точка кормления выбирается на карте. Права — это массив в карточке самого администратора, и middleware сверяет его с запрошенным путём: права принадлежат человеку, а не должности. В редакторе статьи есть кнопка «Сгенерировать черновик»: языковая модель заполняет статью, а волонтёр либо принимает её, либо отправляет переписать. Каждую картинку из черновика система сначала пробует открыть — чтобы тот, кто проверяет статью, не наткнулся на битую ссылку. Каждая статья пишется на всех трёх языках с одного экрана.

Экран входа в админку — здесь прямо сказано, что все действия в панели пишутся в журнал: кто, что и когда изменил
Дашборд админки: счётчики по всей платформе, очередь заявок с тем, сколько каждая уже ждёт, и журнал активности
База знаний: слева разделы в том же порядке, в каком они на сайте, а у каждой статьи видно, на каких из трёх языков она есть и опубликована ли она
3
ЯЗЫКА — EN / EL / RU, С АВТООПРЕДЕЛЕНИЕМ
48
ТАБЛИЦ НА ТРИ ПРИЛОЖЕНИЯ
18
ЭКРАНОВ АДМИНКИ, ВСЕ НА РУССКОМ