Skip to content

Visión General de Arquitectura

NappAI Fluency es una academia online de IA construida como monorepo. El sistema está compuesto por tres apps productivas y un motor de IA propio que se integra como microservicio.

C4Context
title NappAI Fluency — Contexto del sistema
Person(user, "Usuario", "Free / Starter / Pro / Elite / Corporate")
Person(admin, "Admin / Creator", "CONTENT_ADMIN, SUPER_ADMIN")
System(fluency, "NappAI Fluency", "Academia online de IA — web + API + AI Backend")
System_Ext(stripe, "Stripe", "Pagos y suscripciones")
System_Ext(aibackend, "AI Backend", "Motor de IA propio (ADR-010)")
System_Ext(bunny, "Bunny.net", "CDN de video")
System_Ext(r2, "Cloudflare R2", "Almacenamiento de archivos")
System_Ext(resend, "Resend", "Email transaccional")
System_Ext(neon, "Neon PostgreSQL", "Base de datos serverless")
Rel(user, fluency, "Usa", "HTTPS")
Rel(admin, fluency, "Administra", "HTTPS")
Rel(fluency, stripe, "Procesa pagos", "API REST")
Rel(fluency, aibackend, "Llama al motor IA", "HTTP interno")
Rel(fluency, bunny, "Sirve video", "CDN")
Rel(fluency, r2, "Sube/descarga archivos", "S3 API")
Rel(fluency, resend, "Envía emails", "API REST")
Rel(fluency, neon, "Persiste datos", "Prisma/TCP")
C4Container
title NappAI Fluency — Contenedores
Person(user, "Usuario")
Container(web, "apps/web", "React 19 + Vite + TS", "SPA servida desde Vercel")
Container(api, "apps/api", "NestJS 11 + Prisma", "API REST en Railway/Vercel")
Container(aibackend, "apps/ai-backend", "NestJS 11", "Motor IA — puerto 3001")
ContainerDb(db, "Neon PostgreSQL", "PostgreSQL 16", "BD serverless con pooling")
ContainerDb(redis, "Upstash Redis", "Redis", "Caché + BullMQ + pub/sub")
Rel(user, web, "Navega", "HTTPS")
Rel(web, api, "Llama", "REST / JSON")
Rel(api, aibackend, "Solicita IA", "HTTP interno + AIBACKEND_API_KEY")
Rel(api, db, "Lee/Escribe", "Prisma")
Rel(api, redis, "Caché / Colas", "ioredis")
Rel(aibackend, redis, "Pub/sub métricas", "ioredis")
CapaTecnologíaVersiónNotas
FrontendReact19Con concurrent features
FrontendVite6Build y HMR
FrontendTypeScript~5.6Strict mode
FrontendMUIv7Componentes UI
FrontendTailwind CSSv4Utility classes
FrontendRedux ToolkitlatestStore global
FrontendRTK QuerylatestData fetching
FrontendReact Router DOMv7Routing
BackendNestJS11Framework API
BackendTypeScript~5.6Strict mode
BackendPrisma6ORM
BackendPostgreSQL16Neon Serverless
BackendBullMQlatestColas de tareas
BackendUpstash RedislatestCaché + pub/sub
E2EPlaywright1.50+Tests bloqueantes en CI
MonorepoTurborepov2Build cache incremental
Monorepopnpmv9Package manager
Deploy FEVercelEdge network
Deploy BERailwayContainers
StorageCloudflare R2S3-compatible
Video CDNBunny.netStream + CDN
EmailResendTransaccional
PagosStripeSuscripciones + webhooks
MonitoreoSentryError tracking
AnalyticsPostHogProducto analytics

Ver decisiones.mdx para el registro completo.

ADRDecisiónEstado
ADR-001Monorepo con Turborepo + pnpm✅ Implementado
ADR-010AI Backend como microservicio propio✅ Implementado
ADR-011Multi-portal frontend (Creator Studio)✅ Implementado
ADR-012Guide Quality Module con versionado snapshot✅ Implementado