37 ПОРУЧ — Документація

Повний опис платформи підтримки сімей 37-ї окремої бригади морської піхоти України: мобільний додаток Expo Go, адмін-панель та REST API.

Версія 1.0
API REST / SSE
Мова Українська
Платформи iOS · Android · Web

Про платформу

37 ПОРУЧ — цифрова служба підтримки для батьків та родин військовослужбовців 37-ї окремої бригади морської піхоти України (37 ОБрМП). Платформа дозволяє реєструватися на заходи психологічної підтримки, реабілітаційні табори, навчальні програми та отримувати інформацію про партнерські програми допомоги.

📅 Заходи

Перегляд, пошук та запис на безкоштовні заходи підтримки для дітей і родин

🤝 Програми

Партнерські програми психологічної, юридичної та медичної допомоги

📰 Новини

Актуальні новини бригади з фотогалереями

🤖 AI-Чат

Розумний помічник на базі OpenAI з доступом до актуальних заходів та програм

👨‍👩‍👧 Профіль родини

Управління профілями дітей, перегляд та скасування бронювань

🛡️ Адмін-панель

Повне управління заходами, бронюваннями, групами та налаштуваннями

Технічний стек

ШарТехнологіяДеталі
Мобільний додатокExpo / React NativeExpo Router (file-based), iOS · Android · Web
БекендExpress.js + TypeScriptREST API, Server-Sent Events (SSE) для стрімінгу чату
База данихPostgreSQLDrizzle ORM, підключення через DATABASE_URL
АвтентифікаціяSession-basedexpress-session + connect-pg-simple + bcrypt
AIOpenAI GPT-4o-miniReplit AI Integrations, знає про всі заходи та програми
ОплатаMonobank AcquiringОпційно, API-токен вказується в адмін-налаштуваннях
СтанReact QueryКешування серверного стану, інвалідація після мутацій
ТемиThemeContextТемна / світла / авто, зберігається в AsyncStorage

Кольорова система (DS37)

Navy
#122046
Teal
#055C6D
Gold
#F4A929
Background
#F4F6F8

Початок роботи

Додаток відкривається через Expo Go — безкоштовний додаток для iOS та Android. Ніякого встановлення APK/IPA не потрібно.

  • 1
    Встановіть Expo Go з App Store (iOS) або Google Play (Android)
  • 2
    Відскануйте QR-код на головній сторінці mil-kids.replit.app або натисніть кнопку "Expo Go"
  • 3
    Зареєструйтесь або увійдіть з наявним акаунтом. Для тестування використовуйте тестові облікові записи
  • 4
    Переглядайте заходи, записуйтесь на програми, спілкуйтесь з AI-асистентом

Реєстрація нового користувача

При реєстрації вкажіть:

  • Ім'я та прізвище — відображається в профілі
  • Email — використовується для входу (унікальний)
  • Телефон (опційно) — для зв'язку організаторів
  • Пароль — мінімум 8 символів

Після реєстрації можна додати профілі дітей у вкладці Профіль → Мої діти.

Заходи

Головна вкладка з каталогом заходів підтримки. Всі заходи безкоштовні — поле ціни не відображається.

Пошук та фільтрація

  • Текстовий пошук за назвою та описом заходу
  • Фільтр за типом: Табір, Семінар, Тренінг, Майстер-клас, Медичний, Психологічний
  • Фільтр за країною та містом (для міжнародних програм)

Сторінка заходу

Натиснувши на захід відкривається деталі: опис, дати, локація, галерея фото. Для запису натисніть "Зареєструватися" (потрібен вхід в акаунт).

Бронювання

  • Оберіть учасника: себе або одного/кількох дітей
  • Якщо захід має сесії (кілька дат) — оберіть зручну
  • Безкоштовні заходи підтверджуються одразу зі статусом confirmed
  • Бронювання відображається у вкладці Профіль → Мої реєстрації

Програми підтримки

Вкладка з партнерськими програмами психологічної, юридичної та медичної допомоги від організацій-партнерів.

Категорії

Психологічна підтримка Юридична допомога Медична допомога Освіта Соціальна підтримка Реабілітація Інше

Запис на програму

Натисніть "Записатися" → з'являється детальна картка програми з умовами, контактами партнера та кнопкою підтвердження. Після запису статус відображається як "Записано". Повторний запис на ту саму програму неможливий.

Новини

Стрічка новин бригади. Публікуються тільки підтверджені новини (поле isPublished: true).

  • Список новин з прев'ю-фото та датою
  • Сторінка новини з повним текстом та фотогалереєю
  • Свайп галерею фото

AI-Чат

Розумний асистент на базі OpenAI GPT-4o-mini. При кожному запиті він отримує актуальний список заходів та програм з бази даних, тому завжди відповідає актуальною інформацією.

Можливості

  • Відповіді на запитання про заходи та програми підтримки
  • Підказки які заходи підходять для конкретного запиту
  • Кнопки-посилання прямо у відповіді для переходу на сторінку заходу або програми
  • Стрімінг відповіді в реальному часі (Server-Sent Events)
  • Зберігання останніх 10 повідомлень як контекст розмови
Примітка: Для AI-чату потрібен налаштований OpenAI ключ через Replit AI Integrations. Без ключа чат відповідає помилкою.

Профіль та бронювання

Дані профілю

Редагування імені, телефону. Email змінити не можна (використовується як логін).

Мої діти

Список профілів дітей. Для кожної дитини: ім'я, вік. Можна додавати, редагувати та видаляти. Дитина може бути учасником бронювання замість або разом з батьком.

Мої реєстрації

Список всіх бронювань користувача з фільтром за статусом:

СтатусЗначення
confirmedПідтверджено — місце заброньовано
pendingОчікує підтвердження або оплати
paidОплачено (для платних заходів)
cancelledСкасовано

Кнопка "Скасувати" переводить бронювання у статус cancelled. Скасування незворотне.

Тема оформлення

Перемикач Темна / Світла / Авто (за системними налаштуваннями). Зберігається між сесіями.

Доступ до адмін-панелі

Адмін-панель доступна за адресою /admin. Для входу використовуйте адміністраторські дані:

URL
mil-kids.replit.app/admin
Email
admin@educamp.ua
Пароль
admin123456
Безпека: Змініть пароль адміністратора після першого запуску в продакшені.

Управління заходами

Створення заходу

Вкладка Events → кнопка "+ New Event". Обов'язкові поля:

ПолеТипОпис
TitleтекстНазва заходу (українською)
DescriptionтекстПовний опис
Typeвибірcamp / seminar / training / workshop / medical / psychological
Start Date / End DateдатаДати проведення
LocationтекстАдреса або назва місця
Country / CityтекстДля фільтрації. За замовчуванням: Ukraine
Priceчисло0 = безкоштовний, підтверджується автоматично
Total SpotsчислоМаксимальна кількість учасників

Фото заходу

Після створення заходу відкрийте його та натисніть "Add Photo". Підтримуються формати JPG, PNG, WebP. Перше фото відображається як обкладинка.

Сесії та групи

Сесії (Sessions)

Якщо захід проводиться в кілька потоків/дат — створіть сесії. При бронюванні учасник обирає зручну сесію.

  • Кожна сесія має власні дати початку і кінця
  • Власну кількість місць
  • Власну ціну (може відрізнятись від основного заходу)

Групи (Groups)

Організаційні групи в межах заходу. Адміністратор може розподіляти учасників по групах після бронювання.

  • Назва та опис групи
  • Максимальна кількість членів
  • Призначення через Bookings → "Assign Group"

Бронювання

Вкладка Bookings показує всі бронювання по кожному заходу з інформацією про учасника, батька, групу та статус.

Фільтрація

  • За заходом (вибір зі списку)
  • За статусом: всі / pending / confirmed / paid / cancelled

Управління бронюванням

  • Перегляд даних учасника та батька
  • Призначення до групи
  • Скасування бронювання

Новини та програми

Новини

Вкладка News. При створенні заповніть заголовок, текст та позначте Published щоб новина з'явилась в додатку. Додайте фотографії через "Add Photo".

Партнерські програми

Вкладка Programs. Поля:

ПолеОпис
TitleНазва програми
Partner NameОрганізація-партнер
CategoryКатегорія допомоги
DescriptionОпис програми
ConditionsУмови участі
Contact InfoКонтакти для зв'язку
Is Activetrue = відображається в додатку

Налаштування

Вкладка Settings. Ключ-значення сховище для системних налаштувань.

КлючОпис
monobank_tokenAPI-токен Monobank Acquiring для прийому оплат. Залишіть порожнім якщо оплата не потрібна.

Налаштування Monobank

  1. Отримайте токен в особистому кабінеті Monobank Business
  2. Вставте токен у поле monobank_token в Settings
  3. Вкажіть webhook URL: https://mil-kids.replit.app/api/payments/webhook
  4. Для тестування використовуйте sandbox-токен

Автентифікація

Автентифікація через сесійні cookie (SameSite=None; Secure в продакшні для сумісності з Expo Go).

POST/api/auth/register
Реєстрація нового користувача. Повертає дані користувача і встановлює сесію.
{
  "name": "Олена Коваленко",
  "email": "olena@example.com",
  "password": "min8chars",
  "phone": "+380991234567"  // опційно
}
POST/api/auth/login
Вхід в систему. Повертає дані користувача, встановлює сесію.
{ "email": "user@example.com", "password": "password123" }
POST/api/auth/logout
Вихід, знищення сесії.
GET/api/auth/me
Повертає поточного автентифікованого користувача або 401.
PUT/api/auth/profile AUTH
Оновлення профілю (name, phone).

Заходи

GET/api/events
Список заходів. Query-параметри: type, search, country, city.
GET/api/events/:id
Деталі заходу + масив photos.
GET/api/events/countries
Список унікальних країн для фільтрації.
GET/api/events/cities
Список міст. Query: country.
GET/api/events/:id/photos
Фотогалерея заходу.
POST/api/admin/events/:id/photos ADMIN
Завантаження фото заходу (multipart/form-data, поле photo).

Бронювання

GET/api/bookings AUTH
Список бронювань поточного користувача.
POST/api/bookings AUTH
Створення бронювання.
{
  "eventId": 1,
  "childIds": [2, 3],   // масив ID дітей (може бути порожнім)
  "sessionId": 5        // опційно, якщо захід має сесії
}
POST/api/bookings/:id/cancel AUTH
М'яке скасування бронювання. Доступно тільки власнику.
GET/api/admin/events/:eventId/bookings ADMIN
Всі бронювання по заходу з даними дитини, батька та групи.

Партнерські програми

GET/api/programs
Список активних програм (isActive = true).
GET/api/programs/:id
Деталі програми.
POST/api/programs/:id/enroll AUTH
Запис на програму. Повторний запис на ту ж програму повертає 409.
GET/api/programs/enrollments AUTH
Список програм, на які записаний поточний користувач.

Новини

GET/api/news
Список опублікованих новин з масивом photos.
GET/api/news/:id
Деталі новини з фотогалереєю.
POST/api/admin/news ADMIN
Створення новини. Поле isPublished: true для публікації.
PUT/api/admin/news/:id ADMIN
Оновлення новини.
DELETE/api/admin/news/:id ADMIN
Видалення новини разом з усіма фото.

Оплата (Monobank)

GET/api/payments/config
Перевірка чи налаштований Monobank-токен. Повертає {"configured": true/false}.
POST/api/payments/create AUTH
Створення інвойсу Monobank для бронювання. Повертає URL платіжної сторінки.
{ "bookingId": 42 }
POST/api/payments/webhook
Webhook від Monobank. Автоматично оновлює статус бронювання на paid.
GET/api/payments/status/:bookingId AUTH
Перевірка статусу оплати для бронювання.

AI-Чат

POST/api/chat
Відправка повідомлення. Відповідь стрімується через Server-Sent Events (SSE). Content-Type відповіді: text/event-stream.
// Запит
{ "message": "Які заходи є цього місяця?", "history": [] }

// Відповідь (SSE потік)
data: {"chunk": "Цього "}
data: {"chunk": "місяця "}
data: {"chunk": "проводяться..."}
data: [DONE]
GET/api/chat/history
Останні повідомлення чату (зберігаються в БД для аналітики).

Тестові облікові записи

В системі автоматично створюються 3 тестові акаунти родин при запуску. Пароль однаковий для всіх:

Пароль
test123456
EmailІм'яДіти
kovalenko@test.ua Олена Коваленко Дмитро (10 р.), Софія (7 р.)
petrenko@test.ua Микола Петренко Артем (12 р.)
sydorenko@test.ua Ірина Сидоренко Вікторія (9 р.), Максим (14 р.)

Адміністратор

Email
admin@educamp.ua
Пароль
admin123456