Разработка лендинга под ключ за 48 часов: как мы сделали страницу донатов со счётчиком из трёх источников
Страница сбора средств за 48 часов от брифа до боевого домена: счётчик донатов из трёх источников, виджет для стрима и ни одного пароля от финансовых аккаунтов клиента.
Дедлайн — утро субботы, доступа к финансам клиента нет
Заказчик — независимый академический хаб в Ереване. Нужна была страница сбора средств на офлайн-лабораторию с целью 5000 евро и дедлайном к утру субботы — меньше 48 часов от брифа в мессенджере до боевого домена с сертификатом. Собрать полноценный сайт в такой срок — уже вызов сам по себе, но здесь добавились платёжные ограничения: Stripe Армению не обслуживает, PayPal работает только на отправку денег, российские карты за рубежом не проходят. Сумму нужно было показывать и на странице, и в прямом эфире донат-стрима, но клиент принципиально не хотел давать доступ к своим платёжным аккаунтам — это её личный Telegram и вся финансовая история. Задача свелась не к вёрстке страницы, а к архитектуре: как считать чужие деньги, не имея права их видеть.
Сервер с 1,9 ГБ памяти без подкачки — это ограничение, а не деталь: сборка проекта на нём физически не проходит, поэтому пакет собирается локально и на боевую машину уезжает уже готовым.
Счётчик сбора из трёх источников без доступа к деньгам клиента
Сумма сбора складывается из трёх независимых каналов, и ни один не требует пароля от финансового аккаунта клиента. Донаты через Tribute прилетают вебхуками с проверкой подписи — клиент сама создаёт ключ у себя в кабинете и может отозвать его одной кнопкой, без нашего участия. Три криптокошелька (USDT в сетях Tron и Ethereum, Bitcoin) сайт опрашивает сам раз в пять минут по открытым данным блокчейна и пересчитывает в евро по текущему курсу — доступ к самим кошелькам не нужен, публичный адрес виден всем. Остальные способы поддержки клиент вводит сама в закрытой панели с телефона: кнопки быстрого плюса на +10, +50 и +100 евро удобны прямо во время эфира, когда листать сложную форму некогда.
- Донаты Tribute — вебхуки с проверкой подписи, ключ клиент создаёт и отзывает сама
- Криптокошельки опрашиваются раз в 5 минут по открытым данным блокчейна — без доступа к самим кошелькам
- Ручной ввод остальных каналов — через закрытую панель с кнопками быстрого плюса
- Три источника пишут в один файл, каждый в своё поле — тестами проверено, что не затирают друг друга
Виджет для OBS: цифра, которая растёт в прямом эфире
Для донат-стрима сделан отдельный виджет-оверлей под OBS: прозрачная подложка поверх картинки стрима, цифра обновляется раз в 15 секунд и плавно докручивается вместо резкого скачка, а при новом донате карточка на 2,4 секунды подсвечивается золотом — зрителю в эфире сразу видно, что донат прошёл. Прямой эфир диктует свою деталь: цифра должна не просто быть верной, а визуально сообщать о событии в моменте, а не спустя минуту после обновления страницы.
Тест на донате в 7 евро поймал баг до запуска: без проверки сумма могла записаться в сто раз больше. Пропустить такой тест на этапе разработки — значит узнать о нём на первом же реальном платеже, когда исправлять уже поздно.
Чек-лист SEO-гигиены: 20 пунктов перед запуском сайта
Функциональность — не последний шаг перед запуском: страница проходит один и тот же чек-лист из 20 пунктов, независимо от того, донатная это страница, лендинг мероприятия или сайт услуги. Технический seo аудит сайта здесь применяется не постфактум, а прямо в процессе сборки: политика конфиденциальности и условия использования, понятная кнопка действия, FAQ, корректные robots.txt и sitemap.xml, своя страница 404 вместо стандартной заглушки хостинга, alt-текст у картинок, подключённая аналитика, meta title и meta description под конкретную страницу, превью для соцсетей, favicon, canonical URL, согласие на cookies, мобильная версия, базовая доступность, проверка форм на ошибочный ввод, отсутствие битых ссылок и скорость загрузки.
| Блок чек-листа | Что именно закрыто на лендинге донатов |
|---|---|
| Приватность и доверие | В подвале прямо указано «Мы не собираем ваши данные», служебные адреса закрыты от индексации |
| Технические основы | Canonical URL, свои шрифты со своего домена, ноль внешних запросов со страницы |
| Проверка форм | Тест на абсурдные значения донатов пойман до запуска, добавлен журнал сырых событий для сверки |
| Скорость загрузки | Фоновые сцены прогнаны через свой конвейер кодирования, два формата под разные устройства |
Защита, которую никто не заказывал
Отдельно нашли и закрыли уязвимость, о которой никто не просил: обход лимита попыток входа в закрытую панель через подменяемый заголовок запроса. Добавили второй слой защиты с нарастающей задержкой между попытками и сравнение пароля за постоянное время — это защита от атак по времени ответа сервера, а не декоративная мера. Любой проект с приёмом реальных платежей обязан включать такую проверку, даже если в техническом задании её не было: панель, которая может собрать деньги, автоматически становится целью для перебора паролей.
Прежде чем писать код, выяснили, какие способы приёма денег вообще работают для Армении — Stripe и PayPal отпали сразу, крипта и локальный сервис остались.
Каждый канал сбора работает и считается отдельно, без единой точки отказа — если один источник временно недоступен, остальные два продолжают обновлять сумму.
Ни один из трёх источников не потребовал пароля от платёжного аккаунта клиента — компромисс между автоматизацией и приватностью решён архитектурой, а не обещанием.
20 пунктов чек-листа — не отдельный этап после запуска, а часть той же сборки сайта, потому что на исправление после публикации у события часто просто нет времени.
Заказывать сайт имеет смысл с прицелом на реальный дедлайн события, а не абстрактный срок — платёжная механика и SEO-гигиена решаются заранее, а не в последний день перед публикацией.
Что из этого применимо к вашему бизнесу
Не обязательно собирать донаты, чтобы столкнуться с той же задачей. Любой сбор средств, предзаказ или сложная форма оплаты с несколькими способами платежа сталкивается с одной и той же дилеммой: показать клиенту прозрачную сумму, не давая доступа к его финансовым аккаунтам. Сайт с несколькими платёжными каналами требует именно такого архитектурного решения — не единой точки правды в чужом кабинете, а системы, которая складывает данные из независимых источников.
- Если дедлайн жёсткий — считайте платёжную интеграцию отдельным риском, а не деталью вёрстки
- Разделяйте источники данных — единая точка отказа опаснее, чем кажется на этапе разработки
- Проходите чек-лист SEO-гигиены до запуска, а не после — часть пунктов дешевле исправить в коде, чем патчить на проде
- Тестируйте форму с денежными полями на абсурдные значения — это самый дешёвый тест с самым дорогим потенциальным последствием ошибки
Денежный счётчик на сайте — это не вёрстка цифры на экране, а архитектурное решение: как показать сумму честно, не получая доступа к чужим финансам, и не потерять данные, если один из источников временно откажет.
Хотите такое же решение для своего бизнеса?
Обсудить проект