
Capacidades
- Chat en tiempo real
- Búsqueda vectorial
- Colas de mensajes
- Almacenamiento S3
Frontend
Backend
AdoptaUnPeludo
CompletadoAdopta un Peludo conecta protectoras con personas que quieren adoptar. Las protectoras publican fichas de animales y los adoptantes buscan, filtran, guardan favoritos y contactan por chat. Es un proyecto de equipo con backend Node en arquitectura hexagonal y varios microservicios, y frontend React desplegado con Docker.
El reto
Las funcionalidades que dan valor —chat, notificaciones, emails, asistente— son justo las que no pueden bloquear una petición HTTP ni tumbar la aplicación si fallan. La solución fue sacarlas del núcleo y comunicarlas por mensajería asíncrona.
Implementación
Arquitectura hexagonal con microservicios
El dominio queda aislado detrás de puertos y adaptadores, y las responsabilidades transversales —notificaciones, email, asistente, monitorización de errores— viven en servicios independientes que hablan por RabbitMQ.
Chat y notificaciones en tiempo real
Un servicio de WebSockets dedicado mantiene la conversación en vivo entre adoptante y protectora y empuja avisos de eventos como nuevos mensajes o favoritos, sin que la API principal tenga que sostener las conexiones.
Asistente con búsqueda vectorial
Un chatbot construido con LangChain resuelve dudas sobre la plataforma consultando por similitud una base de datos vectorial de embeddings, en vez de responder solo con el prompt.
Sesión con access y refresh en cookies
Autenticación JWT con tokens de acceso y de refresco en cookies, renovados por middleware, y Auth0 con acceso mediante Google para protectoras y adoptantes.
Imágenes en S3
Las fotos de los animales se almacenan en un bucket de S3 y se sirven desde ahí, manteniendo la API sin estado y sin ficheros pegados al servidor.
Frontend con React Query
SPA en React con Vite y Tailwind, con React Query gestionando el estado de servidor —caché, revalidación y estados de carga— en lugar de un store global.
Todo el stack en Docker
Cada servicio va contenedorizado y el conjunto se levanta con un único docker compose, incluyendo datos de prueba con más de un centenar de animales para poder trabajar desde el primer minuto.