+31648934831 hello@manualninja.com

Especificaciones técnicas

Una arquitectura RAG moderna con visión de IA.

Arquitectura de un vistazo

ManualNinja es una aplicación RAG multi-tenant con un backend en Python, un frontend SPA en React, una base de datos PostgreSQL y un almacén vectorial Qdrant. Los PDFs se analizan, dividen, transforman en embeddings y se sirven como respuestas citadas a través de una interfaz de chat. La plataforma ahora incluye visión de IA para análisis de imágenes, inicio de sesión social con OAuth y facturación de suscripción con Stripe.

API backend
FastAPI + Uvicorn (Python 3.13). Endpoints REST para autenticación, manuales, chat, facturación y administración. Autenticación basada en JWT con OAuth2.
Frontend
React 18 + Vite. Aplicación de una sola página con interfaz de chat, panel de administración, portal de facturación y dashboard de superadmin.
Base de datos
PostgreSQL 17. Almacena organizaciones, usuarios, manuales, sesiones de chat, seguimiento de uso y configuraciones ajustables.
Almacén vectorial
Qdrant 1.19. Búsqueda semántica sobre fragmentos de manuales con filtrado por organización.
Embeddings
BAAI/bge-small-en-v1.5 (384 dimensions, CPU). Local inference — no external embedding API calls.
LLM (texto)

API compatible con OpenAI. Modelo predeterminado: deepseek/deepseek-v3-0324. Configurable desde el dashboard de superadmin.
¿Quieres una IA local para mayor seguridad? Sin problema. Contáctanos

LLM (visión)
Novita AI vision model — google/gemma-3-27b-it. Analyzes uploaded images (device labels, error screens, nameplates) with OCR and structured extraction.
Extracción de PDF
PyMuPDF (fitz). División a nivel de página con conservación de metadatos para citas precisas.
Autenticación
Tokens JWT + Google OAuth 2.0 + LinkedIn OAuth 2.0 (OpenID Connect). Verificación por correo electrónico con SMTP configurable.
Pagos
Stripe — recurring subscriptions via Checkout, customer portal for self-service management, webhook-driven lifecycle events.
Proxy inverso
Caddy — automatic HTTPS via Let’s Encrypt, HTTP/2, HTTP/3 support.

Multi-tenencia & aislamiento

Cada organización cliente obtiene un espacio de trabajo completamente aislado:

  • Usuarios, manuales y sesiones de chat por organización
  • Qdrant payloads include org_id — vector search is always filtered
  • Límites por nivel: preguntas/mes, almacenamiento, longitud de pregunta, número de manuales
  • Todas las claves de integración (Stripe, Google, LinkedIn, LLM, SMTP, reCAPTCHA) son configurables por despliegue desde la interfaz de administración

Seguridad & protección de datos

ManualNinja está construido con la seguridad como prioridad absoluta. Cada capa del stack está reforzada para proteger tus datos y la confianza de tus clientes.

Cifrado de extremo a extremo

Todo el tráfico se sirve sobre HTTPS con TLS 1.2/1.3 a través de Caddy con certificados automáticos de Let’s Encrypt. No se aceptan conexiones en texto plano.

Autenticación segura

Autenticación basada en JWT con secretos robustos, hash de contraseñas con bcrypt, OAuth 2.0 con validación de estado protegida contra CSRF y códigos de intercambio de corta duración en lugar de tokens en URLs.

Protección contra fuerza bruta

Limitación de intentos de inicio de sesión (10 intentos por 5 minutos por IP), limitación de registro (3 por IP por día) y Google reCAPTCHA obligatorio en el registro público.

Aislamiento multi-tenant

Every database query and vector search is scoped by organization_id. No cross-tenant data leakage is possible — your manuals and chats are yours alone.

Cargas de archivos seguras

PDF uploads are validated by magic bytes, content type, and a 50 MB hard size limit. Files are stored with UUID names — no path traversal possible.

Webhooks verificados

Stripe payment webhooks are always signature-verified. No unauthenticated payment events are ever processed — the system fails closed if the secret is missing.

Solo servicios internos

The FastAPI backend and Qdrant vector database bind to 127.0.0.1 only. They are never directly accessible from the internet — all external traffic goes through the Caddy reverse proxy.

Verificación por correo electrónico

El registro requiere verificación por correo electrónico con tokens de duración limitada (24 horas de validez). Las cuentas no verificadas no pueden iniciar sesión.

Registro de auditoría

Todas las acciones de admin y superadmin — creación de organizaciones, gestión de usuarios, cambios de configuración — se registran en una pista de auditoría dedicada para responsabilidad y cumplimiento.

¿Quieres verlo en acción?