← Назад к проектам
Маркетплейсы и FinTech Кейс

Tendex — инвестиционная платформа для рынка цифровых активов

Разработка и развитие инвестиционной платформы швейцарского фонда Tendex (FINMA-регулирование): полный редизайн, управление инвестиционными планами, работа с пользователями и реферальной системой. Стек: Symfony, ElasticSearch, RabbitMQ, Redis, Twig.

Доступные языки
Технологии 7
PHP
Symfony
JavaScript
PostgreSQL
Redis
Elasticsearch
RabbitMQ
Tendex — инвестиционная платформа для рынка цифровых активов
Избранный проект ↗

О проекте

Tendex — швейцарский инвестиционный фонд под регулированием FINMA, с 2019 года применяющий количественный анализ и проприетарные алгоритмы для стабильной и некоррелированной прибыли на рынке цифровых активов. Платформа обрабатывает более 100 миллиардов параметров рынка и обеспечивает автоматическое управление сделками и рисками в режиме 24/7.

Я участвовал в проекте как full-stack разработчик (Symfony + Twig): отвечал за полный редизайн клиентской части, доработку ключевых бизнес-процессов — управление инвестиционными планами, заморозку и отложенный старт, принудительное завершение, удаление пользователей и редактирование реферальной структуры. Работал с высоконагруженной архитектурой на ElasticSearch, RabbitMQ и Redis.

Tendex — инвестиционная платформа для рынка цифровых активов

Tendex — швейцарский инвестиционный фонд, регулируемый FINMA, который с 2019 года использует передовые технологии и количественный анализ для получения стабильной и некоррелированной прибыли на рынке цифровых активов.

Ключевое преимущество фонда — глубокий мониторинг рынков на основе более 100 миллиардов параметров и проприетарные алгоритмы, обеспечивающие автоматическое управление сделками и рисками в режиме 24/7. Цель платформы — минимизировать риски и обеспечить высокий потенциал роста для инвесторов, предлагая надёжные решения для диверсификации и защиты капитала в мире неопределённости.

Моя роль в проекте

Full-stack разработчик: Symfony (backend), Twig (шаблоны). Отвечал за редизайн личного кабинета и клиентской части, а также за развитие ключевых бизнес-процессов инвестиционной платформы.

Технологический стек

  • Backend: Symfony (PHP)
  • Frontend: Twig
  • Поиск и аналитика: ElasticSearch
  • Очереди: RabbitMQ
  • Кэш и сессии: Redis
  • Инфраструктура: фоновые воркеры для асинхронной обработки инвестиционных событий

Ключевые задачи

  • Полный редизайн сайта и личного кабинета инвестора
  • Механика принудительного завершения инвестиционного плана
  • Корректное удаление пользователя с сохранением целостности финансовых данных
  • Функционал заморозки инвестиционных планов
  • Функционал отложенного старта инвестиционного плана
  • Редактирование реферальной структуры
  • Асинхронная обработка событий через RabbitMQ
  • Индексация и поиск по данным через ElasticSearch

Результат

Платформа получила обновлённый, современный интерфейс и расширенный набор инструментов управления инвестиционными планами, что повысило удобство для инвесторов и снизило нагрузку на поддержку. Асинхронная архитектура на RabbitMQ и ElasticSearch обеспечила стабильную работу под нагрузкой и быстрый доступ к аналитике.

Что я сделал

01

Существующий интерфейс платформы устарел, был неудобен для инвесторов и не отражал статус...

Задача

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

Решение

  • Провёл аудит текущих шаблонов Twig и выделил переиспользуемые компоненты.
  • Разработал новую дизайн-систему: сетка, типографика, UI-компоненты.
  • Страницы на Twig с подключением Twig-компонентов для интерактивных блоков (графики, таблицы, формы).
  • Обеспечил адаптивность и корректную работу на мобильных устройствах.

Результаты

  • Обновлённый, современный интерфейс, соответствующий позиционированию фонда.
  • Улучшенный UX личного кабинета инвестора.
  • Снижение количества обращений в поддержку по вопросам навигации.

02

Инвестор или администратор должен иметь возможность досрочно завершить инвестиционный план...

Задача

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

Решение

  • Спроектировал доменную модель завершения плана с учётом всех состояний (активен, заморожен, в очереди).
  • Реализовал сервис расчёта финальной доходности и комиссий.
  • Вынес тяжёлые операции в асинхронные задачи через RabbitMQ.
  • Добавил идемпотентность операций и блокировки через Redis.

Результаты

  • Корректное и предсказуемое завершение планов в любом состоянии.
  • Отсутствие двойных списаний и рассинхронизации.
  • Прозрачная история операций для инвестора.

03

Простое удаление пользователя ломало связанные сущности (инвестиционные планы, транзакции,...

Задача

Простое удаление пользователя ломало связанные сущности (инвестиционные планы, транзакции, рефералы). Нужно было реализовать безопасное удаление с сохранением финансовой истории и требований регулятора.

Решение

  • Ввёл механизм soft-delete для пользователей с сохранением связей.
  • Продумал каскадную обработку: анонимизация персональных данных, сохранение транзакционной истории.
  • Реализовал фоновую задачу очистки связанных сущностей через RabbitMQ.
  • Добавил логирование и аудит операций удаления.

Результаты

  • Безопасное удаление без нарушения целостности данных.
  • Соответствие требованиям регулятора по хранению финансовой истории.
  • Снижение риска ошибок при ручном вмешательстве.

04

Инвесторы нуждались в возможности временно приостановить начисление доходности по плану бе...

Задача

Инвесторы нуждались в возможности временно приостановить начисление доходности по плану без его закрытия — например, при рыночной нестабильности. Нужно было корректно учитывать такие периоды в расчётах.

Решение

  • Добавил состояние «заморожен» в жизненный цикл инвестиционного плана.
  • Реализовал логику паузы начислений и корректного возобновления.
  • Обновил расчёт доходности с учётом заморозки.
  • Добавил уведомления инвестору о статусе плана.

Результаты

  • Гибкое управление планами без потери истории.
  • Точные расчёты доходности с учётом периодов заморозки.
  • Повышение доверия инвесторов к инструменту.

05

Инвесторы хотели создавать план заранее с автоматическим запуском в заданную дату. Требова...

Задача

Инвесторы хотели создавать план заранее с автоматическим запуском в заданную дату. Требовалось надёжное планирование задач, устойчивое к сбоям и перезапускам сервисов.

Решение

  • Реализовал отложенный запуск через планировщик Symfony + RabbitMQ delayed messages.
  • Добавил идемпотентную обработку старта (защита от двойного запуска).
  • Обеспечил мониторинг отложенных задач и логирование.
  • Реализовал уведомления инвестору о запуске.

Результаты

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

06

Реферальная система требовала гибкости: администратор должен был иметь возможность менять...

Задача

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

Решение

  • Спроектировал модель реферальных связей с версионированием.
  • Реализовал интерфейс редактирования рефералов для администратора.
  • Обеспечил сохранение истории начислений при изменении привязок.
  • Добавил валидацию на циклические зависимости.

Результаты

  • Гибкое управление реферальной структурой.
  • Сохранение истории и корректность начислений.
  • Снижение ручной работы поддержки.

07

Рост нагрузки и количество операций (начисления, старт/стоп планов, уведомления) требовали...

Задача

Рост нагрузки и количество операций (начисления, старт/стоп планов, уведомления) требовали выноса тяжёлых операций из синхронного HTTP-цикла, чтобы не блокировать пользовательские запросы.

Решение

  • Спроектировал очередь событий для ключевых доменных операций.
  • Реализовал воркеры на Symfony Messenger + RabbitMQ.
  • Добавил retry-политики, dead-letter queue и мониторинг.
  • Обеспечил идемпотентность обработчиков.

Результаты

  • Быстрый отклик интерфейса независимо от фоновых операций.
  • Устойчивость к сбоям благодаря retry и DLQ.
  • Масштабируемость обработки под нагрузкой.

08

Быстрый поиск по большому объёму данных (транзакции, планы, пользователи) и построение ана...

Задача

Быстрый поиск по большому объёму данных (транзакции, планы, пользователи) и построение аналитики требовали специализированного поискового движка вместо тяжёлых SQL-запросов.

Решение

  • Настроил индексы ElasticSearch под ключевые сущности.
  • Реализовал синхронизацию данных через RabbitMQ-события.
  • Добавил поисковые запросы с фильтрами и агрегациями для аналитики.
  • Оптимизировал маппинги и реиндексацию.

Результаты

  • Быстрый поиск по большим объёмам данных.
  • Гибкая аналитика для администраторов и инвесторов.
  • Снижение нагрузки на основную БД.

09

Высокая частота обращений к часто используемым данным и необходимость защиты от гонок при...

Задача

Высокая частота обращений к часто используемым данным и необходимость защиты от гонок при параллельных операциях требовали надёжного кэша и механизма блокировок.

Решение

  • Внедрил кэширование горячих данных и агрегатов в Redis.
  • Реализовал распределённые блокировки для критичных операций (старт/завершение плана).
  • Настроил инвалидацию кэша по событиям.
  • Добавил мониторинг hit/miss и времени отклика.

Результаты

  • Снижение времени отклика ключевых страниц.
  • Защита от гонок и двойных операций.
  • Уменьшение нагрузки на БД.

10

Регулируемый фонд требует полного аудита всех финансовых операций: кто, когда, что и на ка...

Задача

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

Решение

  • Спроектировал схему аудит-лога с привязкой к пользователю, плану и транзакции.
  • Реализовал асинхронную запись аудита через RabbitMQ.
  • Добавил инструменты поиска и выгрузки аудит-логов для администраторов (ElasticSearch).
  • Обеспечил неизменяемость записей.

Результаты

  • Полный аудит финансовых операций.
  • Соответствие требованиям регулятора.
  • Быстрый доступ к истории через поиск.

11

Инвестиционная платформа работает 24/7, и любая задержка в обработке событий или сбой ворк...

Задача

Инвестиционная платформа работает 24/7, и любая задержка в обработке событий или сбой воркера критичны. Требовалась система мониторинга ключевых метрик и оповещений.

Решение

  • Настроил сбор метрик по очередям RabbitMQ, Redis, ElasticSearch и ключевым бизнес-событиям.
  • Реализовал алерты на аномалии (рост DLQ, задержки, ошибки воркеров).
  • Добавил дашборды для команды.
  • Интегрировал логирование критичных операций.

Результаты

  • Быстрое обнаружение и реакция на инциденты.
  • Снижение времени простоя.
  • Прозрачность состояния платформы для команды.

Технологии и темы

Теги проекта

#Symfony #PHP #Twig #ElasticSearch #RabbitMQ #Redis #Fintech #Investment Platform #Crypto #REST API #Symfony Messenger #High Load #Async Processing #Redesign #Referral System #Audit Logging
04
Начать проект

Нужен аналогичный технический подход?

Давайте обсудим ваш проект, архитектуру и наилучший технологический стек для него.

Давайте обсудим ↗