Огляд
17 квітня 2026 року в Запоріжжі відбулась офіційна презентація платформи Veteran Help. Захід організувала ГО «Запоріжжя. Платформа спільних дій» спільно з благодійним фондом «Рубікон Волі» за участі представників місцевої влади, громадських організацій, бізнесу та ветеранської спільноти.
Платформу розроблено командою Beehive Logic на замовлення ГО «Платформа Спільних Дій».
«Лише разом, тільки в конгломерації ми можемо зробити більше» — Олена Швець, директорка Департаменту з питань ветеранської політики
Проблема
Ветерани, військовослужбовці та члени їхніх сімей стикаються з розрізненістю інформації про доступну допомогу: частина послуг — у державних органах, частина — у громадських організаціях, частина — у бізнесі. Пошук і зведення цих ресурсів потребує значних зусиль і часу — саме такого тертя не може собі дозволити система, що обслуговує людей, яких торкнулася війна.
Рішення
Veteran Help — єдине вікно, де можна швидко знайти актуальну інформацію про підтримку, структуровану за категоріями потреб конкретного одержувача: без зайвого пошуку й технічної підготовки.
Платформа охоплює:
- Надавачів допомоги — організації та установи, що підтримують ветеранів і їхні сім’ї
- Категорії послуг — систематизована база за типами потреб
- Вакансії — можливості для працевлаштування ветеранів
- Бізнес-пільги — підприємства, що пропонують знижки та привілеї учасникам бойових дій
- Події — заходи, тренінги, зустрічі для ветеранської спільноти
Технічний стек
| Шар | Технологія |
|---|---|
| Мова | Go 1.24 |
| HTTP | Echo v4 |
| Шаблони | Templ (server-side rendering) |
| База даних | PostgreSQL 15 |
| Міграції | golang-migrate/v4 |
| Сесії | SCS v2 |
| Telegram-бот | Telego v1.3.1 |
| QR-коди | skip2/go-qrcode |
| Frontend | Bootstrap, FontAwesome, jQuery, Chart.js |
Архітектура
Чіткий багаторівневий поділ відповідальностей:
Echo Router → Handler → Service → Postgres → PostgreSQL
cmd/web/main.go # Точка входу, ініціалізація, запуск HTTP + Telegram
internal/pkg/app/ # App struct, реєстрація маршрутів, middleware
internal/handler/ # HTTP-хендлери (по одному файлу на домен)
internal/service/ # Бізнес-логіка, інтерфейси між хендлером і БД
internal/postgres/ # SQL-запити до PostgreSQL
internal/telegram/ # Telegram-бот: хендлери та побудова повідомлень
models/ # Спільні структури даних
view/ # Templ-шаблони (pages, layout, components)
schema/ # SQL-міграції (numbered up/down pairs)
Ключові можливості
Публічний сайт
- Каталог із трирівневою навігацією: категорія одержувача → тип послуги → надавачі
- Деталізована картка надавача з контактами, адресою та описом допомоги, адаптованим під конкретну категорію одержувача
- Перегляд вакансій, подій і бізнес-пільг із фільтрацією за категорією
- Автоматично генерований
sitemap.xmlдля SEO
Адміністративна панель
- Повний CRUD для всіх типів контенту: надавачі, події, вакансії, бізнеси, категорії, QR-коди
- Гнучка рольова модель: суперкористувач + гранулярні права на редагування окремих розділів
- Відстеження дій: кожен запис зберігає, хто і коли його створив, змінив або видалив (soft delete + audit trail)
- Дашборд статистики: перегляди сторінок у розрізі шляхів, аналітика QR-кодів
- Конфігурований URL-префікс адмін-панелі (
ADMIN_PREFIX) для приховування адреси
Telegram-бот
- Багаторівнева навігація через inline-кнопки
- Stateful callback-система (парсинг callback-даних типу
help_category:10:cat:5) - Автоматичне видалення повідомлень користувача для чистоти чату
- Паралельний запуск у goroutine, незалежно від HTTP-сервера
- Long polling — надійна робота без webhooks
QR-коди
- Генерація PNG на льоту (256×256, medium error correction)
- Унікальні slug-базовані короткі посилання
- Відстеження переходів із часовою міткою для аналітики
Безпека
- Хешування паролів із метаданими формату
- CSRF-токени для всіх форм
- Лічильник невдалих спроб входу
- Захищені сесії (SCS v2 + Echo)
Цікаві технічні деталі
Контекстні описи надавачів. Один і той самий надавач може надавати різний опис послуги залежно від категорії одержувача. Наприклад, медичний центр описує психологічну підтримку для «військовослужбовців» і «сімей загиблих» по-різному. Реалізовано через таблицю service_provider_help_details з унікальним constraint на трійку (provider_id, beneficiary_category_id, help_category_id) серед активних записів.
Soft delete з повним audit trail. Всі сутності мають deleted_at + deleted_by_user_id. Дані не видаляються фізично — зберігається повна історія змін.
Middleware-аналітика. Трекінг переглядів сторінок реалізовано на рівні Echo middleware: перехоплює всі GET-запити, фільтрує статику та адмін-маршрути, записує шлях і часову мітку без навантаження на хендлери.
Результат
Платформа запущена в Запоріжжі та надає ветеранам, військовослужбовцям і членам їхніх сімей єдиний структурований доступ до ресурсів підтримки — без зайвих зусиль з їхнього боку, а адміністраторам — зручний інтерфейс для самостійного оновлення інформації без технічних знань.
- ~13 handler-файлів, ~200 рядків кожен → 58 адмін-ендпоінтів + 15+ публічних маршрутів
- 14 міграцій PostgreSQL із послідовною нумерацією та up/down парами
- Повне покриття Templ-шаблонами для всіх сторінок