Arquitectura · A1 · Forma y stack
El sistema es un monolito modular con un núcleo de dominio hexagonal: una sola aplicación desplegable, pero organizada para que la lógica de negocio —el cálculo— nunca toque HTTP, el disco, ni ningún framework web. Lo que cambia seguido se aísla; lo que no, va directo.
No son microservicios: es una sola app FastAPI. Pero por dentro está en capas, con el cálculo puro en el centro y todo lo que "ensucia" (red, disco, frameworks) empujado a los bordes.
Es "hexagonal" en el sentido que importa: el núcleo (dominio) no depende de nada externo — son los bordes los que dependen del núcleo. Se puede probar el cálculo sin levantar el servidor, y cambiar el almacenamiento sin reescribir la lógica.
Tecnologías elegidas para que el contrato sea explícito y el tipado viaje solo del backend al frontend.
| Capa | Tecnología | Rol |
|---|---|---|
| Backend | FastAPI + Pydantic | API + contratos tipados que auto-generan el OpenAPI. |
| Cálculo | pandas / numpy / TA-Lib | El dominio puro: features técnicos, backtest, estadística. |
| Frontend | Next.js (App Router) + TypeScript | UI con tipos importados del backend, nunca escritos a mano. |
| Datos cliente | React Query + Zod | Fetching/caché tipado; Zod valida el form antes de enviar (solo UX). |
| Idiomas | next-intl | ES/EN por cookie; el backend devuelve códigos, el frontend los traduce. |
| Storage | filesystem → S3 | Un directorio por run hoy; abstraído para migrar sin tocar la lógica. |
Si una regla no está acá, no es regla. Todo lo demás en la arquitectura se deriva de estos seis.
data_config, backtest — no step1, step2. Los pasos se reordenan; los nombres por intención sobreviven.El caso más visible del principio 2: las URLs y los archivos se nombran por lo que son, no por el número de paso.
Cuando un paso se reordena o se inserta otro en el medio, nada hay que renombrar: backtest sigue siendo backtest. La numeración de "pasos" es solo una lectura humana del pipeline, nunca parte del código ni de las URLs.
Sigue en A2: cómo el backend es la única fuente de verdad de los tipos (Pydantic → OpenAPI → TypeScript).
Fuente: webapp/ARCHITECTURE.md §1 (principios), §5 (storage), §6 (estructura de carpetas).