Ecosystem
La plataforma detrás de este portfolio: nueve proyectos conectados alrededor de una API privada.
- Tipo
- Web
- Año
- Categorías

Sobre el proyecto
La plataforma que hay detrás de este portfolio: nueve proyectos independientes, cada uno con su repositorio, su pipeline y su despliegue, alrededor de una única API privada que es la fuente de verdad. Una parte es pública (el portfolio, el hub de enlaces, la terminal y la casa en pixel art) y otra solo la uso yo.
Objetivo. Gestionar desde un solo sitio mi presencia en la web y las herramientas que uso a diario (contenido, estadísticas, enlaces cortos, finanzas y un boletín), sin depender de servicios de terceros y con la seguridad, el SEO y la accesibilidad cuidados igual en todas las piezas.
Qué hace. La parte privada:
- API: el núcleo, en Fastify con PostgreSQL y Drizzle. 30 contextos de negocio, unas 270 rutas y 63 migraciones. No está expuesta a internet: solo la llaman los servidores de las demás webs.
- CDN: guarda y sirve los archivos, redimensiona imágenes con sharp y guarda sus metadatos en SQLite. Los archivos protegidos solo se pueden incrustar desde los orígenes permitidos.
- Backoffice: el panel desde el que gestiono el contenido, las estadísticas, los enlaces cortos y mis notas privadas.
- Finanzas: clientes, proyectos, contactos, registro de horas y facturas con su PDF. No tiene inicio de sesión propio: el backoffice le entrega la sesión.
- Newsletter: un artículo al día que la API escribe con Claude a partir de fuentes citadas, con un presupuesto diario y mensual. Lo que responde el modelo se trata como texto no fiable y se valida antes de guardarlo.
- Avisos: cuando una web cae o llega un mensaje de contacto, la API me escribe por Telegram.

SEO. Las webs públicas siguen un mismo manual: canónicas, hreflang en español, inglés y japonés, sitemaps y datos estructurados. Las privadas no se indexan nunca.
Accesibilidad. WCAG 2.2 AA como mínimo en todas las webs, con el contraste de cada tema comprobado por tests.
Rendimiento. Presupuestos de LCP por debajo de 1,8 s, INP por debajo de 150 ms, CLS por debajo de 0,05 y 25 kB de JavaScript propio por página. La portada del portfolio mide 1,75 s de LCP en un móvil con la CPU cuatro veces más lenta y 4G lenta.
Seguridad y privacidad. El navegador nunca habla con la API: cada web es un BFF que la llama desde su servidor con una clave propia, que solo tiene los permisos que necesita. Contraseñas con Argon2, passkeys y segundo factor con secretos cifrados en AES-256-GCM; los tokens de sesión rotan y reutilizar uno revoca toda su familia, y las cookies son __Host-, HttpOnly y SameSite=Strict. Las escrituras sensibles piden un código TOTP reciente, hay límites de peticiones globales y por consumidor, las peticiones salientes no pueden alcanzar direcciones privadas, y las webs públicas usan una CSP estricta con nonce y HSTS con preload. La analítica es propia, sin scripts de terceros: cada visitante se cuenta con un HMAC con sal diaria, y se respetan DNT y Sec-GPC.
Ver los datos: Permisos de la clave de cada web
| Categoría | Permisos |
|---|---|
| Portfolio | 3 |
| Go | 3 |
| Terminal | 4 |
| Digest | 2 |
| Play | 2 |
| Finance | 1 |
| Backoffice | 2 |
Arquitectura y calidad. TypeScript estricto y arquitectura hexagonal en todos los proyectos, con el dominio sin dependencias externas y una regla de lint que lo garantiza. Cuando cambia el contenido, la API avisa a cada web para que regenere solo lo que ha cambiado. Todo corre en contenedores Docker detrás de Caddy (HTTP/3), y cada repositorio pasa formato, lint, tipos, tests y build en GitHub Actions antes de desplegarse.
Ver los datos: Archivos de tests por repositorio
| Categoría | Archivos de tests |
|---|---|
| API | 241 |
| Backoffice | 201 |
| Portfolio | 111 |
| Finance | 87 |
| Terminal | 55 |
| Go | 51 |
| Digest | 38 |
| Play | 37 |
| CDN | 37 |
Estado. En producción y en evolución continua: más de 60 pasos construidos desde 2026.



