Платформа довірчого управління криптоактивами: лендинг, кабінет інвестора й адмінка
Інвестор бачить рахунок, угоди й комісії в кабінеті на реальних даних з торгового термінала, а калькулятор на сайті рахує комісію тим самим кодом, що й сервер, — цифри збігаються всюди.
Коротко: за вісім тижнів (серпень–вересень 2026) ми зібрали для компанії з довірчого управління криптоактивами повну платформу: публічний сайт з калькулятором, кабінет інвестора з даними з MetaTrader 5, окрему адмінку, доступну лише через VPN, AI-чат підтримки і застосунок для телефона. Комісія за моделлю high-water mark рахується одним спільним пакетом коду на сайті й на сервері, тож цифри всюди однакові.
Клієнт і задача
Клієнт — українська компанія, що керує криптоактивами інвесторів за договором (назву розкриємо після погодження). Прийшла з детальним технічним завданням. Що потрібно було зробити:
- публічний сайт: як це працює, стратегії, безпека, команда, FAQ і калькулятор доходу та комісії;
- кабінет інвестора: баланс, угоди, відкриті позиції, комісії помісячно, звіти, договори;
- закриту адмін-панель для операторів;
- розрахунок комісії за моделлю high-water mark: винагорода береться лише з нового прибутку понад попередній максимум рахунку.
Головна вимога приймання: калькулятор на сайті, кабінет і звіти мають показувати однакові цифри.
Обмеження
- Гроші й довіра. Помилка в розрахунку комісії — це спір з інвестором. Будь-яке обіцяння на сайті має бути правдою.
- Чутливі дані. Торгові паролі до рахунків, токени, дані клієнтів. Один інвестор не має бачити чужий рахунок за жодних умов.
- Термінали — у компанії. Торгівлю веде MetaTrader 5, який розміщує сама компанія. Кабінет має отримувати дані з термінала, а не з ручних звітів.
- Різні способи підключення рахунку. ТЗ передбачало кілька моделей — депозит, API-ключ і нові в майбутньому, — без переписування ядра.
- Невелика команда. Один стек, щоб підтримувати проєкт міг один fullstack-розробник.
Рішення: архітектура і стек
Монорепозиторій на TypeScript (pnpm workspaces і Turborepo). Одна мова на фронтенді й бекенді дала головне — спільний код розрахунку комісій.
| Частина | Технологія | Що робить |
|---|---|---|
| Сайт і кабінет | Next.js (App Router), React | Лендинг, калькулятор, кабінет інвестора |
| Ядро API | NestJS, PostgreSQL | Користувачі, рахунки, прийом даних з терміналів, комісії, договори, підтримка |
| Адмін-панель | Окремий сервіс на NestJS | Статистика, користувачі, блокування, сесії, договори, журнал дій |
| Двигун комісій | Окремий пакет на чистому TypeScript | Розрахунок high-water mark помісячно — однаковий для сайту й сервера |
| Моделі підключення | Пакет-контракт і реєстр | Новий спосіб підключення рахунку — новий модуль, ядро не змінюється |
| Інфраструктура | Docker, Caddy, OpenVPN | Образи збираються локально й завантажуються на сервер, адмінка — лише у VPN-мережі |
Етап 1. Каркас і двигун комісій
Спершу — архітектура: монорепозиторій, пакет двигуна комісій з тестами на контрольному наборі даних і граничних випадках, контракт «моделі підключення» з реєстром і дві перші моделі як плагіни. У CI додали окрему перевірку, яка не дає непомітно змінити ставку комісії в коді.
Етап 2. Публічний сайт
Власна дизайн-система на CSS-токенах зі світлою й темною темами, головна з 16 секцій і дев’ять сторінок за структурою з ТЗ, живий графік капіталу з лінією high-water mark. Калькулятор імпортує той самий пакет, що й сервер. Під прогнозом дохідності — дисклеймер, а тексти перевірили, щоб сайт не обіцяв того, чого платформа не робить. Пізніше сайт перейшов на чорно-білу палітру з жовтим акцентом, а шрифти віддаються з власного сервера.
Етап 3. Інтеграція з MetaTrader 5
- Експертний модуль у терміналі надсилає повний знімок рахунку на сервер; сервер записує угоди за номером тікета, тож повторне надсилання не створює дублів.
- Кожен рахунок має власний токен прийому, і саме токен визначає, в який рахунок пишуться дані.
- Прийом даних абстрактний: нова торгова платформа — це новий адаптер, а сховище, знімки й комісії не змінюються.
- Клієнт не вводить технічну назву сервера брокера: обирає брокера зі списку, а точну назву вписує оператор після успішного входу термінала. Термінал, що увійшов не в той рахунок, позначається одразу.
Етап 4. Кабінет інвестора
Вхід через Google із сесією на сервері, дашборд з ключовими показниками, графік капіталу за 12 місяців, угоди й відкриті позиції в реальному часі, відомість комісій по місяцях, договори і рахунки на оплату. Кабінет розрізняє «помилка завантаження» і «даних ще немає»: моків немає, порожній стан чесно це показує.
Етап 5. Адмінка, AI-підтримка і мобільний доступ
- Адмін-панель — окремий сервіс без публічного порту: доступ лише з VPN-профілем, виданим компанією, плюс логін і пароль оператора з обмеженням спроб. Кожна дія пишеться в журнал в одній транзакції зі зміною. Блокування користувача одразу закриває всі його сесії, але не зупиняє торгівлю на рахунку.
- AI-чат підтримки в кабінеті з потоковими відповідями. Модель працює локально в Docker або через будь-якого OpenAI-сумісного провайдера; усе, що вона знає, лежить в одному файлі бази знань.
- Телефон: кабінет встановлюється як PWA з нижньою панеллю вкладок, є застосунок для Android (Trusted Web Activity) і профіль для екрана «Додому» на iPhone. Сповіщення про торгівлю — через Telegram-бота і push.
Складнощі і як ми їх вирішили
- Однакові цифри всюди. Замість двох реалізацій формули (на сайті й на сервері) — один пакет з тестами. Критерій приймання виконується архітектурою, а не ручною звіркою.
- Торгові паролі. Шифруються AES-256-GCM, ніколи не повертаються в браузер, а нерозкритий пароль стирається, щойно договір запрацював.
- Ізоляція клієнтів. Рахунок прив’язаний до власника, API не віддає чужі рахунки, а сувора політика CSP дозволяє браузеру звертатися лише до власного домену.
- Підробка контексту AI-чату. Браузер надсилає лише нове повідомлення, історію сервер бере з бази — підставити «відповідь помічника» чи системну інструкцію неможливо. Є ліміти на користувача, загальну кількість запитів і частоту з однієї IP.
- Вхід через Google у застосунку. У звичайному WebView Google блокує вхід, тому Android-застосунок зроблено на Trusted Web Activity — він працює на Chrome, а нові функції сайту з’являються без перевидання APK.
Результат
Фінансових і бізнесових показників платформи ми не публікуємо — це дані клієнта. Що отримала компанія:
- інвестор бачить у кабінеті реальні дані з термінала, а не макети;
- комісія прозора й однакова на сайті, в кабінеті та у звітах;
- адмінка недоступна з інтернету, а кожна дія оператора залишає слід;
- нові моделі підключення й торгові платформи додаються модулями;
- кабінет працює з телефона як застосунок.
Обсяг: 124 коміти з 3 серпня по 25 вересня 2026, від порожнього репозиторію до продакшну з деплоєм одним скриптом.
Що можна застосувати у вашому бізнесі
- Якщо цифра важлива — рахуйте її в одному місці. Спільний пакет для фронтенду й бекенду знімає цілий клас розбіжностей.
- Адмінку не обов’язково показувати інтернету. VPN і закрита мережа надійніші за будь-який пароль.
- Закладайте розширення в архітектуру: плагіни й адаптери дешевші за переписування ядра.
- Чесний порожній стан кращий за демо-дані, які клієнт сприйме як справжні.
- PWA і TWA дають застосунок у телефоні без окремої мобільної розробки.
Думаєте, чи потрібен вам AI-помічник для клієнтів? Почніть зі статті про AI-агентів для бізнесу.
Пов’язані послуги і матеріали
- Веб-платформи і SaaS — кабінети, ролі, інтеграції
- Автоматизація процесів і AI-сервіси
- Проблема: бізнес переріс свої інструменти
- Ще одна платформа: цифровий AI-університет
Плануєте кабінет клієнта чи фінансовий сервіс? Надішліть ТЗ або опишіть ідею — розберемо архітектуру й оцінимо етапи.
