Instruction file imported from AlexAviles345/Gestor-Documental-Tipo-Google (
.cursor/rules/vault.mdc). Copyright stays with the author.
Vault — Contexto para IAs
Qué es este proyecto
Sistema documental tipo Google Drive. Monorepo NX con microservicios NestJS y microfrontends Next.js.
Estructura del monorepo
| App / Lib | Descripción |
|---|---|
apps/microfrontends/mfe-main |
Shell host, Drive, Auth, Subida |
apps/microfrontends/mfe-word |
Editor TipTap para documentos |
apps/microfrontends/mfe-excel |
Editor FortuneSheet para hojas de cálculo |
apps/microservicios/gateway |
API Gateway — único punto de entrada HTTP |
apps/microservicios/svc-auth |
Autenticación, tokens, roles |
apps/microservicios/svc-main |
Drive, storage, permisos, moderación |
apps/microservicios/svc-billing |
Suscripciones y pagos |
apps/microservicios/svc-word |
CRDT texto, WebSocket Yjs, export DOCX |
apps/microservicios/svc-excel |
CRDT celdas, WebSocket Yjs, export XLSX |
libs/shared-prisma |
Schema Prisma + cliente (una sola DB) |
libs/shared-auth |
Guards JWT reutilizables |
libs/shared-logger |
Winston Logger Híbrido (Consola + Archivos) |
libs/shared-yjs |
Protocolo Yjs compartido |
libs/shared-types |
DTOs e interfaces TypeScript |
libs/shared-ui |
Componentes y utilidades compartidas (apiClient, deduper) |
libs/shared-config |
ESLint, TypeScript base |
Reglas obligatorias
Backend
- Todo ID BigInt lleva
@db.BigInten Prisma - INET lleva
@db.Ineten Prisma - Los MFEs NUNCA llaman a MinIO directamente
- El gateway NO tiene lógica de negocio
- Cada servicio solo toca sus propias tablas de DB
- Las exportaciones y ZIPs NUNCA van en API Routes de Next.js
- Streams para todo archivo/exportación, nunca buffers completos en memoria
Documentación
- Nivel de Código: A medida que implementes lógica, documenta las funciones complejas usando JSDoc en el propio código (
.ts). - Nivel Funcional: No agregues detalles profundos de implementación en
AGENTS.md. En su lugar, actualiza el archivo.mdcorrespondiente en.docs/05-modules/con decisiones de diseño, flujos o arquitectura conforme vayas construyendo los módulos. - Swagger (OpenAPI): Es OBLIGATORIO que todos los endpoints y controladores estén documentados con
@ApiTags,@ApiOperation,@ApiResponse, y que todo DTO tenga sus propiedades decoradas con@ApiProperty. El Gateway consolidará esta documentación. - Evolución Arquitectónica: Sigue fielmente la arquitectura y estándares definidos en
.docs/. Sin embargo, tienes autonomía: si encuentras una mejor forma de implementar algo o surge una funcionalidad no prevista, puedes hacerlo. En esos casos, tu obligación inquebrantable es actualizar o crear la documentación pertinente en.docs/para reflejar la nueva realidad del sistema. - Modificaciones de Base de Datos: Debes ceñirte al modelo documentado lo más fielmente posible. Sin embargo, si para implementar una funcionalidad es estrictamente necesario agregar un nuevo campo, tabla o relación, tienes la autonomía para hacerlo. La única condición innegociable es que, en el mismo paso, actualices: el
schema.prisma, los scripts de poblado enlibs/shared-prisma/prisma/seeds/(si impacta catálogos o datos iniciales), y la documentación visual (diagrama Mermaid) junto con el diccionario de datos en.docs/01-architecture/entity-relationship.md.
Frontend
- Los editores (TipTap, FortuneSheet) siempre con
ssr: false - Los MFEs nunca llaman a svc-word o svc-excel por HTTP para colaboración
- La colaboración va siempre por WebSocket directo (bypass gateway)
- Toda petición HTTP usa
apiClient.tsy toda mutación usauseRequestDeduperpara evitar saturación.
Seguridad
- Todo endpoint privado requiere
JwtAuthGuard - Los IDs internos nunca se exponen en URLs públicas (usar
external_idopublic_share_token) - Las contraseñas NUNCA se guardan en texto plano en audit_log
- Guards en
shared-auth, nunca reimplementar en servicios individuales - Payloads altamente sensibles deben encriptarse desde el FE con
{ encrypt: true }(Gateway los desencripta).
Auditoría
- Los eventos de negocio de alto impacto se deben guardar en
audit_logde forma EXPLÍCITA pero NO INVASIVA. - No ensucies la lógica de tus servicios (Services). En su lugar, usa el decorador
@AuditAction('NOMBREDELACCION')y@UseInterceptors(AuditInterceptor)a nivel de Controlador. - No inundar el Audit Log con operaciones masivas como creación o lectura de archivos. Para historial de archivos usa
item_versionsy para vistas usaitem_recents. - Los errores técnicos y stack traces van en
SharedLoggerService(Winston), nunca usarconsole.log. - FILE_PREVIEWED no se audita (demasiado ruido), se usa
item_recents.
Entornos y Variables de Configuración
- Desarrollo Local (Monorepo): Se utiliza un único archivo
.enven la raíz del proyecto (copiado de.env.example). Nx y NestJS leen este archivo global al ejecutarpnpm run start:base, proveyendo variables (ej.DATABASE_URL) a todos los servicios sin necesidad de duplicarlas. No anidar archivos.enven librerías compartidas (ej.libs/shared-prisma). - Nuevos Servicios: Si creas un nuevo microservicio o microfrontend, DEBES crear su respectivo archivo
.env.exampleinterno. Este actúa como contrato de despliegue a producción, documentando exactamente qué variables necesita ese contenedor aislado (incluyendoDATABASE_URLsi se conecta a Prisma). - Nuevas Funcionalidades: Si agregas una funcionalidad que requiere una nueva variable, actualiza el
.env.exampledel servicio correspondiente Y TAMBIÉN el.env.examplemaestro en la raíz. Nunca asumas que las variables simplemente "existirán".
Índice de documentación
Toda la documentación técnica vive en .docs/. Usar este índice para saber
dónde buscar cada tipo de información.
.docs/00-overview/ — Visión general
| Archivo | Contenido |
|---|---|
vision.md |
Qué es Vault, para quién, qué problema resuelve |
principles.md |
11 principios de arquitectura no negociables |
glossary.md |
Glosario de términos del dominio (CRDT, Room, Delta, etc.) |
.docs/01-architecture/ — Arquitectura
| Archivo / Carpeta | Contenido |
|---|---|
entity-relationship.md |
Modelo ER completo: 25 tablas, diagrama Mermaid, doc por tabla |
c4/context.md |
Diagrama C4 nivel contexto |
c4/container.md |
Diagrama C4 nivel contenedor |
c4/component.md |
Diagrama C4 nivel componente |
c4/deployment.md |
Diagrama C4 de despliegue |
decisions/ADR-0001-*.md |
ADR: WebSocket Gateway sobre HocusPocus |
decisions/ADR-0002-*.md |
ADR: Una sola DB compartida |
decisions/ADR-0003-*.md |
ADR: MinIO sobre S3 directo |
standards/code-architecture.md |
Estructura interna de código (backend NestJS + frontend Next.js) |
standards/api-guidelines.md |
Convenciones de API REST |
standards/module-contract.md |
Contrato de módulos (qué debe tener cada módulo) |
standards/branching-conventions.md |
Estrategia de ramas Git |
standards/security-baseline.md |
Línea base de seguridad |
standards/observability-baseline.md |
Línea base de observabilidad |
standards/i18n-guidelines.md |
Estándar de Internacionalización (JSON + MDX) |
.docs/02-api/ — API
| Archivo / Carpeta | Contenido |
|---|---|
openapi/gateway.yaml |
Spec OpenAPI del gateway |
openapi/services/svc-auth.yaml |
Spec OpenAPI de svc-auth |
openapi/services/svc-billing.yaml |
Spec OpenAPI de svc-billing |
openapi/services/svc-main.yaml |
Spec OpenAPI de svc-main |
openapi/services/svc-word.yaml |
Spec OpenAPI de svc-word |
openapi/services/svc-excel.yaml |
Spec OpenAPI de svc-excel |
postman/README.md |
Instrucciones de colecciones Postman |
.docs/03-runbooks/ — Runbooks operativos
| Archivo | Contenido |
|---|---|
local-dev.md |
Setup del entorno de desarrollo local |
entrega-evaluadores.md |
Entrega final: clone/ZIP, .env adjunto, prueba local del evaluador |
qa-deploy.md |
Deploy a QA / staging |
incident-response.md |
Respuesta a incidentes |
create-new-app.md |
Creación de nuevos microservicios o microfrontends |
docker-compose.md |
Infraestructura local (Docker Compose) |
.docs/04-product/ — Producto
| Archivo | Contenido |
|---|---|
roadmap.md |
Roadmap general del producto |
implementation-plan.md |
Plan de implementación detallado por fases (stack, Yjs, servicios) |
tenants-strategy.md |
Estrategia de multi-tenancy |
figma-links.md |
Links a diseños en Figma |
.docs/05-modules/ — Módulos funcionales
| Archivo | Contenido |
|---|---|
user/drive.md |
Drive: explorador de archivos |
user/upload-storage.md |
Upload, deduplicación, cuota |
user/editor-word.md |
Editor Word colaborativo (TipTap + Yjs) |
user/editor-excel.md |
Editor Excel colaborativo (FortuneSheet + Yjs) |
user/sharing-permissions.md |
Compartir archivos, ACL, links públicos |
user/comments-mentions.md |
Comentarios y menciones |
user/sidebar-views.md |
Vistas laterales: Favoritos, Recientes y Papelera |
user/versions.md |
Historial de versiones |
user/billing.md |
Suscripciones, pagos, métodos de pago |
user/settings.md |
Preferencias de usuario |
user/notifications.md |
Notificaciones Push (SSE y Redis Pub/Sub) |
admin/dashboard.md |
Dashboard de administración |
admin/user-management.md |
Gestión de usuarios |
admin/moderation.md |
Moderación y reportes de abuso |
admin/audit-log.md |
Auditoría de eventos |
admin/plans-management.md |
Gestión de planes de suscripción |
system/gateway.md |
API Gateway (Proxy, Rate Limit, Auth global) |
system/auth.md |
Autenticación, OAuth 2.0 y Tokens |
.docs/06-checklists/ — Validaciones
| Archivo | Contenido |
|---|---|
pr-checklist.md |
Lista de revisión para Pull Requests |
db-migration-checklist.md |
Lista de revisión para cambios en Base de Datos |
.docs/07-prompts/ — Prompts prefabricados
| Archivo | Contenido |
|---|---|
create-new-module.md |
Prompt maestro para generar módulos completos |
add-new-feature.md |
Prompt para agregar funcionalidad a un módulo existente |
fix-bug.md |
Prompt quirúrgico para depuración y solución de errores |
plan-module-architecture.md |
Prompt de análisis y diseño arquitectónico previo al código |
generate-c4-diagram.md |
Prompt para actualizar/crear diagramas C4 |
.docs/08-templates/ — Plantillas
| Archivo | Contenido |
|---|---|
adr-template.md |
Plantilla para Decisiones Arquitectónicas |
module-docs-template.md |
Plantilla para documentar módulos funcionales |
Stack
NX · Next.js 14 · next-intl · NestJS · Prisma · PostgreSQL · MinIO · Redis · BullMQ · Yjs · WebSockets
Flujo de Trabajo (Workflow) para IAs
Cuando recibas una solicitud para implementar o modificar una funcionalidad, y no tengas el contexto completo, sigue estrictamente estos pasos:
- Entender el Contexto: Revisa el índice de documentación en este archivo y lee el(los) archivo(s)
.mdde.docs/que correspondan al módulo o la arquitectura en cuestión. - Revisar Código Existente: Antes de escribir código nuevo, busca en el monorepo (especialmente en
libs/) si ya existe un componente, guard, o utilidad que resuelva el problema. (No reinventes la rueda). - Planificar (Si es necesario): Si la solicitud implica cambios arquitectónicos o la creación de un nuevo microservicio/microfrontend, presenta primero un plan de implementación detallado para aprobación.
- Implementar: Escribe el código siguiendo fielmente las Reglas obligatorias de este documento (ej. BigInt, Guards, etc.).
- Documentar: Como paso final obligatorio, agrega JSDoc al código complejo y actualiza los archivos Markdown pertinentes en
.docs/reflejando tus cambios.
Skills personalizadas
Si existe .ai/skills/<tu-nombre>/ (ej: .ai/skills/claude/, .ai/skills/cursor/),
lee los archivos .md de esa carpeta como instrucciones adicionales específicas
para ti. Estas skills son configuradas por cada usuario y no se suben al repositorio.
Ver .ai/skills/README.md para más detalles.