Фінанси, криптоактивиNext.js · NestJS · PostgreSQL

Платформа довірчого управління криптоактивами: лендинг, кабінет інвестора й адмінка

Інвестор бачить рахунок, угоди й комісії в кабінеті на реальних даних з торгового термінала, а калькулятор на сайті рахує комісію тим самим кодом, що й сервер, — цифри збігаються всюди.

Коротко: за вісім тижнів (серпень–вересень 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-агентів для бізнесу.

Пов’язані послуги і матеріали

Плануєте кабінет клієнта чи фінансовий сервіс? Надішліть ТЗ або опишіть ідею — розберемо архітектуру й оцінимо етапи.

Хочете такий самий результат?

Обговорити проєкт

Розкажіть про задачу

Відповімо протягом робочого дня. Або напишіть у зручний месенджер.

  • Відповідь протягом робочого дня
  • Безкоштовна консультація й оцінка
  • NDA — за запитом, до старту