Назад к выбору ролей
Interactive Prototype

Client Portal (ЛК клиента)

Интерактивный продуктовый прототип ЛК клиента обменника: invite, dashboard, счета, чат, операции, обмен и профиль. Кликайте по вкладкам для навигации между экранами.

! Ключевая идея
Клиент = собственность брокера, не платформы.
ЛК брендирован под обменник. Клиент не знает про FastOTC. Видит только свои данные у одного брокера.
Invite-only доступ.
Нет самостоятельной регистрации. Брокер создаёт к/а, отправляет invite-ссылку. Клиент регистрируется через неё.
Минимум действий.
Клиент: смотрит балансы, создаёт заявки на обмен, видит историю. Менеджер делает всё остальное.
Обязательное правило: сквозные страницы

ЛК проектируется не как набор изолированных экранов, а как связанная карта сущностей. Из любой сделки, заявки, операции, счёта или чата клиент должен перейти к связанному объекту: из сделки — в счёт и чат, из счёта — в операции/перевод/обмен, из операции — в заявку и реквизиты.

¤ Счёт = Инструмент: валюта + способ + локация

Каждый счёт клиента — это инструмент, состоящий из трёх компонентов: валюта, способ оплаты и (опционально) локация. Это ключевое отличие: EUR кэш Барселона ≠ EUR кэш Вильнюс ≠ EUR Revolut. У каждого свой баланс, доступность, курс.

TRC20 USDT
крипто — без локации, пополняется переводом на адрес
Onchain BTC
крипто — 8 знаков после запятой, свой курс
Москва USD
кэш — локация = офис в Москве, нельзя получить удалённо
Barcelona EUR
кэш — другая локация = другой счёт, отдельный баланс
Revolut EUR
банк — IBAN / SWIFT, мгновенный в EU
Тинькофф RUB
банк — перевод по номеру карты/телефона, СБП
Wise USD
e-wallet — международный перевод, низкие комиссии
Москва RUB
кэш — рублёвые наличные в московском офисе

Зачем? Брокер работает с реальными точками выдачи и разными банками. Клиент в Барселоне не может получить кэш из московского офиса. EUR на Revolut — это не то же самое, что EUR кэш. Разделение по инструментам решает эту проблему — каждый баланс привязан к конкретному способу получения.

1 Экраны MVP (P0)
Dashboard Балансы по инструментам (валюта+способ+локация), операции, курсы
Счета Account hub: все инструменты, баланс, реквизиты, последние движения
Чат Связь с менеджером внутри портала, unread badge, быстрые действия
Мои операции История: сделки, депозиты, выводы, переводы
Новый обмен SwapRequest: выбор инструмента-источника → инструмента-получения, сумма
Профиль Данные, 2FA, Telegram, смена пароля
2 Экраны Growth (P1)
Пополнение / вывод Расширенные сценарии с фото-подтверждением и реквизитами
Уведомления Статусы сделок, push, email
Курсы Актуальные курсы обменника (read-only)
Документы Квитанции по операциям (PDF)
3 Жизненный цикл клиента
ШАГ 1
Брокер создаёт к/а
Имя, телефон, memo
ШАГ 2
Invite-ссылка
Токен +72h, домен брокера
ШАГ 3
Регистрация
Телефон+пароль или TG
ШАГ 4
ЛК клиента
Dashboard, операции
ШАГ 5
Заявка на обмен
SwapRequest
ШАГ 6
Менеджер исполняет
Swap + транзакции
1 Invite Flow: от создания к/а до входа в ЛК

Клиент НЕ может зарегистрироваться сам. Только по invite-ссылке от брокера. Ссылка ведёт через домен брокера — клиент видит бренд обменника.

1. Invite-страница
alphachange.fastapp.dad/invite/a7f3...
AlphaChange
Ваш персональный обменник
Создайте аккаунт
или
Powered by FastApp
2. Успех + редирект
alphachange.fastapp.dad/crm/dashboard
Добро пожаловать!
Александр
UID: FO-7a3f8b2c4d1e
Ваш аккаунт в AlphaChange создан. Переходим в личный кабинет...
Перейти в ЛК
3. Повторный вход
alphachange.fastapp.dad/login
AlphaChange
Вход в кабинет
или
Другие способы:
• Закладка в браузере
• TG-бот: /go_crm
• Magic link через менеджера
• JWT-сессия 30 дней
2 Техническая схема Invite
invite_token (мастер-БД)
token VARCHAR(64), broker_id, partner_id, expires_at (+72h), used_at, created_by
Ссылка
{broker}.fastapp.dad/invite/{token}
Домен определяет тенант. Токен привязывает к к/а.
После регистрации
UserEntity создаётся, UserPartnerLinkEntity связывает user ↔ partner, токен помечается used
D Dashboard клиента

Главный экран после входа. Клиент видит свои балансы, последние операции и курсы валют обменника.

FO-7a3f8b2c4d1e
Александр

Dashboard

AlphaChange / Dashboard
Общий баланс (оценка)
~ $32,470
+$4,680 за 30 дней
USDT 12,450 · BTC 0.18
USD 7,550 · EUR 11,820
RUB 840,000 (~$8,842)
Почему несколько счетов в одной валюте? Каждый счёт = инструмент. EUR кэш в Барселоне ≠ EUR на Revolut ≠ EUR кэш в Вильнюсе. У каждого свой баланс, курс и доступность.
Объём операций (30 дней)
1 нед
2 нед
3 нед
4 нед
Реквизиты для пополнения
Нажмите для копирования
USDT TRC20
TJYk5aUz...8hN3vR
BTC Onchain
bc1qxy2k...9nf0gj
Revolut EUR (IBAN)
LT68 3250 0...4217
Тинькофф RUB (СБП)
+7 900 ***-**-42
Новое у брокера
3 инструмента
🇦🇪
Кэш Dubai
USD, AED · DIFC, Downtown
N26
N26 EUR
Банковский перевод · Германия
TON Native
Крипто · Telegram кошелёк
География
Нажмите для раскрытия ↗
Москва Barcelona Istanbul Dubai Berlin Bangkok Tbilisi
7
городов
6
валют
3
типа операций
Последние операции
Все операции →
  • Пополнение USDT · TRC20
    Сегодня, 14:32 · Крипто-перевод
    +2,000.00 USDT
  • Вчера, 11:15 · #FN9MS
    5,000 USDT
    TRC20
    95.20
    476,000 RUB
    Тинькофф
  • Вывод RUB · Тинькофф
    18 апр, 09:40 · Банковский перевод
    -200,000 RUB
  • Пополнение USD · Кэш Москва
    17 апр, 16:05 · Офис на Арбате
    +3,000.00 USD
  • 16 апр, 13:20 · #v8kVk
    1,500 EUR
    Кэш Barcelona
    1.082
    1,623 USDT
    TRC20

🌎 Зона покрытия — AlphaChange

Москва Barcelona Istanbul Dubai Bangkok Berlin Tbilisi

7 городов — 6 валют

Потяните вверх
Все
USD
EUR
RUB
AED
THB
GEL
🇷🇺
Москва
Покупка, продажа, обмен кэш
USDEURRUB
🇪🇸
Barcelona
Продажа, обмен кэш
EUR
🇹🇷
Istanbul
Покупка, продажа кэш
USDEUR
🇦🇪
Dubai
Покупка, продажа, обмен кэш
USDAED
🇹🇭
Bangkok
Покупка кэш
THB
🇩🇪
Berlin
Покупка, продажа кэш
EUR
🇬🇪
Tbilisi
Покупка, продажа кэш
USDGEL
A Счета клиента

Единый account hub: все инструменты клиента, реквизиты для пополнения, быстрые действия и последние движения по выбранному счёту.

FO-7a3f8b2c4d1e
Александр

Счета

AlphaChange / Accounts
Выбранный счёт
USDT TRC20
12,450.00 USDT
+2,150 USDT за 30 дней
Реквизиты для пополнения
TXa8...9QpL · Tron/TRC20
Отправляйте только USDT TRC20. Другие сети могут привести к потере средств.
USDT TRC20
12,450.00
крипто · Tron
RUB Тинькофф
840,000.00
банк · СБП/карта
EUR Barcelona
3,100.00
кэш · офис Barcelona
Последние движения по счёту Вся история →
ДатаОперацияСуммаСтатус
СегодняПополнение от менеджера+2,000 USDTЗачислено
ВчераОбмен USDT → RUB-5,000 USDTИсполнен
18 апрВывод TRC20-750 USDTПроверка
C Чат с менеджером

Клиент пишет в портал, менеджер отвечает из CRM/MessengerHub. Чат привязан к broker + partner, без видимости чужих диалогов.

FO-7a3f8b2c4d1e
Александр

Чат

Менеджер онлайн · ответ обычно < 5 мин
M
Мария · AlphaChange
онлайн, видит ваши заявки и счета
Добрый день! Вижу вашу заявку на обмен USDT → RUB. Подтверждаю курс 95.20, исполнение сегодня.
Подтверждаю. RUB на Тинькофф, как обычно.
Ок, создала сделку. Статус можно отслеживать в операциях.
Заявка #FN9MS привязана к этому диалогу
Быстрые действия
Контекст диалога
UID: FO-7a3f8b2c4d1e
Статус: Gold
Активная заявка: #FN9MS
Канал: Portal
Polling: 5 сек
Далее: файлы, голосовые, push-уведомления и мост Telegram/WhatsApp в тот же conversation.
O Мои операции

Клиент видит все свои операции с фильтрами. Не видит операции других клиентов, профит брокера, внутреннюю аналитику.

FO-7a3f8b2c4d1e
Александр

Мои операции

ID Тип Инструмент Сумма Статус
20 апреля, воскресенье+2,000 USDT1 обмен
#FN9MS Обмен USDT TRC20 → RUB Тинькофф 5,000 → 476,000 Исполнен
#DP-042 Пополнение USDT · TRC20 +2,000.00 Зачислен
18 апреля, пятница-200,000 RUB
#WD-018 Вывод RUB · Тинькофф -200,000 Выполнен
16 апреля, среда1 обмен
#v8kVk Обмен EUR кэш Barcelona → USDT TRC20 1,500 → 1,623 Исполнен
15 апреля, вторник1 заявка
#SR-091 Заявка BTC Onchain → EUR Revolut 0.5 BTC → ~27,400 EUR В работе
14 апреля, понедельник+3,000 USD
#DP-041 Пополнение USD · Кэш Москва +3,000.00 Зачислен
13 апреля, воскресенье1 обмен
#TR-007 Обмен USD Wise → EUR Revolut 2,000 → 1,840 Исполнен
12 апреля, суббота-500 USDT
#WD-017 Вывод USDT · TRC20 -500.00 Отклонён
E Новый обмен (SwapRequest)

Клиент создаёт заявку на обмен. Менеджер видит заявку, подтверждает курс, создаёт сделку. Клиент не торгует напрямую — только оставляет заявку.

FO-7a3f8b2c4d1e
Александр

Новый обмен

AlphaChange / Обмен
Заявка на обмен валют
Выберите счета и укажите сумму. Менеджер подтвердит курс.
1
2
3
Шаг 1 — Отдаю (со счёта)
Нажмите, чтобы выбрать счёт
Шаг 2 — Получаю (на счёт)
Сначала выберите «Отдаю»
Как это работает:
1. Выберите счёт «Отдаю» — откроется список ваших счетов с балансом
2. Выберите счёт «Получаю» — все инструменты брокера, включая новые
3. Укажите сумму, проверьте курс и отправьте заявку
4. Менеджер подтвердит курс, средства зачислятся на баланс

Выберите счёт

P Профиль клиента

Минимальный профиль: UID, контакты, безопасность (2FA, пароль), Telegram-привязка.

FO-7a3f8b2c4d1e
Александр

Профиль

Личные данные
Безопасность
Пароль
Последнее изменение: 10 дней назад
2FA (TOTP)
Включена
Telegram
@alex_crypto
Активные сессии
УстройствоIPПоследняя активность
Chrome / macOS текущая 185.193.126.186 Сейчас
Telegram Bot 149.154.167.220 2 часа назад
W White-label: уровни брендирования

Клиент видит бренд своего обменника, не FastOTC. Уровень зависит от тарифа брокера.

Starter
Бесплатно
broker.fastapp.dad
  • Логотип брокера
  • "Powered by FastApp" в футере
  • Субдомен fastapp.dad
  • Стандартные цвета
Pro
$99/мес
cabinet.myexchange.com
  • Кастомный домен (CNAME)
  • Полный white-label
  • Клиент не видит fastapp.dad
  • Свой SSL-сертификат
G Гарантии для брокера
UI изоляция
В ЛК клиента — логотип брокера, НЕ FastOTC. Нигде нет упоминания платформы.
Данные изолированы
Клиент видит ТОЛЬКО данные одного брокера. Нет "ваши аккаунты у других".
Нет каталога
Landing fastapp.dad — B2B. Нет списка брокеров, нет "найти обменник".
Контрактная защита
Платформа не контактирует с клиентами брокера напрямую. Юридически закреплено.
Доменная архитектура
fastapp.dad — B2B landing
broker.fastapp.dad — ЛК клиентов
app.fastapp.dad — CRM брокера
cabinet.myex.com — CNAME (Pro)
A Архитектура: что уже есть в коде

Клиентский портал строится на существующей инфраструктуре. Вот что готово и что нужно добавить.

Готово (в коде)

  • UserRoleEntity.isClient()
  • ClientResource (ACL enum)
  • ContextService + UserContext
  • ClientPortalService
  • UserPartnerLinkEntity
  • SwapRequestEntity + Form
  • OneTimeAuthService
  • PartnerLivecom (client view)
  • UidService (FO-xxx)
  • Deposit/Withdraw pages

Нужно доработать

  • Client Dashboard Livecom
  • Invite token entity + flow
  • Client-specific menu
  • White-label CSS loader
  • Wildcard SSL *.fastapp.dad
  • SwapRequest клиентская форма
  • Уведомления по статусам

Фазы реализации

  • P0: Dashboard + операции + обмен
  • P0: Invite flow + регистрация
  • P0: Профиль + 2FA
  • P1: Чат с менеджером
  • P1: Уведомления + push
  • P1: Курсы валют
  • P2: Реферальная программа
  • P2: Документы/квитанции
F Файловая структура (новые файлы)
src/Bundles/CRM/
  Controller/
    ClientPortalController.php // Dashboard, операции, обмен
  Livecom/ClientPortal/
    ClientDashboardLivecom.php
    ClientOperationsLivecom.php
    ClientExchangeLivecom.php
    View/
      ClientDashboard.php
      ClientOperations.php
      ClientExchangeForm.php
  View/Menu/
    ClientMenu.php // Sidebar для клиентов

src/Bundles/User/
  Controller/
    InviteController.php // Invite + регистрация
  Entity/
    InviteTokenEntity.php // Мастер-БД

src/View/
  layout_client.php // Layout для клиентов (минимальный sidebar)
  invite.php // Invite landing page
R Маршруты
Route ACL Описание
/crm/dashboard ClientResource::Summary Dashboard клиента (балансы, активность)
/crm/operations ClientResource::Operations История операций
/crm/exchange ClientResource::Exchange Форма новой заявки на обмен
/crm/deposit ClientResource::Deposit Запрос на пополнение
/crm/withdraw ClientResource::Deposit Запрос на вывод
/invite/{token} Public Invite-ссылка (регистрация клиента)
/profile ClientResource::Profile Профиль, 2FA, Telegram
S Что клиент НЕ видит
Профит брокера, маржа, расходы
Других клиентов, их имена, операции
Внутренние локации, кассы
Настройки валют, провайдеры курсов
Сотрудников, роли, ACL
Админ-панель, бэкапы, логи
Статус реализации — Клиентский портал
Обновлено: 2026-05-08
Прототип синхронизирован с текущей моделью навигации и правилом сквозных переходов: каждая сущность ведёт к связанным счетам, операциям, заявкам и чату.
1 Навигация (Bottom Nav)
Dashboard (home icon)
Главный экран, первый пункт меню
Accounts (wallet icon) — NEW
Объединён: счета + обмены + транзакции
Chat (center accent) — NEW
С красным badge непрочитанных сообщений
New Request (plus icon)
Форма заявки на обмен
More (profile / settings) — NEW
Профиль, настройки, выход
2 Экраны (10 маршрутов, все 200 OK)
/portal/dashboard
Балансы, quick actions, tier badge, карточка менеджера, earnings
/portal/accounts
Счета + последние обмены + транзакции в одном экране
/portal/chat
Чат с менеджером (MessengerHub), polling каждые 5 сек
/portal/new-request
Форма заявки на обмен (валюта, сумма, способ)
/portal/profile
Профиль, активные сессии, 2FA (TOTP)
/portal/rates
Курсы валют брокера в реальном времени
/portal/deposit
Пополнение счёта
/portal/withdraw
Вывод средств
/portal/transfer
P2P перевод между клиентами по UID
/portal/transactions
История операций (все типы)
3 Безопасность
PortalDataFilter
Whitelist-фильтр: клиент видит только свои данные, изоляция по tenant
VirtualUser Auth
JWT токены + one-time ссылки для входа
ACL
ClientResource enum + HasAccess attribute на каждом маршруте
2FA — TOTP
Google Authenticator, включается в профиле
4 UX Features
Боковое меню (Drawer)
Аватар, tier, язык, logout, поддержка, кнопка help-tour
Onboarding Tour
Shepherd.js, 6 шагов на первый визит, кнопка повтора в меню
Pull-to-Refresh
Swipe 120px вниз, визуальный индикатор обновления
Client Tier
Standard / Silver / Gold / Platinum — определяется по количеству сделок
Chat Unread Badge
Красный счётчик на nav accent кнопке, обновляется при polling
5 CRM-сторона (менеджер)
Вкладка Chat в карточке клиента
Менеджер видит и отвечает в чате прямо из CRM (PartnerLivecom)
Unread badge на вкладке Chat
Счётчик непрочитанных от клиента в PartnerLivecom
MessengerHub
ConversationEntity + MessageEntity + ParticipantEntity
6 Invite + Регистрация
/portal/register?invite={code}
Саморегистрация клиента по invite-ссылке брокера
PortalRegistrationController
+ PortalRegisterLivecom — реактивная форма регистрации
Валидация
Имя: 2–100 символов, уникальность. Invite-код: expiry + принадлежность брокеру
7 Технический стек
PHP Livecom + Alpine.js
Реактивные компоненты без SPA-фреймворка
Design System
326 дизайн-токенов --fp-*, frosted glass, градиенты, banking-grade CSS
Локализация
2 языка: RU + EN (source + cache translations)
MessengerHub entities
ConversationEntity, MessageEntity, ParticipantEntity
Итог
10 маршрутов реализованы и работают (200 OK)
5-пунктовая навигация, чат с polling, 2FA, onboarding tour, pull-to-refresh, ACL + data isolation, invite-регистрация, tier-система, CRM-интеграция.

Клиентский портал готов к production для solo-брокеров и командных конфигураций.