← Volver a los proyectos
Marketplaces y FinTech Caso de estudio

Tendex — Plataforma de inversión para el mercado de activos digitales

Desarrollo y evolución de la plataforma de inversión del fondo suizo Tendex: rediseño completo, gestión de planes de inversión, sistema de usuarios y referidos. Stack: Symfony, ElasticSearch, RabbitMQ, Redis, Twig.

Tecnologías 7
PHP
Symfony
JavaScript
PostgreSQL
Redis
Elasticsearch
RabbitMQ
Tendex — Plataforma de inversión para el mercado de activos digitales
Proyecto destacado ↗

Sobre el proyecto

Tendex es un fondo de inversión suizo regulado por la FINMA que, desde 2019, utiliza análisis cuantitativo y algoritmos propietarios para generar rendimientos estables y no correlacionados en el mercado de activos digitales. La plataforma procesa más de 100 mil millones de parámetros de mercado y garantiza una gestión automatizada de operaciones y riesgos en modo 24/7.

Participé en el proyecto como desarrollador full-stack (Symfony + Twig): responsable del rediseño completo del frontend y de la evolución de procesos de negocio clave — gestión de planes de inversión, congelación y arranque diferido, terminación forzada, eliminación de usuarios y edición de la estructura de referidos. Trabajé con una arquitectura de alta carga basada en ElasticSearch, RabbitMQ y Redis.

Tendex — Plataforma de inversión para el mercado de activos digitales

Tendex es un fondo de inversión suizo regulado por la FINMA que, desde 2019, utiliza tecnologías de vanguardia y análisis cuantitativo para generar rendimientos estables y no correlacionados en el mercado de activos digitales.

La ventaja clave del fondo reside en un monitoreo profundo del mercado basado en más de 100 mil millones de parámetros y algoritmos propietarios que garantizan una gestión automatizada de operaciones y riesgos en modo 24/7. El objetivo de la plataforma es minimizar los riesgos y ofrecer a los inversores un alto potencial de crecimiento — con soluciones fiables para la diversificación y la protección del capital en un mundo lleno de incertidumbre.

Mi rol en el proyecto

Desarrollador full-stack: Symfony (backend), Twig (plantillas). Responsable del rediseño del área de cliente y del frontend, así como de la evolución de los procesos de negocio clave de la plataforma de inversión.

Stack tecnológico

  • Backend: Symfony (PHP)
  • Frontend: Twig
  • Búsqueda y analítica: ElasticSearch
  • Colas: RabbitMQ
  • Caché y sesiones: Redis
  • Infraestructura: workers en segundo plano para el procesamiento asíncrono de eventos de inversión

Tareas clave

  • Rediseño completo del sitio y del área de cliente del inversor
  • Mecánica de terminación forzada de un plan de inversión
  • Eliminación correcta del usuario preservando la integridad de los datos financieros
  • Funcionalidad de congelación de planes de inversión
  • Funcionalidad de arranque diferido de un plan de inversión
  • Edición de la estructura de referidos
  • Procesamiento asíncrono de eventos mediante RabbitMQ
  • Indexación y búsqueda mediante ElasticSearch

Resultado

La plataforma obtuvo una interfaz moderna y actualizada, además de un conjunto ampliado de herramientas para la gestión de planes de inversión. Esto mejoró la experiencia de los inversores y redujo la carga sobre el soporte. La arquitectura asíncrona basada en RabbitMQ y ElasticSearch garantizó un funcionamiento estable bajo carga y un acceso rápido a la analítica.

Lo que entregué

01

La interfaz existente de la plataforma estaba desactualizada, era poco práctica para los i...

El desafío

La interfaz existente de la plataforma estaba desactualizada, era poco práctica para los inversores y no reflejaba el estatus de un fondo suizo regulado. Era necesario renovar la parte visual y la UX sin perder funcionalidad y sin interferir con los procesos de negocio en curso.

Solución

  • Auditoría de las plantillas Twig existentes e identificación de componentes reutilizables.
  • Desarrollo de un nuevo design system: grid, tipografía, componentes UI.
  • Reimplementación de las páginas clave con Twig e integración de componentes Vue para las áreas interactivas (gráficos, tablas, formularios).
  • Garantía de responsividad y renderizado correcto en dispositivos móviles.

Resultados

  • Interfaz moderna y actualizada, coherente con el posicionamiento del fondo.
  • UX mejorada en el área de cliente del inversor.
  • Reducción del número de solicitudes al soporte relacionadas con la navegación.

02

Los inversores o administradores debían poder terminar anticipadamente un plan de inversió...

El desafío

Los inversores o administradores debían poder terminar anticipadamente un plan de inversión, con un recálculo correcto de rentabilidad, comisiones y reembolso. Era necesario evitar la desincronización de datos durante operaciones paralelas.

Solución

  • Diseño de un modelo de dominio para la terminación del plan que cubre todos los estados (activo, congelado, en cola).
  • Implementación de un servicio para el cálculo de la rentabilidad final y las comisiones.
  • Traslado de las operaciones pesadas a tareas asíncronas mediante RabbitMQ.
  • Adición de idempotencia de las operaciones y bloqueos mediante Redis.

Resultados

  • Terminación correcta y predecible de los planes en cualquier estado.
  • Sin dobles cargos ni desincronización de datos.
  • Historial de operaciones transparente para el inversor.

03

La simple eliminación de un usuario rompía las entidades relacionadas (planes de inversión...

El desafío

La simple eliminación de un usuario rompía las entidades relacionadas (planes de inversión, transacciones, referidos). Era necesario implementar una eliminación segura que preservara el historial financiero y los requisitos regulatorios.

Solución

  • Introducción de un mecanismo de soft-delete para usuarios preservando las relaciones.
  • Diseño de un procesamiento en cascada: anonimización de datos personales, preservación del historial de transacciones.
  • Implementación de una tarea en segundo plano para la limpieza de entidades relacionadas mediante RabbitMQ.
  • Adición de logging y auditoría de las operaciones de eliminación.

Resultados

  • Eliminación segura sin violar la integridad de los datos.
  • Cumplimiento de los requisitos regulatorios para la conservación del historial financiero.
  • Reducción del riesgo de errores durante intervenciones manuales.

04

Los inversores necesitaban poder suspender temporalmente la acumulación de rendimiento de...

El desafío

Los inversores necesitaban poder suspender temporalmente la acumulación de rendimiento de un plan sin cerrarlo — por ejemplo, en caso de inestabilidad del mercado. Dichos periodos debían considerarse correctamente en los cálculos.

Solución

  • Adición del estado «congelado» en el ciclo de vida del plan de inversión.
  • Implementación de la lógica de pausa de acumulaciones y reanudación correcta.
  • Actualización del cálculo de rentabilidad para tener en cuenta los periodos de congelación.
  • Adición de notificaciones al inversor sobre el estado del plan.

Resultados

  • Gestión flexible de los planes sin pérdida de historial.
  • Cálculos de rentabilidad precisos que tienen en cuenta los periodos de congelación.
  • Mayor confianza de los inversores en el instrumento.

05

Los inversores querían crear un plan con antelación con arranque automático en una fecha d...

El desafío

Los inversores querían crear un plan con antelación con arranque automático en una fecha determinada. Se requería una planificación fiable de tareas, robusta ante fallos y reinicios de servicios.

Solución

  • Implementación del arranque diferido mediante el scheduler de Symfony + RabbitMQ delayed messages.
  • Adición de un procesamiento idempotente del arranque (protección contra doble arranque).
  • Monitoreo de tareas diferidas y logging.
  • Implementación de notificaciones al inversor sobre el arranque.

Resultados

  • Arranque diferido fiable sin intervención manual.
  • Sin duplicados ni arranques perdidos.
  • Herramienta de planificación práctica para los inversores.

06

El sistema de referidos requería flexibilidad: los administradores debían poder cambiar la...

El desafío

El sistema de referidos requería flexibilidad: los administradores debían poder cambiar la asignación de referidos y los inversores ver la estructura actual. La implementación existente no permitía editar las asignaciones sin perder el historial de acumulaciones.

Solución

  • Diseño de un modelo de relaciones de referidos con versionado.
  • Implementación de una interfaz de edición de referidos para administradores.
  • Preservación del historial de acumulaciones al cambiar las asignaciones.
  • Adición de validación contra dependencias cíclicas.

Resultados

  • Gestión flexible de la estructura de referidos.
  • Preservación del historial y correctitud de las acumulaciones.
  • Reducción del trabajo manual del soporte.

07

El crecimiento de la carga y del número de operaciones (acumulaciones, arranque/parada de...

El desafío

El crecimiento de la carga y del número de operaciones (acumulaciones, arranque/parada de planes, notificaciones) requería sacar las operaciones pesadas del ciclo HTTP síncrono para no bloquear las solicitudes de los usuarios.

Solución

  • Diseño de una cola de eventos para las operaciones de dominio clave.
  • Implementación de workers con Symfony Messenger + RabbitMQ.
  • Adición de políticas de retry, dead-letter queue y monitoreo.
  • Garantía de idempotencia de los handlers.

Resultados

  • Respuesta rápida de la interfaz independientemente de las operaciones en segundo plano.
  • Tolerancia a fallos gracias a retry y DLQ.
  • Procesamiento escalable bajo carga.

08

La búsqueda rápida sobre grandes volúmenes de datos (transacciones, planes, usuarios) y la...

El desafío

La búsqueda rápida sobre grandes volúmenes de datos (transacciones, planes, usuarios) y la construcción de analítica requerían un motor de búsqueda especializado en lugar de consultas SQL pesadas.

Solución

  • Configuración de índices de ElasticSearch para las entidades clave.
  • Implementación de la sincronización de datos mediante eventos de RabbitMQ.
  • Adición de consultas de búsqueda con filtros y agregaciones para la analítica.
  • Optimización de mappings y reindexación.

Resultados

  • Búsqueda rápida sobre grandes volúmenes de datos.
  • Analítica flexible para administradores e inversores.
  • Reducción de la carga sobre la base de datos principal.

09

La alta frecuencia de acceso a datos de uso frecuente y la necesidad de protegerse contra...

El desafío

La alta frecuencia de acceso a datos de uso frecuente y la necesidad de protegerse contra race conditions durante operaciones paralelas requerían una caché fiable y un mecanismo de bloqueos.

Solución

  • Introducción del caching de datos calientes y agregados en Redis.
  • Implementación de bloqueos distribuidos para operaciones críticas (arranque/terminación de planes).
  • Configuración de la invalidación de caché mediante eventos.
  • Adición de monitoreo hit/miss y tiempos de respuesta.

Resultados

  • Reducción del tiempo de respuesta de las páginas clave.
  • Protección contra race conditions y dobles operaciones.
  • Carga reducida sobre la base de datos.

10

Un fondo regulado exige una auditoría completa de todas las operaciones financieras: quién...

El desafío

Un fondo regulado exige una auditoría completa de todas las operaciones financieras: quién, cuándo, qué y sobre qué base. Era necesario construir un sistema de auditoría que no ralentizara los procesos principales.

Solución

  • Diseño de un esquema de audit log vinculado a usuario, plan y transacción.
  • Implementación de la escritura asíncrona de la auditoría mediante RabbitMQ.
  • Adición de herramientas de búsqueda y exportación de audit logs para administradores (ElasticSearch).
  • Garantía de inmutabilidad de los registros.

Resultados

  • Auditoría completa de las operaciones financieras.
  • Cumplimiento de los requisitos regulatorios.
  • Acceso rápido al historial mediante la búsqueda.

11

La plataforma de inversión opera 24/7, y cualquier retraso en el procesamiento de eventos...

El desafío

La plataforma de inversión opera 24/7, y cualquier retraso en el procesamiento de eventos o fallo de un worker es crítico. Se requería un sistema de monitoreo de métricas clave y alertas.

Solución

  • Configuración de la recolección de métricas sobre colas (RabbitMQ), Redis, ElasticSearch y eventos de negocio clave.
  • Implementación de alertas ante anomalías (crecimiento de la DLQ, retrasos, errores de workers).
  • Adición de dashboards para el equipo.
  • Integración del logging de operaciones críticas.

Resultados

  • Detección y reacción rápidas ante incidentes.
  • Reducción de los tiempos de inactividad.
  • Transparencia del estado de la plataforma para el equipo.

Tecnologías y temas

Etiquetas del proyecto

#Symfony #PHP #Twig #ElasticSearch #RabbitMQ #Redis #Fintech #Plataforma de inversión #Cripto #REST API #Symfony Messenger #High Load #Procesamiento asíncrono #Rediseño #Sistema de referidos #Audit Logging
04
Iniciar un proyecto

¿Necesita un enfoque técnico similar?

Analicemos su proyecto, la arquitectura y el mejor stack tecnológico para él.

Hablemos ↗