37 ПОРУЧ — Документація
Повний опис платформи підтримки сімей 37-ї окремої бригади морської піхоти України: мобільний додаток Expo Go, адмін-панель та REST API.
Про платформу
37 ПОРУЧ — цифрова служба підтримки для батьків та родин військовослужбовців 37-ї окремої бригади морської піхоти України (37 ОБрМП). Платформа дозволяє реєструватися на заходи психологічної підтримки, реабілітаційні табори, навчальні програми та отримувати інформацію про партнерські програми допомоги.
📅 Заходи
Перегляд, пошук та запис на безкоштовні заходи підтримки для дітей і родин
🤝 Програми
Партнерські програми психологічної, юридичної та медичної допомоги
📰 Новини
Актуальні новини бригади з фотогалереями
🤖 AI-Чат
Розумний помічник на базі OpenAI з доступом до актуальних заходів та програм
👨👩👧 Профіль родини
Управління профілями дітей, перегляд та скасування бронювань
🛡️ Адмін-панель
Повне управління заходами, бронюваннями, групами та налаштуваннями
Технічний стек
| Шар | Технологія | Деталі |
|---|---|---|
| Мобільний додаток | Expo / React Native | Expo Router (file-based), iOS · Android · Web |
| Бекенд | Express.js + TypeScript | REST API, Server-Sent Events (SSE) для стрімінгу чату |
| База даних | PostgreSQL | Drizzle ORM, підключення через DATABASE_URL |
| Автентифікація | Session-based | express-session + connect-pg-simple + bcrypt |
| AI | OpenAI GPT-4o-mini | Replit AI Integrations, знає про всі заходи та програми |
| Оплата | Monobank Acquiring | Опційно, API-токен вказується в адмін-налаштуваннях |
| Стан | React Query | Кешування серверного стану, інвалідація після мутацій |
| Теми | ThemeContext | Темна / світла / авто, зберігається в AsyncStorage |
Кольорова система (DS37)
#122046
#055C6D
#F4A929
#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 повідомлень як контекст розмови
Профіль та бронювання
Дані профілю
Редагування імені, телефону. Email змінити не можна (використовується як логін).
Мої діти
Список профілів дітей. Для кожної дитини: ім'я, вік. Можна додавати, редагувати та видаляти. Дитина може бути учасником бронювання замість або разом з батьком.
Мої реєстрації
Список всіх бронювань користувача з фільтром за статусом:
| Статус | Значення |
|---|---|
| confirmed | Підтверджено — місце заброньовано |
| pending | Очікує підтвердження або оплати |
| paid | Оплачено (для платних заходів) |
| cancelled | Скасовано |
Кнопка "Скасувати" переводить бронювання у статус cancelled. Скасування незворотне.
Тема оформлення
Перемикач Темна / Світла / Авто (за системними налаштуваннями). Зберігається між сесіями.
Доступ до адмін-панелі
Адмін-панель доступна за адресою /admin. Для входу використовуйте адміністраторські дані:
Управління заходами
Створення заходу
Вкладка 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 Active | true = відображається в додатку |
Налаштування
Вкладка Settings. Ключ-значення сховище для системних налаштувань.
| Ключ | Опис |
|---|---|
monobank_token | API-токен Monobank Acquiring для прийому оплат. Залишіть порожнім якщо оплата не потрібна. |
Налаштування Monobank
- Отримайте токен в особистому кабінеті Monobank Business
- Вставте токен у поле
monobank_tokenв Settings - Вкажіть webhook URL:
https://mil-kids.replit.app/api/payments/webhook - Для тестування використовуйте sandbox-токен
Автентифікація
Автентифікація через сесійні cookie (SameSite=None; Secure в продакшні для сумісності з Expo Go).
{
"name": "Олена Коваленко",
"email": "olena@example.com",
"password": "min8chars",
"phone": "+380991234567" // опційно
}
{ "email": "user@example.com", "password": "password123" }
Заходи
type, search, country, city.country.photo).Бронювання
{
"eventId": 1,
"childIds": [2, 3], // масив ID дітей (може бути порожнім)
"sessionId": 5 // опційно, якщо захід має сесії
}
Партнерські програми
Новини
isPublished: true для публікації.Оплата (Monobank)
{"configured": true/false}.{ "bookingId": 42 }
paid.AI-Чат
text/event-stream.// Запит
{ "message": "Які заходи є цього місяця?", "history": [] }
// Відповідь (SSE потік)
data: {"chunk": "Цього "}
data: {"chunk": "місяця "}
data: {"chunk": "проводяться..."}
data: [DONE]
Тестові облікові записи
В системі автоматично створюються 3 тестові акаунти родин при запуску. Пароль однаковий для всіх:
| Ім'я | Діти | |
|---|---|---|
kovalenko@test.ua |
Олена Коваленко | Дмитро (10 р.), Софія (7 р.) |
petrenko@test.ua |
Микола Петренко | Артем (12 р.) |
sydorenko@test.ua |
Ірина Сидоренко | Вікторія (9 р.), Максим (14 р.) |