Aleks Sánchez Logo
Aleks Sánchez
Volver a todos los proyectos
PortfolioMap · Lente 2 · Investing & WealthEn producción · portfoliomap · live

Investing: portfolios, mandates y crypto bajo el mismo source of truth

La capa de inversión de PortfolioMap. Mandates firm-level, portfolios con holdings y rebalances versionados, watchlist con sector heatmap, market news y crypto wallet con yields y P&L EUR.

Mi rolProduct Designer · modelado de mandates → portfolios → holdings
CuándoEn desarrollo · 2026
EquipoSolo founder por ahora — diseño, sistema y producto
StackVite + SWC, React 18, TypeScript estricto, Tailwind con tokens HSL, shadcn/ui (Radix), lucide-react, react-router v6 (HashRouter), Storybook 10, MCP servers
Investing: portfolios, mandates y crypto bajo el mismo source of truth

Resultados

€1.2 B firm AUM

agregado de mandatos, portfolios y holdings con governance trazable

5 crypto holdings

spot + staking yields + exposición convertida a EUR en tiempo real

12 tickers en watchlist

índices, equity, ETFs y derivatives con sector heatmap y market news

El problema que ataca el módulo

Quien gestiona dinero — asset manager con €1.2 B AUM o usuario con su SIPP — necesita una sola lectura. Investing la entrega:

  • Qué tengo, dónde, qué rinde, qué riesgo (VaR, beta) y bajo qué custody.
  • Mandates institucionales (con MiFID II suitability), portfolios personales, watchlist y crypto bajo el mismo modelo.
  • Sin saltar entre Bloomberg + Excel + el broker para entender la cartera.

Proceso y validación

  • Hipótesis inicial: "los gestores quieren ver todas las métricas a la vez". Descartada tras 3 iteraciones — el ruido tapaba la señal.
  • Versión actual: prioriza tres números (exposición, P&L del periodo, VaR) y deja el resto en drill-down.
  • Jerarquía Mandates → Portfolios → Holdings iterada con wealthtech advisors y portfolio managers — la plana no soportaba consolidar AUM firm-level.
  • Validación: time-to-decision en mesa (segundos entre abrir el módulo y tomar acción). El objetivo es mantenerlo bajo aunque el portfolio crezca.

Decisiones de modelo

  • Mandates top-level: AUM, estrategia, governance, MiFID II target market.
  • Portfolios bajo cada mandato: holdings con settlement T+2, custody y sub-custody.
  • Rebalances versionados como snapshots inmutables comparables.
  • Watchlist independiente del portfolio. Crypto en su propio wallet con yields, staking y P&L EUR.

Decisiones de UI

  • Charts SVG nativos en lugar de Recharts — pixel-perfect con el design system, heredan tokens HSL.
  • Semáforo de riesgo (verde / ámbar / rojo) consistente entre charts y tablas.
  • Bar charts con clamp() para gap responsive al contenedor.
  • Sector heatmap sobre la misma primitiva que las tablas — cambiar de vista no rompe la lectura.

Cómo encaja con el resto del producto

  • Alimenta dos de los 5 KPIs del dashboard (Invested capital, Markets advancers).
  • Rebalances aparecen en el calendar (incluyendo settlement date).
  • Posiciones crypto visibles desde el wallet FX.
  • Tax Center lee los lots para capital gains y harvest-candidates.

Decisiones de diseño

Mandates → Portfolios → Holdings, jerarquía explícita

Jerarquía modelada, no un blob plano. Permite consolidar AUM en el top y ofrecer drill-down hasta cada lot individual sin cambiar de pantalla.

Rebalances versionados como snapshots inmutables

Cada rebalance es una snapshot completa del portfolio en ese instante. Comparar versiones es operación primitive, no cálculo derivado — clave para audit trail y reports.

Charts SVG nativos, no librería

Recharts no se alinea al pixel con un design system propio. Charts SVG nativos heredan tokens HSL, respetan container queries y pesan ~3 KB.

Watchlist desacoplada de portfolios

Lo que sigues no es lo que tienes. Cuando un ticker de la watchlist pasa a ser holding, se mueve, no se duplica.

Retrospectiva honesta

Qué funcionó

  • Modelar mandates → portfolios → holdings desde el primer sprint. Habilitó tanto el dashboard panorámico como el módulo de Reports sin trabajo adicional.
  • Charts SVG nativos. Cero divergencia visual con el design system y bundle 30 KB más ligero que con Recharts.
  • Rebalances versionados como snapshots inmutables. Hacen que el módulo de History (Operations) sea trivial de implementar.

Qué cambiaría

  • El primer modelo de crypto holdings asumía precios USD y convertía a EUR a posteriori. Hubo que rediseñar el modelo para que cada holding tuviera su currency primaria y su EUR equivalente como derivada (igual que las cuentas).
  • Subestimé el peso del sector heatmap. La primera versión renderizaba 100+ celdas como divs separados; migré a un único SVG y bajó render time un 60 %.

Qué queda abierto

  • Conectar a Twelve Data o Finnhub para cotizaciones reales y a CoinGecko para crypto sin key.
  • Modelar derivatives con mayor profundidad (Greeks, scenario analysis) — hoy se muestran como exposición plana.

¿Te interesa que aporte este nivel de detalle a tu equipo?

Estoy disponible para incorporarme en plantilla, contrato indefinido, 100 % remoto desde cualquier lugar del mundo (vivo en Madrid).

Siguiente proyecto

PortfolioMap · Lifestyle: planificación financiera completa