Skip to content

diegofgomezz/Docmind

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

105 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DocMind 🧙‍♂️

Plataforma inteligente de búsqueda y gestión documental con IA

DocMind centraliza, clasifica y comparte documentación corporativa de forma ágil. Combina extracción de texto (Apache Tika), análisis con LLM (Ollama / OpenAI), búsqueda híbrida (léxica + semántica + fuzzy) y un sistema granular de roles y permisos, todo envuelto en una interfaz moderna con animaciones fluidas.


Índice


Requisitos previos

Herramienta Versión mínima Notas
Java 21 El wrapper mvnw se encarga de Maven
Node.js 18 Se recomienda 22 LTS
npm 9+ Incluido con Node
Ollama (opcional) Solo si se quiere IA local: ollama pull qwen2.5:3b && ollama pull nomic-embed-text
Docker + Docker Compose (opcional) Solo para ejecución contenerizada

Ejecución rápida (desarrollo local)

1. Backend (Spring Boot · puerto 8081)

cd docMind/backend
./mvnw spring-boot:run

Por defecto arranca con H2 embebido (sin dependencias externas). La base de datos se crea en backend/data/docmind.mv.db.

Al primer inicio se genera un usuario administrador global:

  • Email: admin@docmind.local
  • Contraseña: admin123

También se insertan 15 documentos de ejemplo con texto, categorías y metadatos.

2. Frontend (Vite + React · puerto 5173)

cd docMind/frontend
npm install
npm run dev

Abre http://localhost:5173 en el navegador.

3. Ollama (IA local · opcional)

# Instalar Ollama: https://ollama.com
ollama pull qwen2.5:3b          # Modelo de chat
ollama pull nomic-embed-text    # Modelo de embeddings
ollama serve                    # Puerto 11434

Sin Ollama, la subida de documentos funciona pero sin resumen/tags IA ni búsqueda semántica.


Ejecución con Docker Compose

cd docMind
docker compose up -d
Servicio Imagen Puerto Descripción
backend maven:3.9.9-eclipse-temurin-21 8081 Spring Boot API
frontend node:22-alpine 5173 Vite dev server
postgres postgres:15 5455 → 5432 Base de datos PostgreSQL
pgadmin dpage/pgadmin4 5055 → 80 Interfaz de administración de BD

pgAdmin: http://localhost:5055admin@admin.com / admin


Variables de entorno

Backend (application.properties + env vars)

Variable Valor por defecto Descripción
DOCMIND_DB_URL jdbc:h2:file:./data/docmind;... URL JDBC de la base de datos
DOCMIND_DB_USER sa Usuario de BD
DOCMIND_DB_PASSWORD (vacío) Contraseña de BD
DOCMIND_DB_DRIVER org.h2.Driver Driver JDBC
DOCMIND_JPA_DIALECT org.hibernate.dialect.H2Dialect Dialecto de Hibernate
DOCMIND_DB_POOL_SIZE 10 Pool máximo de conexiones HikariCP
DOCMIND_DB_SSL_MODE disable Modo SSL para PostgreSQL
DOCMIND_FLYWAY_ENABLED false Activar migraciones Flyway
DOCMIND_AUTH_MODE local Modo de autenticación: local o supabase
DOCMIND_JWT_SECRET docmind-super-secret-key-... Clave secreta para firmar JWT
DOCMIND_JWT_EXPIRATION_MS 86400000 (24 h) Tiempo de expiración del token JWT
DOCMIND_SUPABASE_URL (vacío) URL del proyecto Supabase
DOCMIND_SUPABASE_ANON_KEY (vacío) Anon key de Supabase
DOCMIND_SUPABASE_SERVICE_ROLE_KEY (vacío) Service role key de Supabase
DOCMIND_SUPABASE_VECTOR_ENABLED true Búsqueda vectorial con pgvector
DOCMIND_SUPABASE_VECTOR_TOP_K 50 Resultados máximos de búsqueda vectorial
DOCMIND_SUPABASE_VECTOR_MIN_SIMILARITY 0.20 Similitud coseno mínima

Configuración IA:

Variable Valor por defecto Descripción
llm.provider ollama Proveedor LLM: ollama u openai
docmind.ollama.base-url http://localhost:11434 URL de Ollama
docmind.ollama.chat-model qwen2.5:3b Modelo de chat
docmind.ollama.embedding-model nomic-embed-text Modelo de embeddings
llm.api.model gpt-4o-mini Modelo OpenAI (si se usa)

Admin global:

Variable Valor por defecto
docmind.admin.email admin@docmind.local
docmind.admin.username admin
docmind.admin.password admin123

Frontend

Variable Valor por defecto Descripción
VITE_API_BASE_URL http://localhost:8081 URL base del backend
VITE_GLOBAL_ADMIN_LOGIN admin@docmind.local Login rápido de admin (UI)

Arquitectura del proyecto

docMind/
├── compose.yaml                           # Docker Compose
├── backend/                               # Spring Boot (Java 21)
│   ├── pom.xml
│   ├── mvnw / mvnw.cmd
│   ├── uploads/                           # Archivos subidos (disco)
│   ├── data/                              # Base H2 embebida
│   └── src/main/java/com/hackUdc2026/docMind/
│       ├── config/
│       │   ├── SecurityConfig.java            # Spring Security, CORS, filtro JWT
│       │   ├── GlobalAdminConfig.java         # Seed del admin global al arrancar
│       │   ├── DocumentSeedConfig.java        # Seed de 15 documentos de ejemplo
│       │   ├── UserRoleConstraintConfig.java  # Sincroniza CHECK constraints de roles
│       │   ├── ManagedTagConstraintConfig.java
│       │   └── security/
│       │       ├── JwtAuthenticationFilter.java   # Extrae JWT → SecurityContext
│       │       └── AuthenticatedUser.java         # Principal: (id, username, role)
│       ├── controller/
│       │   ├── UserController.java            # Auth + gestión de usuarios
│       │   ├── DocumentController.java        # CRUD docs, upload, share, IA, download
│       │   ├── FolderController.java          # CRUD carpetas, mover documentos
│       │   └── ManagedTagController.java      # CRUD etiquetas gestionadas
│       ├── service/
│       │   ├── UserService.java               # Auth, roles, perfil, operaciones admin
│       │   ├── DocumentService.java           # Upload, búsqueda híbrida, acceso, sharing
│       │   ├── FolderService.java             # Operaciones de carpetas
│       │   ├── ManagedTagService.java         # Etiquetas con scope global/departamento
│       │   ├── JwtService.java                # Generación y validación JWT (JJWT)
│       │   ├── LLMService.java                # Integración Ollama y OpenAI
│       │   ├── DocumentAnalysisService.java   # Análisis IA, consultas, categorías
│       │   ├── DocumentPostProcessingService.java  # Enriquecimiento asíncrono tras upload
│       │   ├── DocumentFileProcessor.java     # Extracción de texto (TXT, PDF)
│       │   ├── SemanticSearchService.java     # Búsqueda por embeddings
│       │   └── SupabaseAuthService.java       # Integración Supabase Auth
│       ├── repository/                        # Spring Data JPA Repositories
│       └── model/
│           ├── entities/                      # Entidades JPA + enums
│           ├── dto/                           # Objetos de transferencia
│           └── exceptions/                    # Excepciones de dominio
└── frontend/                              # React + TypeScript + Vite
    ├── package.json
    ├── vite.config.ts
    ├── tailwind.config.js
    ├── index.html
    └── src/
        ├── App.tsx                        # Componente raíz (flujo auth, vistas)
        ├── main.tsx                       # Punto de entrada
        ├── index.css                      # Estilos globales, liquid-glass tokens
        ├── components/
        │   ├── SplashScreen.tsx           # Pantalla de carga animada
        │   ├── AuthPage.tsx               # Login/Register a pantalla completa
        │   ├── Header.tsx                 # Barra superior con menú de usuario
        │   ├── Sidebar.tsx                # Navegación lateral con categorías
        │   ├── SearchBar.tsx              # Barra de búsqueda
        │   ├── DocumentList.tsx           # Lista paginada de documentos
        │   ├── DocumentCard.tsx           # Tarjeta individual de documento
        │   ├── DocumentDetail.tsx         # Vista detallada con preview
        │   ├── UploadModal.tsx            # Modal de subida de archivos
        │   ├── SettingsModal.tsx          # Configuración de la app
        │   ├── AccountModal.tsx           # Edición de perfil de usuario
        │   ├── PdfIframeViewer.tsx        # Visor de PDF en iframe
        │   ├── UiErrorBoundary.tsx        # Error boundary de UI
        │   └── ui/                        # Componentes shadcn/ui (Radix)
        ├── lib/
        │   ├── utils.ts                   # Utilidades (cn, etc.)
        │   ├── animations.ts              # Tokens de animación GSAP
        │   └── api/
        │       ├── http.ts                # Cliente HTTP base + gestión JWT
        │       ├── auth.ts                # Login, register, perfil, tipos
        │       ├── documents.ts           # CRUD docs, shares, tags, búsqueda
        │       ├── folders.ts             # CRUD carpetas
        │       ├── users.ts               # Gestión admin de usuarios
        │       └── rolePermissions.ts     # Gestión admin de permisos
        ├── types/
        │   └── document.ts                # Tipos de documento, categorías
        ├── data/
        │   ├── localSeed.ts               # Datos locales (localStorage)
        │   └── mockDocuments.ts           # Documentos mock
        └── hooks/
            └── use-mobile.ts              # Detección de pantalla móvil

Backend — API REST

Todos los endpoints (salvo login y register) requieren cabecera Authorization: Bearer <JWT>.

Autenticación y usuarios (/api/users)

Método Ruta Descripción Auth
POST /api/users/register Registrar nuevo usuario → devuelve JWT + perfil ❌ Pública
POST /api/users/login Login (usuario, email o username) → JWT + perfil ❌ Pública
GET /api/users/me Obtener perfil del usuario autenticado
PUT /api/users/me Actualizar perfil (nombre, email, teléfono, foto, contraseña)
GET /api/users Listar todos los usuarios ✅ Admin
PUT /api/users/{id}/role Asignar rol a un usuario (no puede asignar ADMIN) ✅ Admin
PUT /api/users/{id}/org Actualizar departamento y tipo de persona ✅ Admin
GET /api/users/role-permissions Listar configuración de permisos por rol ✅ Admin
PUT /api/users/role-permissions/{role} Actualizar permisos de un rol ✅ Admin

Documentos (/api/documents)

Método Ruta Descripción Auth
GET /api/documents Lista paginada de documentos accesibles (page, size)
GET /api/documents/search?q=... Búsqueda híbrida (léxica + semántica + fuzzy)
GET /api/documents/category/{cat} Documentos por categoría
POST /api/documents/upload Subir documento (multipart: file, title, author, category)
PUT /api/documents/{id} Actualizar campos del documento
DELETE /api/documents/{id} Eliminar documento (propietario o admin)
GET /api/documents/{id}/content Obtener contenido del archivo (inline)
GET /api/documents/{id}/download Descargar archivo (attachment)
POST /api/documents/{id}/analyze Lanzar análisis IA del documento
POST /api/documents/{id}/query Preguntar a la IA sobre un documento
POST /api/documents/{id}/share Compartir documento (por username o email)
GET /api/documents/pending-shares Ver invitaciones de compartición pendientes
POST /api/documents/shares/{shareId}/accept Aceptar invitación
POST /api/documents/shares/{shareId}/reject Rechazar invitación
GET /api/documents/{id}/access Ver quién tiene acceso al documento
GET /api/documents/deletions Log de auditoría de eliminaciones
PUT /api/documents/{id}/managed-tags Asignar etiquetas gestionadas a un documento

Carpetas (/api/folders)

Método Ruta Descripción Auth
GET /api/folders Listar carpetas del usuario
POST /api/folders Crear carpeta (nombre, color)
PATCH /api/folders/{id} Renombrar carpeta
DELETE /api/folders/{id} Eliminar carpeta
POST /api/folders/{id}/move Mover documentos a una carpeta
POST /api/folders/unassign Quitar documentos de todas las carpetas

Etiquetas gestionadas (/api/managed-tags)

Método Ruta Descripción Auth
GET /api/managed-tags Listar etiquetas visibles (globales + departamento del usuario)
POST /api/managed-tags Crear etiqueta (nombre, color, global/departamento) ✅ Admin/Manager
DELETE /api/managed-tags/{id} Eliminar etiqueta (se quita de todos los documentos) ✅ Admin/Manager

Modelo de datos

User

Campo Tipo Descripción
id Long (PK) ID autoincremental
username String Nombre de usuario
email String Email único
password String BCrypt (o {SUPABASE_AUTH})
phone String Teléfono (opcional)
photo String URL de foto (opcional)
role UserRole enum Rol asignado
department Department enum Departamento
personType PersonType enum Tipo de persona

Document

Campo Tipo Descripción
id Long (PK) ID autoincremental
title String Título del documento
fileName String Nombre original del archivo
filePath String Ruta en disco
fileType String Tipo MIME
extractedText TEXT Texto extraído (Apache Tika)
author String Autor
category String Categoría (inferida por IA o manual)
summary TEXT Resumen generado por LLM
tags String Tags generados por LLM (CSV)
metadata TEXT Metadatos extraídos por Tika
managedTags TEXT Etiquetas gestionadas (CSV de IDs)
uploadedAt LocalDateTime Fecha de subida
visibilityRole UserRole Visibilidad por rol
uploadedByUserId Long FK al usuario que subió
sharedWithUserIds TEXT CSV de IDs de usuarios (legacy)
sharedWithEmails TEXT CSV de emails (legacy)

DocumentShare

Campo Tipo Descripción
id Long (PK) ID autoincremental
document Document (FK) Documento compartido
ownerUserId Long ID del propietario
targetUserId Long ID del destinatario
targetUserIdResolved Long ID resuelto (nullable)
targetIdentifier String Username o email del destinatario
status ShareStatus enum PENDING, ACCEPTED, REJECTED
createdAt LocalDateTime Fecha de creación
respondedAt LocalDateTime Fecha de respuesta

Folder

Campo Tipo Descripción
id Long (PK) ID autoincremental
name String Nombre de la carpeta
color String Color hex
documents Set<Document> Relación ManyToMany

ManagedTag

Campo Tipo Descripción
id Long (PK) ID autoincremental
name String (max 60) Nombre de la etiqueta
colorHex String (7) Color hex (default: #8B5CF6)
department Department Departamento (null = global)
isGlobal boolean Si es visible para todos
createdByUserId Long ID del creador
createdAt LocalDateTime Fecha de creación

RolePermissionConfig

Campo Tipo Descripción
id Long (PK) ID autoincremental
role UserRole (unique) Rol
permissions Set<String> Permisos asignados

Enums

Enum Valores
UserRole ADMIN, HR_ADMIN, FINANCE_MANAGER, DELIVERY_DIRECTOR, PROJECT_MANAGER, TECH_LEAD, SENIOR_CONSULTANT, CONSULTANT, QA, DEVOPS, SALES_ACCOUNT, CLIENT_VIEWER, INTERN, EXTERNAL_COLLABORATOR, MANAGER, EDITOR, VIEWER
Department ENGINEERING, PRODUCT, SALES, MARKETING, FINANCE, HR, LEGAL, OPERATIONS, EXTERNAL
PersonType INTERNAL_STAFF, MANAGER, EXECUTIVE, CONTRACTOR, INTERN, PARTNER
ShareStatus PENDING, ACCEPTED, REJECTED

Roles y permisos

Permisos disponibles

READ · WRITE · EXECUTE · DELETE · SHARE · MANAGE_USERS · MANAGE_ROLES · AUDIT

Matriz de permisos por defecto

Rol Permisos
ADMIN READ, WRITE, EXECUTE, DELETE, MANAGE_USERS, MANAGE_ROLES, AUDIT
HR_ADMIN READ, WRITE
FINANCE_MANAGER READ, WRITE, EXECUTE
DELIVERY_DIRECTOR READ, WRITE, EXECUTE, DELETE
PROJECT_MANAGER READ, WRITE, EXECUTE
TECH_LEAD READ, WRITE, EXECUTE
SENIOR_CONSULTANT READ, WRITE
CONSULTANT READ, WRITE
QA READ, EXECUTE
DEVOPS READ, WRITE, EXECUTE
SALES_ACCOUNT READ, WRITE
CLIENT_VIEWER READ
INTERN READ
EXTERNAL_COLLABORATOR READ
MANAGER (legacy) READ, WRITE, EXECUTE
EDITOR (legacy) READ, WRITE
VIEWER (legacy) READ

Los permisos son editables en tiempo real por el administrador global desde el panel de admin. Los cambios se persisten en la tabla role_permission_configs.

Asignación automática de rol al registrarse

El rol se infiere a partir del departamento y tipo de persona seleccionados:

Condición Rol asignado
personType = EXECUTIVE o MANAGER DELIVERY_DIRECTOR
personType = INTERN INTERN
personType = CONTRACTOR / PARTNER + dept EXTERNAL EXTERNAL_COLLABORATOR
dept = HR HR_ADMIN
dept = FINANCE FINANCE_MANAGER
dept = ENGINEERING o PRODUCT CONSULTANT
Default VIEWER

Admin global

Se genera automáticamente al arrancar. Es el único usuario con rol ADMIN — este rol no puede asignarse a otros usuarios desde la API.


Control de acceso a documentos

Un usuario puede acceder a un documento si cumple al menos una de estas condiciones:

  1. Es el administrador global (rol ADMIN)
  2. Es el propietario del documento (uploadedByUserId)
  3. Tiene un DocumentShare aceptado (por targetUserId o targetIdentifier)
  4. Aparece en los campos legacy sharedWithUserIds o sharedWithEmails
  5. Su rol coincide con el visibilityRole del documento
  6. El documento no tiene visibilityRole definido (compatibilidad)

Flujo de compartición

Propietario comparte → Se crea DocumentShare (PENDING)
    → Destinatario ve la invitación en "Pendientes"
    → Acepta (ACCEPTED → obtiene acceso)
    → Rechaza (REJECTED → sin acceso)

IA y búsqueda

Análisis de documentos

  1. Extracción de texto: Apache Tika procesa el archivo (PDF, Office, CSV, TXT…) y extrae texto + metadatos
  2. Análisis LLM: El texto se envía al modelo de lenguaje que genera:
    • Resumen del contenido
    • Tags relevantes
    • Metadatos estructurados
  3. Inferencia de categoría (sistema multicapa):
    • Categoría especificada por el usuario → Análisis del contenido por palabras clave empresariales → Fallback por tipo de archivo

Categorías soportadas

Contratos · Facturas · Presupuestos · Informes · Fichas Técnicas · Documentación Legal · RRHH · Marketing · Proyectos · Otros

Búsqueda híbrida

La búsqueda combina múltiples estrategias y devuelve un ranking fusionado:

Estrategia Descripción
Léxica Scoring ponderado por campos: título, resumen, tags, contenido, categoría, metadatos, autor, nombre de archivo
Semántica Embeddings generados con Ollama (nomic-embed-text) o Supabase pgvector; similitud coseno
Fuzzy Distancia de Levenshtein para tolerancia a errores tipográficos
Sinónimos Expansión automática de términos de búsqueda con sinónimos contextuales

Consulta conversacional

Endpoint POST /api/documents/{id}/query — permite hacer preguntas en lenguaje natural sobre un documento específico. El LLM responde usando el contenido extraído como contexto.

Proveedores LLM soportados

Proveedor Modelo por defecto Configuración
Ollama (local) qwen2.5:3b (chat), nomic-embed-text (embeddings) llm.provider=ollama
OpenAI gpt-4o-mini llm.provider=openai + API key

Frontend — Funcionalidades

Splash Screen

Pantalla de inicio animada con GSAP:

  • Logo con animación de entrada (scale + rotateY + bounce)
  • Nombre de la aplicación con blur-to-focus
  • Barra de carga progresiva
  • Fade-out con blur al completarse

Autenticación (pantalla completa)

Layout dividido: panel izquierdo con branding + panel derecho con formulario.

  • Login: por nombre de usuario o email + contraseña
  • Register: nombre, email, departamento, tipo de persona, contraseña
  • Tabs animados con indicador pill deslizante (GSAP)
  • Formulario con stagger de campos (Framer Motion)
  • Acceso rápido de administrador global
  • Sesión persistida con JWT en localStorage; revalidación automática al recargar

Panel principal

  • Sidebar: navegación por secciones (Buscar, Recientes, Favoritos, Subidos, Admin) y categorías (Contratos, Facturas, Informes, Presupuestos, Fichas Técnicas, Documentación Legal)
  • Header: menú de usuario con perfil, configuración y cerrar sesión
  • Barra de búsqueda: búsqueda en tiempo real con filtros avanzados

Gestión de documentos

  • Subida: drag-and-drop o selector de archivos; análisis IA automático tras la subida
  • Lista paginada: vista en grid/lista con paginación server-side
  • Tarjeta de documento: muestra título, categoría, tipo, tags, autor, fecha, preview
  • Vista detallada: preview del archivo (PDF inline, texto), metadatos, resumen IA, tags, historial de acceso
  • Edición: renombrar, cambiar categoría, editar autor
  • Eliminación: solo propietario o admin
  • Descarga: descarga directa del archivo original

Carpetas

  • Crear, renombrar y eliminar carpetas
  • Drag-and-drop de documentos a carpetas
  • Mover/desasignar documentos entre carpetas

Compartición de documentos

  • Compartir por username o email
  • Panel de invitaciones pendientes
  • Aceptar/Rechazar invitaciones
  • Visor de lista de acceso por documento

Etiquetas gestionadas

  • Crear etiquetas con nombre y color personalizado
  • Etiquetas globales (visibles para todos) o por departamento
  • Asignar/desasignar etiquetas a documentos
  • Filtrar documentos por etiqueta

Filtros y ordenación

Filtro Opciones
Categoría Las 6 categorías principales + Otros
Tipo de archivo PDF, TXT, CSV, etc.
Rango de fecha Hoy, Semana, Mes, Año, Todas
Autor Selector dinámico
Etiqueta gestionada Selector dinámico
Solo favoritos Toggle
Solo con archivo físico Toggle
Solo con tags Toggle
Ordenación Más recientes, Más antiguos, A-Z, Z-A

Panel de administración (Admin + Managers)

  • Gestión de usuarios: listar todos, asignar roles, cambiar departamento/tipo
  • Editor de permisos por rol: ver y modificar permisos de cada rol en tiempo real
  • Gestión de etiquetas: crear/eliminar etiquetas globales o de departamento

Diseño y UX

  • Estilo liquid-glass: fondos translúcidos con backdrop-blur y bordes sutiles
  • Paleta inspirada en Notion: #37352f (texto), #0A4B66 (acento), #2eaadc (enlace)
  • Animaciones con GSAP (entradas de sidebar, header, selección) y Framer Motion (transiciones de formulario, aparición de contenido)
  • Responsive: sidebar colapsable, layout adaptativo para móvil
  • Soporte para prefers-reduced-motion

Stack tecnológico

Backend

Tecnología Versión Uso
Java 21 Lenguaje principal
Spring Boot 4.0.3 Framework web
Spring Security Autenticación JWT, CORS
Spring Data JPA ORM (Hibernate)
H2 Database BD embebida para desarrollo
PostgreSQL 15 BD en producción
Flyway Migraciones de esquema
Apache Tika 2.9.1 Extracción de texto y metadatos
JJWT 0.12.6 Generación/validación de JWT
Lombok Reducción de boilerplate

Frontend

Tecnología Versión Uso
React 19.x Librería UI
TypeScript 5.9.x Tipado estático
Vite 7.x Bundler y dev server
Tailwind CSS 4.x Estilos utility-first
Radix UI Componentes headless (19 paquetes)
shadcn/ui Componentes estilizados sobre Radix
GSAP 3.14 Animaciones avanzadas
Framer Motion 12.x Animaciones declarativas
Lucide React Iconos SVG
Fuse.js 7.x Búsqueda fuzzy client-side
Recharts Gráficos y visualizaciones
React Hook Form + Zod Formularios con validación
date-fns 4.x Utilidades de fecha
Sonner Notificaciones toast
cmdk Paleta de comandos

Convenciones del proyecto

  • Git Flow: ramas derivadas desde main (feat-*, fix-*, etc.)
  • Conventional Commits: feat:, fix:, refactor:, docs:, etc.
  • Arquitectura MVC: backend con separación controller → service → repository
  • DTOs: comunicación frontend-backend mediante objetos de transferencia, nunca entidades directas

Migración a Supabase

Se soporta PostgreSQL en Supabase con pgvector para búsqueda semántica sin cambiar controladores ni repositorios JPA.

Guía completa: backend/SUPABASE_MIGRATION.md


Licencia

Este proyecto está liberado bajo la licencia MIT.

Escogemos MIT porque, al ser un proyecto nacido en un Hackathon, buscamos que sea Software Libre permisivo: cualquier individuo u organización puede tomar el trabajo, modificarlo para sus necesidades operativas (como conectar su propia RAG de IA) y usarlo libremente en entornos empresariales sin restricciones severas.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages