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

API-ключи: дыры закрыты ✓

Ревью раздела API (ветка api-fix от performance-5). Ключ больше не мастер-доступ: эндпоинты проверяют права владельца, удаление сделки идёт через проверку ACL, чужую операцию по чужому id не удалить. Ключ хранится хешем и показывается один раз, перестаёт работать вместе с увольнением сотрудника, получил срок действия. Закрыта утечка ключа в лог при ошибке авторизации и обход CSRF: запрос без Referer считался своим из-за пустых записей в списке доменов. Починена маршрутизация — адреса с id в пути и вызовы без префикса версии отдавали 404, а limit=0 выгружал всю историю сделок одним запросом.

Исправлено 2026-08-16

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

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

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

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

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

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

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

API: единая OpenAPI-спека (docs/api/fastotc-api.yaml) + PDF, который собирается из исходника в репозитории (build-pdf.js); четыре разрозненные спеки удалены, 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 — исключение больше не оставляет БД на чужом тенанте
  • ✓ Ключи провайдеров больше не всплывают в интерфейсе (15.08.2026) — SanitizingHttpDispatcher вычищает секрет из тела любого ответа; правится только адрес внутри текста ошибки, поле формы с rpc_url остаётся целым
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-уровневая реферальная система работает: автоматический расчёт и распределение прибыли при закрытии сделки. ЛК агента — в планах.
РефералыКомиссииРаспределениеСсылки
Быстрый тур агента →
Кликабельный сценарий агента →