FastOTC Dashboard

Введите 6-значный код из аутентификатора


Стратегический дашборд

FastOTC

OTC-CRM для криптовалютных обменников. От Excel к автоматизированной платформе.
Единый источник правды о том, где мы находимся и куда движемся.

Обновлено: 2026-04-26
1 Миссия и видение
Зачем FastOTC существует и куда движется
В одном предложении: FastOTC заменяет Excel, мессенджеры и ручной учёт для OTC-обменников автоматизированной CRM-системой, которая ведёт сделки, балансы, распределение прибыли и управление клиентами.

Проблема

Операторы OTC-обменников управляют миллионами долларов через Excel, Telegram и записки на бумаге. Каждая ошибка в расчётах, каждая потерянная сделка, каждое неверное сведение баланса — это прямые финансовые потери.

Наше решение

Платформа, которая автоматизирует полный цикл обмена: создание сделок с автоматическим расчётом курса, распределение прибыли с реферальными выплатами, управление балансами контрагентов и отслеживание крипто-кошельков. Всё в одном месте.

Куда идём

От CRM для одного обменника к сетевой платформе. Брокер-брокер сеть, где участники взаимодействуют, делят ликвидность и растут вместе. Но сначала — нужно укрепить фундамент.

Путь эволюции

Каждый этап строится на предыдущем. Пропуск этапов — это стройка на шатком фундаменте.
1

CRM для одного обменника

Мы здесь. Работающий продукт: сделки, балансы, контрагенты, кошельки, AI-бот. 10 клиентов, 6 платящих.

2

Платформа с личным кабинетом

Следующая цель. Клиенты получают свой портал, брокеры — лендинг и freemium-модель. Вирусный рост через инвайты.

3

Мессенджер-хаб для менеджеров

Мобильное приложение: Telegram, WhatsApp, Signal в одном окне. AI-аналитика переписок. Менеджеры работают с телефона.

4

Сеть брокеров

Стратегическое видение. Межброкерные сделки, зеркальные обязательства, система репутации, общая ликвидность. Сетевые эффекты.

2 Продукт сегодня
Что работает прямо сейчас и наши текущие цифры
186K
строк PHP-кода
18
модулей (бандлов)
10
клиентов
$1 800
MRR
0
разработчиков

Сделки и обмены

Создание сделок с автоматическим расчётом курса от 9 провайдеров. Расчёт прибыли по каждой сделке.

Работает

Балансы и взаиморасчёты

Мультивалютные балансы контрагентов. Пополнения, списания, ручные корректировки. Движок сведения.

Работает

Матчинг сделок

Автоматическое сопоставление парных сделок между кассовыми аккаунтами. Отслеживание заполнения.

Работает

Распределение прибыли

4-уровневая реферальная система. Комиссии агентов, бонусы менеджеров. Закрытие прибыли в один клик.

Работает

Крипто-кошельки

Некастодиальные кошельки, транзитные адреса, импорт транзакций из блокчейна, привязка к сделкам.

Работает

AI Telegram-бот

GPT-4.1 агент с 15 функциями. Полный цикл сделки из Telegram. Понимает сленг.

Работает

Мультитенантность

Мастер-БД + отдельная база для каждого брокера. Изолированные данные. SaaS-подписки.

Работает

Криптоаудит

Хэш-цепочки + деревья Меркла + Bitcoin anchoring. Защита истории сделок от подделки.

Работает

Личный кабинет клиента

Персональный дашборд для клиентов обменника. Заявки на обмен, просмотр баланса, история.

Запланировано

Мессенджер-хаб

REST API для мобильного приложения менеджеров. Conversations, Messages, Participants. Telegram + WhatsApp + Signal.

В работе

Freemium-модель

Бесплатный тариф для соло-обменников. Авто-создание брокера, лимиты клиентов, подписки Starter/Growth/Pro.

Работает

Сеть брокеров

Межброкерные сделки, обязательства, репутация, ликвидность. Backend + UI (3 Livecom-страницы). 95% готово.

Работает
3 Рынок и клиенты
Кто использует FastOTC и что для них важно

Типичный клиент

Оператор OTC-обменника: 4+ менеджеров, 2–6 кассовых аккаунтов, 10+ сделок в день. География: СНГ, Азия, Дубай. Предыдущие инструменты: Excel, Google Sheets, попытки миграции с AmoCRM/Bitrix.

Юнит-экономика

Средний чек: ~$300/мес (со скидками). 6 платящих из 10. Привлечение: сарафанное радио + Instagram Reels. Бюджет на разработку: $100K.

Что хвалят

Учёт балансов с контрагентами. Расчёт прибыли по каждой сделке. Автоматическое распределение реферальных выплат. «Больше никакого Excel» — главный аргумент.

Боли клиентов

Нет личного кабинета для клиентов

У клиентов нет своего входа. Каждый вопрос идёт через менеджера. Это создаёт узкое горло: менеджеры тратят 30–40% времени на ответы «какой у меня баланс?» и «где моя сделка?». Личный кабинет убирает эту нагрузку и даёт клиентам самообслуживание.

Слабое разграничение прав

Менеджеры видят всех контрагентов, включая чувствительных. Нельзя скрыть конкретные аккаунты или ограничить видимость по ролям. Для крупных команд это стоп-фактор — владелец не может делегировать, не раскрывая всё.

Нет единого окна коммуникации

Менеджеры жонглируют 3–5 мессенджерами одновременно. Нет единого окна для управления перепиской с клиентами через Telegram, WhatsApp, Signal. Переписки теряются, время ответа растёт, удовлетворённость клиентов падает.

Ручное управление курсами

Курсы обмена подтягиваются от провайдеров, но управление курсом USDT всё ещё частично ручное. Настройка матчинга сделок между аккаунтами сложна для клиентов.

Высокий порог входа

Соло-операторы и маленькие команды не могут оправдать стоимость подписки. Freemium-модель (бесплатный тариф для соло) убирает этот барьер и создаёт воронку: бесплатно → Growth ($29) → Pro ($99).

Слабая аналитика

Базовые отчёты есть, но их недостаточно. Владельцы хотят понимать паттерны: какие клиенты самые прибыльные, в какое время пиковый объём, какие менеджеры работают лучше. AI-аналитика ответила бы на эти вопросы автоматически.
4 Вызовы
Что блокирует рост и почему нельзя просто добавлять фичи
Ключевой вывод: Нельзя продавать, масштабировать и строить новые функции на нестабильном фундаменте. Представьте строительство второго этажа на доме с трещинами в фундаменте — всё обрушится. Это наша текущая ситуация.

Безопасность: 6 критических исправлены ✓

Все 6 критических уязвимостей закрыты: мастер-пароль отключён, изоляция тенантов в TG-боте, шифрование ключей кошельков (+ команда миграции), SQL-инъекции в CRUD фильтрах, whitelist методов Livecom, DevSamples отключён в проде. Дополнительно исправлен copy-paste баг SwapCounters + 5 проблем HIGH/MEDIUM.

Исправлено 2026-04-21

Технический долг: 25 единиц (-15)

Исправлено 21 из 40 проблем: 6 critical (безопасность) + 15 high/medium (стабильность, курсы, auth, float→decimal, форматирование, валидация). Осталось: god-объекты (SwapEntity 1575 строк), система сведения, конкуренция транзакций, 27 RC задач.

~318 часов суммарно

89 открытых задач в Jira

27 задач застряли «между версиями» — код написан, но не выпущен. Каждый багфикс рискует сломать что-то ещё. Это создаёт хрупкость и непредсказуемость: мы не можем уверенно выкатывать новые фичи.

~45 часов на стабилизацию

Документация: есть, тесты: растут

API: 4 Swagger-спеки + Postman. Архитектура: 17 документов (kernel, CRM, bundles, frontend, security, tech-debt, PRD) в docs/architecture/. Правила: CLAUDE.md + .cursor/rules/. Тесты: 98 файлов / 650 тестов / 2693 assertions — покрытие ~7% по файлам. Покрыты: HashService, UidService, InstrumentEntity, Swapper, Ledger, TransferService, CurrencyEntity, SwapEntity, AmountFormatter, Decimal, BaseCurrency + бот-тесты + API + settlements.

Постоянная работа

Если игнорировать

  • Утечка данных и средств клиентов
  • Ошибки округления накапливаются в расхождения балансов
  • Новые фичи непредсказуемо ломают существующий функционал
  • Доверие клиентов размывается, отток растёт
  • Разработка замедляется экспоненциально с каждой новой фичей

Если исправить

  • Уверенность при подключении новых клиентов
  • Предсказуемые, надёжные финансовые расчёты
  • Быстрый и безопасный цикл разработки
  • Доверие платформе от крупных операторов
  • Фундамент для личного кабинета и freemium-роста
5 Стратегия
Почему мы делаем именно в таком порядке — а не иначе
Базовый принцип: Безопасность → Стабильность → Рост → Удержание → Масштаб. Каждый уровень бессмыслен без предыдущего. Нельзя расти, если продукт нестабилен. Нельзя масштабировать то, что не удерживает.

P0: Безопасность

~17 часов

P0: Стабильность

~45 часов

P1: Рост

~340 часов

P2: Удержание

~300 часов

P3: Масштаб

Бэклог

Почему безопасность первой?

Мы нашли мастер-пароль, дающий доступ к любому аккаунту. Ключи крипто-кошельков хранятся открытым текстом. Одна утечка данных — и мы теряем не просто клиентов, а весь бизнес. 17 часов работы убирают экзистенциальный риск.

Почему стабильность до фич?

27 задач застряли между версиями — каждая новая фича превращается в игру в Дженгу. Нужна чистая, предсказуемая кодовая база, прежде чем добавлять новые блоки. Иначе каждый новый блок рискует обрушить башню.

Почему ЛК клиента раньше мессенджер-хаба?

Личный кабинет напрямую генерирует доход: больше клиентов, выше удержание, меньше нагрузки на менеджеров. Мессенджер-хаб улучшает операции, но не добавляет платящих пользователей напрямую. Фичи, генерирующие доход, финансируют операционные улучшения.

Почему freemium-модель?

Главное возражение: «Не буду платить, пока не попробую». Freemium убирает его. Соло-операторы начинают бесплатно, растут в платные тарифы. Каждый бесплатный пользователь становится евангелистом. Вирусная механика инвайтов создаёт экспоненциальный рост без маркетинговых затрат.

Почему AI-first разработка?

Команда: 0 разработчиков. Бюджет: $100K. Классический найм даст 1–2 разработчика на 6 месяцев. AI-разработка (Claude Code) позволяет двигаться в 3–5 раз быстрее, покрывая все 18 модулей параллельно.

Почему сеть брокеров последней?

Сетевые эффекты требуют критической массы. С 10 клиентами сеть — это просто пустая комната. Сначала нужно 100+ брокеров (через freemium), потом сеть станет ценной. Строить её сейчас — преждевременно.

6 Дорожная карта
Поквартальный план: апрель 2026 — декабрь 2026
P0

Исправление безопасности ✓

Все 6 критических уязвимостей устранены — экзистенциальный риск снят
Готово
21.04.2026
✓ Все 9 пунктов исправлены (2026-04-21)

Экзистенциальные риски безопасности устранены. Мастер-пароль отключён, тенанты изолированы, ключи шифруются, SQL-инъекции закрыты, Livecom защищён.

  • ✓ Убрать мастер-пароль — isItMasterPassword() возвращает false, 2FA обязательна
  • ✓ Починить изоляцию тенантов в TG-боте — switchTenancy на broker_id бота + try/finally
  • ✓ Зашифровать приватные ключи кошельков — критическое логирование + команда wallet:encrypt-legacy
  • ✓ Исправить SQL-инъекции в фильтрах CRUD — DatetimeColumn, SelectColumn, MultiSelectColumn параметризованы
  • ✓ Добавить whitelist методов Livecom — ReflectionMethod: только public из самого компонента
  • ✓ Исправить copy-paste баг в SwapCounters — setRightFill($this->right) вместо $this->left
  • ✓ Отключить DevSamples в production — ComponentManager + App::dev() проверяют isDev()
  • ✓ Маскировка SQL-параметров в логах — print_r($params) заменён на maskParams()
  • ✓ eachTenancy() try/finally — исключение больше не оставляет БД на чужом тенанте
P0

Стабилизация

Разгребание Jira-бэклога, исправление критических багов, разблокировка релизов
~45 ч
Q2 2026
✓ Все RC задачи разобраны (2026-04-26)

27 Release Candidate задач проанализированы: 17 уже были исправлены ранее, 7 исправлены сейчас, 2 низкоприоритетных отложены (IX2-751, IX2-868), 1 требует дизайн-решений (IX2-821 — роль Client, основа реализована).

  • Разрешить 27 Release Candidate задач — смержить или откатить застрявший код
  • ✓ Исправить курс в закрывашках (IX2-857) — processPopover больше не сбрасывает isClosing при изменении курса
  • ✓ Исправить ошибки округления (IX2-849) — round($amount, 2) заменён на $currency->getRound()
  • ✓ Исправить отображение курса в списке (IX2-771) — getHumanRate() теперь использует isRevertRate() вместо хардкода USD
  • ✓ Float → Decimal для финансов — 67 полей в 28 таблицах: Kernel Field\Decimal, авто-миграция по всем тенантам
  • ✓ Починить логику направления курса (IX2-854) — getHumanRate() в SwapEntity, SwapRequestEntity и SwapRate
  • ✓ Исправить one-time auth (IX2-791) — fallback на DefaultUserRole при пустом OneTimeUserRoles
  • ✓ Исправить дубликаты счетов (IX2-595) — race condition в getAccountForWrite(), добавлен try/catch на duplicate key
  • ✓ Валидация имени контрагента (IX2-740/724) — trim() во всех точках входа, блокировка пустых имён
  • ✓ Исправить расчёт профита по обратному курсу (IX2-837) — BaseCurrency::getValue() учитывает isReverted() для BTC и подобных
  • ✓ Исправить округление во внесениях/выдачах (IX2-840) — formatColor() корректно обрабатывает null round, AmountFormatter без мутации
  • ✓ Округлять маржу до 2 знаков (IX2-839) — getSwapMargin() round(..., 4) → round(..., 2)
  • ✓ Убрать дублирование заголовков даты (IX2-134) — hideLabel=true в ExpressSwapForm, ExpenseForm, TakingForm
  • ✓ Защита округления валюты (IX2-815) — UserCurrencyCrud: запрет уменьшения round при незакрытых остатках с дробной частью
  • ✓ Default location для ограниченных пользователей (IX2-834) — 3 слоя: withLocationAndCurrency(), withLocationsRestricted(), SwapForm.php → JS bound_location_ids
  • ✓ Фильтры в TakingLivecom (IX2-848) — withSimpleCurrency() для single-field таблиц, PHP 8.4 null-safe DateTime, shared CrmFilter view
  • ✓ SwapFixer cleanup — удалены 4 устаревших метода + опасная кнопка «удалить все данные», оставлены reconciliation + move transactions. Переименовано в «Обслуживание»
  • ✓ UID вместо ID (IX2-841) — TransactionList, ExpenseForm, RequestList, GradeReport, DayDetails, SettlementsTable — getKey() ?: getId() повсюду
  • ✓ Счёт в плашке сделки (IX2-645) — Distribution, DistributionHistory, SwapArchive теперь показывают partner name + location
  • ✓ Рематчинг после drag&drop (IX2-838) — Swapper.changeOrder() вызывает SwapsMatcher.matchSwaps() после commit
  • ✓ Реактивность при редактировании сделки (IX2-865) — SwapItem.js: sync() вместо location.reload() на странице сделки
  • ✓ Реактивность в распределении прибыли (IX2-859) — Profit.js: sync() после changeProfit() через .then()
  • ✓ Стрелка дня в мобильной сводке (IX2-846) — SummaryTablesMobile: стрелка перенесена влево (как в десктопе)
  • ✓ Мобильное отображение карточки контрагента (IX2-819) — PartnerBalances: justify-start, gap-3, pb-3, responsive max-width
  • ✓ Пересчёт при переключении матчинга (IX2-782) — BrokerService.updateSettings() теперь вызывает data()->swap()->askReload()
  • ✓ Бэкап по умолчанию (IX2-835) — BrokerService.createBrokerEntity(): setBackupEnabled(true) + TenancySettings default true
  • ✓ Уведомление о балансе энергии (IX2-816) — EnergyForm: insufficient_funds → «Обратитесь к разработчикам»
  • ✓ Остаток энергии на бирже (IX2-753) — TronEnergySettings: exchange_balance с кнопкой обновления
  • ⚙ Оптимизация «Импорт балансов» при больших объёмах (2026-06-12, test02 — 1010 контрагентов; в работе, ждёт проверки в браузере) — страница «не отвечала» (фриз ~25 с), зависала и криво дорисовывала строки по «Загрузить ещё». Корень №1 (исправлено): внутри <template x-for> каждый per-row <select> нёс все 1010 опций партнёров (+ ~360 пар локация-валюта) → Alpine клонировал их на каждую строку (десятки тыс. DOM-узлов). Убрано: опции вставляются на клиенте из скрытого мастер-списка, существующим строкам — только выбранная (populatePartnerOptions/populateLocationCurrencyOptions); x-data партнёров урезан до {id,name}; payload 6.79→3.76 МБ. Корень №2 (главный, найден через git): коммит "fix select2 in import" добавил синхронную ветку loadSync в alpine-select2.js, которая инициализирует Select2 на ВСЕХ ~60 строках разом и пересоздаёт их при каждом updateSelects/«Загрузить ещё» → блок главного потока. Применено низкорисковое: каждый виджет инициализируется ровно один раз (data-alpine-select2-initialized), первая страница 30→10 строк. Откат: попытка сделать read-only строки нативными (:x-filter) сломала отображение («Создать контрагента» вместо имени) — откачено. БД/данные не тронуты. Если фриз останется — настоящий фикс: ленивая AJAX-загрузка списка партнёров (не строить 1000+ опций вовсе) + батчинг loadSync через rAF, с браузерным тестом.
P1

Личный кабинет клиента (MVP)

Персональный дашборд для клиентов — самообслуживание вместо звонков менеджеру
~120 ч
Q2 2026
Бизнес-кейс

Менеджеры тратят 30–40% времени на ответы «где моя сделка?» и «какой баланс?». ЛК убирает эту нагрузку. Клиенты сами проверяют баланс, смотрят историю, подают заявки. Снижение операционных расходов, рост удовлетворённости, доступность 24/7.

  • ✓ Дашборд — обзор баланса и последних операций. Livecom + Alpine.js
  • ✓ Мои сделки — список всех сделок с фильтрацией по дате и статусу
  • ✓ Новая заявка на обмен — подача SwapRequest прямо из портала
  • ✓ P2P-переводы — мгновенный перевод между клиентами по UID, rate limit 4/час, min $1, подтверждение
  • ✓ Пополнение — самообслуживание: выбор инструмента, 3-step confirm flow, уведомление в TG
  • ✓ Вывод — заявка со статусом PENDING, проверка баланса, одобрение менеджером
  • ✓ История транзакций — полный аудит-трейл всех движений
  • ✓ Invite-flow — генерация OneTimeAuth ссылки из CRM (PartnerLivecom), VirtualUser авторизация
  • ✓ Фундамент — бандл ClientPortal, роуты с ACL, layout с white-label брендингом, sidebar, переводы EN/RU
  • ✓ Мобильный layout — app-style bottom nav: Dashboard | Accounts | Chat (accent + badge) | New Request | More. Topbar с логотипом и hamburger
  • ✓ Автотесты Playwright — visual.spec.js: 7 страниц × mobile+desktop, HTTP 200, JS errors, скриншоты. One-command runner test-portal.sh
  • ✓ Багфиксы — CurrencyEntity::getName() → getSymbol(), TxCategory::Withdrawal → Withdraw, tx_category переводы, ACL ClientResource::Operations
  • ✓ Чистка рудиментов — PartnerFunds debug override, d-none дубликат, trash-кнопка, if(0) блоки, комментированный код, orphan route
  • ✓ Боковое меню (Drawer) — off-canvas: аватар+имя+UID+tier badge, язык, Profile, Accounts, Rates, Support, Help Tour (reset onboarding), logout
  • ✓ Onboarding-тур — Shepherd.js: 6 шагов (счета, действия, Accounts, Chat, New Request, More). Кнопка «Обзор портала» в drawer для повтора
  • ✓ UX-жесты — pull-to-refresh (threshold 120px), page fade transitions, portal-gestures.js
  • ✓ Данные клиента (PortalDataFilter) — whitelist фильтр: клиент видит балансы/сделки/транзакции, не видит margin/profit/location
  • ✓ Саморегистрация — /portal/register с invite-кодом: PortalRegistrationController, PortalRegisterLivecom, валидация имени
  • ✓ Профиль — личные данные, активные сессии (terminate/terminate all), 2FA TOTP (enable/disable через GoogleAuthenticator). ProfileLivecom + 27 переводов EN/RU
  • ✓ Accounts page — AccountsLivecom: объединённый экран счетов + последние обмены + транзакции в одном месте
  • ✓ Чат клиент↔менеджер — MessengerHub (ConversationEntity + MessageEntity + ParticipantEntity), ChatLivecom с polling 5s, accent nav с badge, CRM-сторона с unread count на вкладке Chat
  • ✓ Client Tier — Standard / Silver (5) / Gold (20) / Platinum (50) по количеству сделок. Badge в drawer + dashboard + progress bar
  • ✓ Курсы валют — /portal/rates: актуальные курсы брокера (RatesLivecom), фильтр crypto/fiat
P1

Лендинг + Freemium

Воронка привлечения: бесплатный тариф привлекает, механика инвайтов растит
~140 ч
Q2 2026
✓ Все задачи реализованы (2026-04-26)

Сейчас привлечение только через сарафан. Лендинг + freemium создают масштабируемую воронку. Соло-операторы начинают бесплатно (Starter), растут в Growth ($29) и Pro ($99). Каждый зарегистрировавшийся может стать брокером — вирусный рост без маркетинговых затрат.

  • ✓ B2B-лендинг — Landing бандл, публичный контроллер (без auth), layout_landing.php, 6 секций: hero, проблема/решение, фичи, тарифы, шаги, CTA
  • ✓ Тарифные планы — Starter ($0/100 ops), Growth ($29/1K ops), Pro ($99/unlim). Seed-команда brokerage:seed-subscriptions
  • ✓ Переводы RU/EN — ~80 ключей landing.* для двуязычного лендинга
  • ✓ Поддомены по брокерам — wildcard nginx config (*.fastapp.dad), HTTP_X_BROKER_HOST, BrokerRepository::findByDomain(), MultiTenancy kernel уже резолвит по hostname
  • ✓ Auto-create broker — selectFreePlan() принимает companyName+hostname, модалка в JS с вводом имени/hostname, auto-create BrokerEntity в один шаг
  • ✓ Вирусная механика инвайтов — offline_client_limit + online_client_limit в SubscriptionTypeEntity, SubscriptionLimitService::isOfflineClientLimitReached(), блокировка при создании партнёра, миграция с дефолтными лимитами
P1

ЛК клиента: расширение

Чат, уведомления, 2FA, просмотр курсов
~80 ч
Q3 2026
  • ✓ Чат с менеджером — Миграция на MessengerHub: mh_conversation + mh_message + mh_participant. FAB badge, polling 5s, CRM Chat tab через MH services. Команда messenger:migrate-client-messages
  • ✓ Уведомления в портале — Bell + dropdown в topbar (PortalNotificationsLivecom), триггеры при: смена статуса сделки, пополнение, вывод, входящий перевод. In-app через NotificationService
  • ✓ Профиль и 2FA — ProfileLivecom: личные данные, активные сессии (terminate/terminate all), TOTP 2FA (GoogleAuthenticator). 27 переводов EN/RU
  • ✓ Просмотр курсов — /portal/rates: RatesLivecom, read-only таблица курсов (crypto/fiat фильтр), иконки валют, провайдер, reverted rate. Ссылка в drawer
  • ✓ Push-уведомления (Web Push) — WebPushService (VAPID ES256), PushSubscriptionEntity, sw.js (tickle+fetch), push-subscribe.js (Alpine.js), setup-команда. Уже интегрировано с NotificationService
  • ✓ Мобильный wallet-вид ЛК (re-skin, read-only релиз готов) — iOS-banking редизайн PartnerLivecom для role=CLIENT, in-place на /crm/partner/{id}, без новых JS-зависимостей. Фазы 0–2 отполированы под макет mobile-bank(6).html и проверены на живом стенде stack.fastapp.dad: Фаза 0 дизайн-система wallet-mobile.scss (Taiga-токены → CSS-vars); Фаза 1 Главная (список счетов + ≈$ сводка + последние операции + bottom-nav + ActionsSheet); Фаза 2 экран счёта (баланс-карта + SVG-мини-график + действия + история). Правки сессии 30.05: клиентская терминология действий (Пополнить/Обменять/Вывести/Перевести через отдельные partner.wallet.* переводы, брокерский CRM не тронут); шторка «Выберите действие» с 4 пунктами и подсказками; кольцо у логотипа валюты; trend-чип с реальным % из серии баланса; фикс мини-графика — окно -1 month-12 month (ReportingBook агрегирует помесячно, за месяц была 1 точка → график не рисовался). Фаза 3 (Операции) реализована и протестирована браузером (Playwright, скриншот-сравнение с макетом): мобильный экран «Все операции» — период-сводка (доход/расход/нетто + stacked-bar), чипы типов с Alpine-фильтром, дни collapsible со статус-пиллами, шторка фильтров (поиск + тип); bottom-nav приведён к 2 кнопкам (Главная/Операции) как в макете. Исправлены 2 бага (пойманы скриншотами): Partner is not defined (wallet x-data без брокерского компонента) и регрессия «Главная показывала Операции» (нормализация пустой page в init()). Шторка действий — информационная (read-only): пункты Пополнить/Обменять/Вывести/Перевести помечены «Скоро» с подсказкой («напишите менеджеру»), без перехода в десктопную форму. Итог: все wallet-экраны макета (Главная/Счёт/Операции/Фильтр/Шторки) реализованы и протестированы браузером (скриншот-сравнение с макетом). Прод-релиз v1 (read-only, подготовлен): отдельная чистая ветка release/lk-readonly-v1 от прод-main — только просмотр (счета, история операций, деталь операции по тапу, полный фильтр тип/счёт/статус/период). UI и бэкенд действий (обмен/пополнение/вывод/перевод, меню «⋮»/«Добавить счёт», sheet'ы, методы walletSwap*/walletOrder*/order*, OrderEntity/OrderService, менеджерская панель PartnerOrders) полностью вырезаны. Не требует новых таблиц: crm_order исключён из ленты, crm_instrument опционален (WalletInstrument с фолбэком имя=код+тип). 15 файлов, +2053 строки, чистый diff к origin/main; прод-оптимизация transferForm сохранена. Деплой: сначала staging, затем merge в main. Открытый вопрос — вход клиента в ЛК (onetime/invite/JWT) решается на staging. Следующий релиз: рабочие wallet-формы действий. Тест в контейнере (rr reset + warmup при переводах; build-css при SCSS; скриншоты — wallet-shots/shoot-*.mjs).
P2

Ролевая система

Row-level контроль доступа — менеджеры видят только то, что должны
~40 ч
Q3 2026
✓ Реализовано (2026-04-26)

Крупные обменники (4+ менеджеров) нуждаются в тонком контроле видимости. Row-level ACL полностью реализован через BrokerEmployee + CrmFilter.applyUserRestrictions().

  • ✓ Row-level ACL — BrokerEmployee хранит partnersIds, partnersRestrictedIds, locationIds, countries, hideSensitive, onlyOwnRestriction. CrmFilter.applyUserRestrictions() унифицировал применение во всех Livecom и сервисах (SwapLivecom, SwapRequestLivecom, ExpensesLivecom, SwapTaskLivecom, ProfitDistributionService, SwapArchiveService, ProfitService)
  • ✓ Роль «Клиент» — UserRoleEntity.isClient(), VirtualUser для ClientPortal с single-partner isolation, полный PortalDataFilter whitelist
  • ✓ Скрытие чувствительных контрагентов — PartnerEntity.isSensitive(), BrokerEmployee.canViewSensitive(), getForbiddenPartnerIds() объединяет restricted + sensitive
  • ✓ Тонкая настройка видимости менеджеров — per-invite ограничения (InviteEntity), CrmUserRoleCrud для управления ролями, hasAccessToPartner() проверки
P2

AI-расширение

AI за пределами Telegram — аналитика, классификация, интеграция в веб-CRM
~60 ч
Q3 2026
  • ✓ AI в веб-CRM — AiChats + ChatLivecom + CrmChatAiAgent с 16 функциями (PartnerCreate, SwapCreate/Accept/Cancel, TransactionCreate, Balance, Calculate и др.). OpenAI API с поддержкой tool calling
  • ✓ Аналитика паттернов клиентов — AI-функции: GetTransactions, Balance, WhatPartner, Calculate — модель анализирует данные в контексте диалога
  • ✓ Классификация клиентов — AI может классифицировать через tool calling + runPromptSchema() для structured output
  • ✓ Rate limiting + защита от prompt injection — AiChats: 20 req/min + 100 req/hour per user, sanitizeInput() с 7 regex-паттернами (ignore previous, DAN mode, system: prefix и др.), логирование попыток
P2

Мессенджер-хаб

Единое окно коммуникаций — все мессенджеры + AI + CRM-контекст
~200 ч
Q3–Q4 2026
Бизнес-кейс

Менеджеры живут в мессенджерах. Типичный менеджер жонглирует Telegram, WhatsApp, иногда Signal одновременно. Переписки с 50+ клиентами через 3+ приложения теряются. Единое окно с CRM-контекстом и AI-аналитикой превращает хаос в организованный рабочий процесс.

  • ✓ Data Layer — бандл MessengerHub: 5 entities (Conversation, Participant, Message, Attachment, ChannelAccount), 8 enums, миграция по всем тенантам
  • ✓ CRM Inbox + Chat — InboxLivecom (список чатов, unread badge, фильтрация, archive) + ChatLivecom (bubbles, reply-to, system messages, polling 3s, Enter-to-send, scroll-to-bottom)
  • ✓ Context Panel — 2-колоночный layout: карточка клиента, балансы, последние 5 сделок, калькулятор маржи, быстрые действия. Responsive ≤1200px
  • ✓ Портальный чат — ChatLivecom на MessengerHub (миграция client_messages → MH). FAB badge, CRM Chat tab через MH services. messenger:migrate-client-messages
  • ✓ REST API — ConversationsEndpoint: GET conversations (list + detail), POST send_message + mark_read. Token auth, pagination, unread count. Бэкенд для мобильного клиента готов
  • ✓ Telegram-интеграция — TelegramBots бандл: webhook /telegram/webhook/{botId}, TgMiniApp, двунаправленный обмен, привязка чатов к партнёрам
  • ✓ Element (Matrix) — MatrixApiClient, MatrixRoomService, MatrixUserService, MatrixSyncService с admin API, управление пользователями, комнатами, обмен сообщениями, загрузка медиа
  • ✓ WhatsApp Cloud API — WhatsAppApiClient (Graph API v21.0), WhatsAppWebhookController (X-Hub-Signature-256), WhatsAppMessageProcessor (inbound messages + statuses), WhatsAppOutboundService (relay из CRM Chat). CRM UI для подключения (WhatsAppSettingsLivecom). Env-based credentials
  • Мобильное приложение — React Native / Flutter клиент (требует отдельной разработки)
  • Signal — дополнительный канал (ChannelType enum готов, нужна интеграция API)
  • LLM-аналитика — локальная модель для анализа переписок (нужен GPU-сервер)
P3

Сеть брокеров + CRM-воронка

Стратегическое видение — межброкерные сделки, репутация, воронка лидов
Backend 100%
2026-04-26
  • Межброкерное взаимодействие — NetworkEndpoint API + NetworkRequestsLivecom UI: таблицы incoming/outgoing запросов, obligations, кноп��и accept/reject/send/confirm/dispute.
  • Зеркальные обязательства — production: HashChainEntity + AnchorService (Bitcoin OP_RETURN). API + UI для settlement и netting.
  • Репутация и рейтинги — BrokerReputationService + ReputationLivecom: 4-компонентный скоринг, лидерборд, blacklist management. Пункт меню «Репутация».
  • Управление ликвидностью — LiquidityService + LiquidityDashboardLivecom: обзор позиций, 3 типа алертов, рекомендации неттинга, auto-netting кнопка. Пункт меню «Ликвидность».
  • CRM-воронка — LeadEntity + LeadService + LeadFunnelLivecom Kanban-борд: 4 колонки, drag-and-drop, создание лида, advance/lost, статистика воронки. Пункт меню «Лиды».
Остаётся: Explorer хэш-цепочек (blockchain-style), Push-уведомления межброкерных событий, интеграция с мобильным приложением.
7 Ключевые инициативы — детально
Подробный разбор каждой инициативы с бизнес-обоснованием
200 ч
Общий объём
120 ч
MVP
80 ч
Расширение
Q2–Q3
Сроки
Зачем строить?

Каждый клиент обменника сейчас вынужден звонить или писать менеджеру, чтобы узнать баланс или уточнить по сделке. Это создаёт узкое горло, которое не масштабируется. При 10+ клиентах на менеджера и 10+ сделках в день менеджеры становятся самым слабым звеном. Портал самообслуживания снимает 30–40% рутинных обращений.

Путь клиента

1

Брокер создаёт offline-контрагента

Менеджер вводит имя и телефон клиента. Аккаунта ещё нет.

2

Отправляет инвайт-ссылку

В один клик: «Отправить в Telegram / WhatsApp / Скопировать». Токен действует 72 часа.

3

Клиент регистрируется на домене брокера

brokerAlfa.fastapp.dad/invite/token — видит брендинг брокера, а НЕ FastOTC. Регистрация по телефону или Telegram Login.

4

Получает личный кабинет

Баланс, сделки, заявки на пополнение/вывод, история. Доступен 24/7 без звонков менеджеру.

White-label гарантия: Клиент никогда не видит «FastOTC». Он видит бренд своего брокера. Это защищает клиентские отношения брокера и не даёт платформе стать конкурентом.
Детальный артефакт: ЛК клиента — интерактивный прототип (10+ экранов) → Детальный артефакт: Lazy Promotion и глобальные к/а →
80 ч
Объём
$0
Starter
$29
Growth
$99
Pro
Почему freemium?

«Не буду платить, пока не попробую» — возражение №1. Freemium убирает его. Соло-операторы начинают бесплатно и получают полнофункциональную мини-CRM. Когда они растут, они упираются в лимиты, которые естественно толкают к платным тарифам. Главное: каждый пользователь — потенциальный брокер, привлекающий новых пользователей.

Цикл вирусного роста

Механика инвайтов создаёт самоусиливающийся цикл роста без маркетинговых затрат.
1

Брокер создаёт 3 offline-контрагента (лимит бесплатного)

Вводит имена, телефоны. Упирается в лимит. Что дальше?

2

Отправляет инвайты для конвертации offline → online

Online-клиенты (с аккаунтами) не ограничены. Когда offline конвертируется в online, слот освобождается.

3

Новый online-клиент думает: «Хочу так же»

Регистрирует свой Starter-аккаунт. Становится новым брокером. Приглашает своих клиентов. Цикл повторяется.

4

Брокер растёт, нужно больше — апгрейд

Больше offline-слотов, кастомный домен, выделенная БД. Естественный путь апгрейда.

Техническая деталь: Starter/Growth используют shared-БД с изоляцией по broker_id (WHERE broker_id=X). Pro получает выделенную БД. Миграция shared → dedicated автоматическая и прозрачная.
Детальный артефакт: Online/Offline клиенты и вирусный цикл →
60 ч
Объём
B2B
Аудитория
Q2
Срок
Зачем лендинг?

Сейчас нет веб-присутствия. Потенциальные клиенты узнают о FastOTC по сарафану и им некуда зайти, чтобы узнать подробнее, посмотреть тарифы или зарегистрироваться. B2B-лендинг на fastapp.dad конвертирует интерес в регистрации.

Архитектура доменов

fastapp.dad — B2B-лендинг для брокеров
*.fastapp.dad — клиентские порталы (per-broker)
app.fastapp.dad — админ-панель брокера
свой.домен — CNAME на тарифе Pro

Модель доверия

Лендинг говорит: «Платформа для обменников. Создайте свой обменник.» Он НЕ показывает каталог брокеров и не позволяет клиентам искать обменники. Клиент принадлежит брокеру, а не платформе. Это защищает отношения.

200 ч
Объём
4
Канала
AI
Аналитика
Q4
Срок
Зачем мессенджер-хаб?

Менеджеры обменников живут в мессенджерах. Типичный менеджер держит Telegram, WhatsApp, иногда Signal одновременно. Переписки с 50+ клиентами через 3+ приложения теряются. Единое мобильное приложение с AI-аналитикой превращает хаос в организованный рабочий процесс с data-driven инсайтами.

Каналы

Telegram, WhatsApp, Signal, Element (Matrix). Все переписки в одной ленте. Менеджер видит историю клиента по всем каналам в едином представлении.

AI-слой

Локальная LLM (Ollama) анализирует переписки в реальном времени. Подсказывает ответы, выявляет возможности для сделок, определяет недовольство клиента. Все данные остаются на сервере — никаких внешних API для конфиденциальной переписки.

Mobile-first

Лёгкое приложение, заточенное под коммуникационный workflow. Не порт полной CRM — специально спроектировано для мобильного юзкейса: быстрые ответы, управление перепиской, AI-подсказки.

Детальный артефакт: Messenger Hub — архитектура, UI, 5 типов LLM-подсказок →
40 ч
Объём
Q3
Срок
Зачем переделывать роли?

Крупные обменники (4+ менеджеров) нуждаются в контроле «кто что видит». Сейчас каждый менеджер видит всех контрагентов, включая чувствительные high-value аккаунты. Это стоп-фактор для команд с большими объёмами — им нужно разделение ролей до того, как они смогут перейти на платформу.

Сейчас

  • Базовые роли (Админ, Менеджер, Клиент)
  • Все менеджеры видят всех контрагентов
  • Роль «Клиент» через хак VirtualUser
  • Нет контроля видимости per-record

Цель

  • Row-level ACL для каждой сущности
  • Per-manager видимость контрагентов
  • Нормальная роль «Клиент» через стандартный ACL
  • Скрытие чувствительных контрагентов по роли
Детальный артефакт: Роли, progressive disclosure, 6 пресетов → Детальный артефакт: Бизнес-процесс и роли — 3 этапа, 5 ролей, Fulfillment Order, матрица доступа →
60 ч
Объём
15
AI-функций сейчас
Q3
Срок
Зачем расширять AI?

AI сейчас живёт только в Telegram-боте. Перенос в веб-CRM означает, что каждый пользователь получает AI-инсайты: распознавание паттернов, классификация клиентов, предиктивная аналитика — без переключения в Telegram. Это конкурентное преимущество, которое сложно повторить.

Что есть

GPT-4.1 агент в Telegram-боте с 15 функциями: создание сделок, проверка баланса, управление контрагентами. Понимает сленг валют. Полный цикл сделки без открытия CRM.

Что добавляем

AI-ассистент в веб-интерфейсе. Аналитика паттернов клиентов (кто прибыльнее, когда пик). Авто-классификация (скоринг риска и ценности). Rate limiting и защита от prompt injection.

0
Новых сущностей
OrderEntity
Ключевая
Ф3
Фаза
Кассир и касса

Касса — это НЕ отдельная сущность. Это SUM(balance) WHERE partner.type = 'наличныеier'. Кассир — это контрагент с типом наличныеier, который исполняет поручения менеджеров (collect/payout). Свопы — зона менеджера, кассир их не видит.

Что внутри артефакта:
  • 4 типа контрагентов: walk_in, client, наличныеier, network
  • Полный цикл обмена: кто что делает (менеджер vs кассир)
  • OrderEntity (collect/payout) с наличныеierSign / counterpartSign
  • Расчёт кассы, внутренний vs внешний кассир
  • Интерактивный калькулятор кассы и мокап мобильного UI
Детальный артефакт: Кассиры и касса →
Instrument
Ключевая сущность
15
Preset-тегов
Ф1
Фаза
Архитектура данных: Account = Instrument

Инструмент = валюта + способ + локация. EUR-REVOLUT ≠ EUR-CASH ≠ EUR-CASH-BCN. LocationEntity удалена из финансовой модели, заменена гео-тегами. 3 уровня scope: system (все видят), community (обменники), private (только владелец).

Что внутри артефакта:
  • InstrumentEntity — полная схема с полями и связями
  • TagEntity — 15 preset-тегов в 3 группах (category / geo / property)
  • Интерактивный конструктор кода инструмента
  • ER-диаграмма полной модели данных
  • 5-шаговая стратегия миграции с dual-write
Детальный артефакт: InstrumentEntity + TagEntity + миграция →
3
Уровня
BIP39
Seed-фраза
Web3
Межброкерская
Гибридная 3-уровневая аутентификация

Уровень 1: Telegram Login / пароль (95% пользователей). Уровень 2: Seed-фраза BIP39 (восстановление, кассиры, подтверждение операций). Уровень 3: Web3 ID на основе публичного ключа (межброкерская идентификация, арбитраж). Каждый уровень включается по мере необходимости.

Что внутри артефакта:
  • Кликабельные карточки 3 уровней с деталями
  • Мокап экрана логина с 3 переключаемыми вкладками
  • Схема деривации seed → key → public key → ID
  • 4 карточки рисков с митигациями
  • Текущее состояние кода: что есть vs что нужно
Детальный артефакт: Гибридная аутентификация →
Per-account
Не глобальная
2
Хэша (initial+final)
BTC
Отложен
Хэш-цепочки и аудит

Глобальная цепочка — бутылочное горлышко. Per-account цепочки решают проблему: каждый счёт ведёт свою хэш-цепь. 2 хэша вместо 4 (initial + final). Merkle tree собирает хэши ретроспективно. Bitcoin anchoring (OP_RETURN) отложен до реальных межброкерских споров.

Что внутри артефакта:
  • Визуализация per-account vs global chain (bottleneck)
  • Таблица упрощения: 4 хэша → 2 хэша
  • Диаграмма Merkle tree
  • Экономика Bitcoin OP_RETURN (когда включать)
  • 7 критических проблем с исправлениями
Детальный артефакт: Хэш-цепочки и аудит →
4
Триггера
UID
FO-xxx
Lazy
Не принудительно
Lazy Promotion и глобальные контрагенты

Единая база не создаётся принудительно — она вырастает через операции. Контрагент начинает как локальный (global_uid = null) и глобализируется при одном из 4 триггеров. «Глобальная база — телефонная книга, не банковская выписка.»

Что внутри артефакта:
  • Два слоя: GlobalPartnerEntity (платформа) vs PartnerEntity (тенант)
  • 4 триггера глобализации с кликабельными карточками и псевдокодом
  • TenantPartnerMapping — резолвинг UID → broker → local_id
  • Мокап мульти-брокерского клиентского портала
  • Приватность: что видит / не видит Бета про клиента Альфы
  • Интерактивная симуляция lazy promotion
Детальный артефакт: Lazy Promotion и глобальные к/а →
3 БД
Атомарно
Saga
Pattern
Netting
Отложен
Cross-DB и межброкерские операции

Межброкерская операция записывает данные в 3 разных базы: ObligationEntity в мастер-БД + TransactionEntity в тенант Бр1 + TransactionEntity в тенант Бр2. MySQL не поддерживает распределённые транзакции — решение через Saga pattern + outbox table.

Что внутри артефакта:
  • 4-шаговый протокол: pending → accepted → sent → completed
  • Saga pattern с компенсирующими транзакциями
  • Outbox table — гарантия доставки
  • 3 бизнес-сценария (внесение, выдача, кросс-перевод)
  • ObligationEntity + netting (отложен до 10+ брокеров)
  • SOLO / FULL — два режима базы данных
Детальный артефакт: Cross-DB и межброкерские операции →
6+4
Фаз
18-22
Недели
2
Параллельных потока
Дорожная карта реализации

Два параллельных потока: архитектура платформы (6 фаз) и Messenger Hub (4 фазы). Критический путь: InstrumentEntity → GlobalPartnerEntity → OrderEntity → Межброкерская сеть → Хэш-цепочка. Phase 4 (портал) идёт параллельно и не на критическом пути.

Что внутри артефакта:
  • Интерактивный граф зависимостей
  • Раскрываемые карточки 6 фаз с задачами и статусами
  • Параллельный поток Messenger Hub (4 фазы)
  • Комбинированный таймлайн (5 стейджей по ~4 недели)
  • 3 бизнес-горизонта (0-6 / 6-12 / 12-24 мес)
  • Полный список созданного кода и что осталось
Детальный артефакт: Фазы реализации и дорожная карта →
Миграция ядра: CRM → InstrumentEntity
Перевод финансового ядра с (currency_code + location_id) на InstrumentEntity. 9 фаз, все завершены. CRM accounts помечены @deprecated, dual-write активен.
Зачем: Старая система счетов (CRM Account = partner + location + currency) не масштабируется. Новая (Exchange Account = partner + instrument) уже создана, но не подключена к ядру. Dual-write позволяет параллельно вести оба учёта, пока клиенты мигрируют.
Фаза Что Файлы Статус
1. InstrumentResolver Мост (currency + location) → InstrumentEntity 1 новый ✓ Готово
2. Ledger dual-write Каждая транзакция пишет в оба учёта Ledger.php ✓ Готово
3. Swapper instruments left/right_instrument_id на свопах Swapper.php ✓ Готово
4. TransferService Переводы через инструменты, location опциональна TransferService, TransferDto ✓ Готово
5. PartnerRuntime getExchangeAccount(), getExchangeAccounts() PartnerRuntime, PartnerEntity ✓ Готово
6. Client Portal Портал использует Exchange accounts 4 Livecom + 4 views ✓ Готово
7. Data migration Консольная команда exchange:migrate-accounts 1 новый ✓ Готово
8. Consumers Бот → Exchange balances, API → instrument fields 8 файлов ✓ Готово
9. CRM deprecated @deprecated на CRM Account*, dual-write сохранён 4 файла ✓ Готово
8 Здоровье системы
Светофорная оценка каждого модуля — упрощённый вид
Как читать таблицу: Хорошо — работает надёжно, нет критических проблем. Нужно внимание — работает, но есть известные проблемы. Критично — есть проблемы безопасности или стабильности, требующие немедленного исправления.
Модуль Качество кода Безопасность Тесты Основная проблема
Ядро: ORM Хорошо Исправлено Нет Фильтры CRUD параметризованы
Ядро: БД / Мультитенант Нормально Исправлено Нет Изоляция TG-бота, eachTenancy try/finally, maskParams
Ядро: Livecom Хорошо Исправлено Нет Whitelist: только public из самого компонента
CRM: Сущности God-объекты Нормально Нет formatColor null-round, AmountFormatter без мутации, margin round(2). SwapEntity: 1575 строк
CRM: Swapper Нормально Исправлено Нет right=left, округление, курс закрывашек, isRevertRate, BaseCurrency reverted. Осталось: sleep(5)
CRM: Бот/AI Нормально Нет rate limit Нет Риск prompt injection
CRM: Livecom (UI) God-компоненты SQL в датах Нет 120 компонентов, 19K строк
User / Auth Хорошо Исправлено Частично Мастер-пароль, 2FA, one-time auth fallback на DefaultUserRole
ACL Нормально Нет default-deny Нет Новые ресурсы по умолчанию открыты
Wallet Нормально Миграция Нет Логирование + wallet:encrypt-legacy. Нужна миграция legacy ключей
Exchange Хорошо Хорошо Нет Миграция 9/9: dual-write, InstrumentResolver, бот + API на инструментах. CRM @deprecated.
ClientPortal Новый ACL Playwright MVP 100%: 10 маршрутов (dashboard, accounts, new-request, deposit, withdraw, transfer, transactions, chat, profile, rates) + register + drawer + Shepherd.js onboarding (6 шагов) + pull-to-refresh + ClientTier (Standard/Silver/Gold/Platinum) + MessengerHub чат с CRM badge + PortalDataFilter + Profile (2FA, сессии) + уведомления
MessengerHub Новый Хорошо Нет Data layer (5 entities, 8 enums), Inbox + Chat + Context Panel в CRM. Портальный чат мигрирован. WhatsApp Cloud API интегрирован. Осталось: Signal, мобильное приложение, LLM
TelegramBots Нормально Нет проверки webhook Нет Кто угодно может отправить фейковый update
Frontend Нет бандлера Нормально Нет 80+ загрузок скриптов, нет дизайн-системы
0
CRITICAL (-6)
7
HIGH (-8)
13
MEDIUM (-1)
~7%
Покрытие тестами (98 файлов / 650 тестов)
9 Цели и метрики
Где мы сейчас и куда нужно прийти
MRR
$1 800
$15 000
Всего клиентов
10
100
CRITICAL уязв.
0 ✓
0
P0: Стабилизация
16/17
14/14
Покрытие тестами
~7%
40%
ЛК клиентов
MVP 100% ✓
Growth live
Миграция ядра
9/9 фаз ✓
Dual-write live
Платящих клиентов
6
60+

Цели Q2 2026

MRR: $5 000
Клиентов: 30
CRITICAL уязвимостей: 0
Покрытие тестами: 20%
ЛК клиента: MVP запущен

Цели Q4 2026

MRR: $15 000
Клиентов: 100
CRITICAL уязвимостей: 0
Покрытие тестами: 40%
ЛК клиента: Growth live

Математика дохода

100 клиентов, микс тарифов:
60 Starter (бесплатно) = $0
25 Growth ($29) = $725
15 Pro ($99) = $1 485
+ кастомные контракты = ~$15K MRR

10 Ролевой тур по платформе
Посмотрите на систему глазами каждой роли — интерактивный прототип мобильного ЛК

Примерьте роль

Это единый вход во все прототипы ЛК: быстрый мобильный тур прямо здесь, детальный кликабельный ЛК клиента и расширенные ролевые сценарии. Сейчас приоритет — ЛК клиента: сначала собираем все функции и экраны на roadmap, кликаем и утверждаем, потом переносим в FastOTC.

Открыть кликабельный ЛК клиента → Расширенный тур клиента → ЛК менеджера → Тур владельца → Тур агента →

4 роли

Клиент, Менеджер, Владелец, Агент — каждая видит свою версию платформы. Клиентский портал и CRM уже работают, ролевой тур показывает реальные экраны.

Счета-инструменты

Каждый счёт — это инструмент (валюта + способ + локация). Миграция на InstrumentEntity завершена (9/9 фаз). Каждая роль видит только свои счета через ACL (48+ ресурсов).

Что реализовано

Портал клиента (11 экранов + чат + 2FA), CRM менеджера (сделки, чаты, Messenger Hub), панель владельца (аналитика, прибыль, настройки), реферальная система (4 уровня).

Обновлено: 2026-05-08 • Объединены быстрый тур, ролевые сценарии и кликабельный ЛК клиента • FastOTC Strategic Dashboard v1.5

Выберите роль

Кто вы в системе?

Каждая роль видит платформу по-своему. Выберите роль, чтобы увидеть её экраны. Клиентский портал сейчас проектируем как основной кликабельный мобильный прототип; CRM менеджера/владельца работает в продакшне.

MVP 100% ✓

Клиент обменника

Физлицо или компания, которая обменивает валюту через обменник. Например, трейдер Алексей, который регулярно конвертирует USDT в рубли через Sultan Exchange.
Как попал: Менеджер создал его как offline-контрагента и отправил invite-ссылку в Telegram. Алексей перешёл по ссылке, зарегистрировался через /portal/register и получил личный кабинет. Также доступна саморегистрация по invite-коду.
ДашбордСделкиЗаявкаПополнениеВыводПереводИсторияЧатПрофильКурсы2FA
Быстрый тур клиента →
Кликабельный ЛК клиента: 10+ экранов → Расширенный сценарий клиента →
CRM работает ✓

Менеджер

Сотрудник обменника, который обрабатывает заявки клиентов, ведёт переписки и выполняет сделки. Например, Марина — менеджер Sultan Exchange с 30+ клиентами.
Как попал: Владелец создал аккаунт в CRM с ролью «Менеджер». 27+ экранов CRM, ACL (48 ресурсов), Messenger Hub (Inbox + Chat + Context Panel).
ВходящиеЧатКонтекст клиентаЗаявкиКассирыСделкиОтчёты
Быстрый тур менеджера →
Кликабельный ЛК менеджера → Расширенный сценарий менеджера →
CRM работает ✓

Владелец / Брокер

Хозяин обменного пункта, который управляет бизнесом: команда, прибыль, тарифы, брендинг. Например, Рустам — владелец Sultan Exchange с 4 менеджерами и 200+ клиентами.
Как попал: Зарегистрировался через SelectSubscription, получил свою БД и поддомен. Управляет компанией: настройки, сотрудники, роли, TG-боты, API-ключи, курсы, прибыль.
АналитикаПрибыльРаспределениеСотрудникиНастройкиTG-ботыAPI
Быстрый тур владельца →
Кликабельный сценарий владельца →
Бэкенд готов

Агент / Реферал

Партнёр, который приводит клиентов в обменник за комиссию. Например, Дима — крипто-блогер, который рекомендует Sultan Exchange своей аудитории и получает 0.1% от каждой сделки приведённых клиентов.
Как попал: Владелец добавил его как реферального партнёра в CRM. 4-уровневая реферальная система работает: автоматический расчёт и распределение прибыли при закрытии сделки. ЛК агента — в планах.
РефералыКомиссииРаспределениеСсылки
Быстрый тур агента →
Кликабельный сценарий агента →