Paws of Cyprus — три приложения для одной организации
Волонтёрской сети помощи животным нужна была не страница в соцсети. Получилось три приложения: публичный сайт, где у каждого животного посчитанная заявка и виден каждый евро; приложение дежурств для тех, кто по ночам кормит уличные колонии; и админка, которой пользуются люди без опыта в разработке. Под ними одна база, делал один человек. Работает на pawsofcyprus.org.
Публичный сайт — сборы с отчётностью, которую можно проверить
Спасение животных на Кипре держится на неформальных связях: пост в группе, перевод на карту, доверие. Тот, кто хочет помочь, не видит ни что именно нужно этому животному, ни куда потом ушли деньги, а волонтёры месяцами отвечают на одни и те же вопросы в личке. Аудитория делится натрое — грекоговорящие киприоты, англоязычные экспаты и большое русскоязычное сообщество, — и одного языка тут никак не хватало.
У каждого животного — заявки с посчитанной суммой и понятной целью: перевод уходит на конкретный счёт от ветеринара, а не в общий котёл. Оплату картой принимает Stripe, а публичная страница баланса сводит поступления с расходами — итог может проверить кто угодно. База знаний закрывает то, что ищут в два часа ночи: круглосуточные ветклиники по городам, правила ввоза, что делать с только что найденным животным. Каждая страница есть на английском, греческом и русском — язык подхватывается из браузера.
Волонтёры — график дежурств по кормлению
Кормить колонию каждый день — это в основном логистика: кто закрывает какую точку, кто уехал на этой неделе, где сегодня вечером никого нет и куда одному лучше не ходить. Всё это жило в одном чате, где улетевшее вверх сообщение означает, что животное не покормили. Волонтёры в основном русскоязычные, работают бесплатно и смотрят в телефон в темноте.
Каждая точка кормления есть на карте — с расписанием, фотографиями и именем ответственного. Повторяющиеся смены раскладываются сами, подмены запоминаются, когда кто-то уехал, а свободный слот можно забрать; по утрам cron ищет точки, на которых сегодня никого, и пишет в группу. Telegram при этом никто не отменяет: голое число в чате бот засчитывает как столько же обещанных мешков корма, а после каждого деплоя перечитывает историю — чтобы перезапуск не потерял чьё-то обещание.
Каждая точка кормления на карте — со своим расписанием, фотографиями и ответственным волонтёром.
Повторяющиеся смены раскладываются сами, отсутствие записывается исключением, а свободный слот может занять любой.
Крон находит точки, на которые никто не записан, и пишет в телеграм-группу до вечернего обхода.
Голое число в группе бот засчитывает как столько же обещанных мешков корма. После деплоя бот перечитывает историю, поэтому перезапуск ничьё обещание не теряет.
Админка — панель, из которой управляют организацией
У волонтёров нет лишних часов на борьбу с CMS. Админкой должен пользоваться тот, кто сегодня на дежурстве: с ноутбука и по-русски. Но вокруг денег нужна жёсткая граница — человек, который правит статью, не должен быть в одном неверном клике от экрана выплат.
Текстовый редактор с менеджером медиа: файл перетащили — он ушёл прямо в Cloudflare R2 по подписанной ссылке; точка кормления выбирается на карте. Права — это массив в карточке самого администратора, и middleware сверяет его с запрошенным путём: права принадлежат человеку, а не должности. В редакторе статьи есть кнопка «Сгенерировать черновик»: языковая модель заполняет статью, а волонтёр либо принимает её, либо отправляет переписать. Каждую картинку из черновика система сначала пробует открыть — чтобы тот, кто проверяет статью, не наткнулся на битую ссылку. Каждая статья пишется на всех трёх языках с одного экрана.