Doplax.Dev
← Volver a proyectos
ChatGPT Clone

Capacidades

  • IA en streaming
  • Voz y transcripción
  • Generación de imágenes
  • Modelos en local

Frontend

AngularAngular
TypeScriptTypeScript
TailwindTailwind

Backend

NestJSNestJS
Node.jsNode.js
PostgreSQLPostgreSQL
OpenAIOpenAI
OllamaOllama

ChatGPT Clone

Completado

Aplicación fullstack que agrupa varios casos de uso de IA sobre un mismo backend: corrección ortográfica, traducción, discusión de pros y contras con respuesta en streaming, texto a voz, transcripción de audio, generación y variación de imágenes, y un asistente conversacional con hilos persistentes. Frontend Angular 19, backend NestJS con PostgreSQL.

El reto

Meter una API key de OpenAI en un frontend no es una opción, y cada capacidad del modelo tiene su propia forma de responder: JSON, texto, streaming, audio o imagen. El objetivo era una arquitectura donde añadir un caso de uso nuevo fuese añadir un archivo, no tocar media aplicación.

Implementación

  • El backend es el único que ve la API key

    NestJS actúa de proxy: el navegador nunca toca OpenAI directamente. Cada capacidad vive aislada en su propio caso de uso, así que añadir uno nuevo no obliga a tocar el resto.

  • Streaming token a token

    Las respuestas largas se reenvían al cliente conforme llegan mediante un pipe propio sobre el stream de OpenAI, que además corta limpiamente si el cliente aborta la petición en mitad de la generación.

  • Multimodal, no solo texto

    Ortografía, traducción y pros/contras en texto; texto a voz y transcripción de audio con subida de fichero validada por tipo y tamaño; y generación y variación de imágenes.

  • Asistente con hilos persistentes

    Además del chat por completions, un módulo aparte usa la Assistants API creando hilos que mantienen el contexto de la conversación entre peticiones.

  • Proveedor intercambiable con Ollama

    Los mismos casos de uso tienen una implementación alternativa contra Ollama para correr modelos en local, y un endpoint público informa de qué proveedores están disponibles en cada despliegue.

  • Historial persistido en PostgreSQL

    Conversaciones y mensajes se guardan con TypeORM, con autenticación JWT, recuperación de contraseña por email y usuarios propios de la aplicación.

  • API endurecida

    Rate limiting con Throttler, cabeceras de seguridad con Helmet, compresión, validación de variables de entorno con Joi al arrancar y DTOs validados con class-validator.