Este proyecto ha sido una experiencia excepcional para nuestro equipo. Desde el inicio tomamos una decisión de arquitectura que pudo parecer arriesgada: no utilizar una base de datos en el backend. En ese momento no había necesidad de almacenar datos de usuario centralizados y lo más importante era captar la respuesta inmediata del usuario. Mientras la documentación habitual asume cuentas, sesiones y persistencia en PostgreSQL o MongoDB, nosotros nos preguntamos por qué y qué datos realmente necesitaba persistir la aplicación entre dispositivos. La respuesta fue nada, y esa realización determinó todo lo que vino después.

La división en tres capas es la columna vertebral del sistema. Frontend se encarga de toda la interacción con el usuario, persistencia local y estado de la interfaz. Comprime imágenes antes de la subida, gestiona el flujo en múltiples pasos, guarda el historial en el dispositivo y renderiza resultados. Backend realiza una única función: transformar datos de imagen en datos de diagnóstico. Recibe la petición, construye el prompt, llama al LLM, parsea la respuesta y devuelve JSON estructurado. Sin estado, sin sesiones, sin base de datos. Capa AI es Claude Vision que procesa las imágenes con prompts cuidadosamente diseñados y devuelve información diagnóstica detallada. Cada capa tiene una única responsabilidad y mezclar funciones complicaría el sistema sin aportar beneficios.

La simplicidad en la interacción de datos guía nuestras decisiones. El historial y la configuración nunca abandonan el dispositivo del usuario. La clave de API atraviesa nuestro servidor pero no se almacena. El flujo de escaneo se organiza como una máquina de estados en lugar de pasos numerados. Cuando los pasos dependen de condiciones de ejecución, los números pierden sentido. Con estados como part, crop, media, mode, context, analyzing la UI solo representa el estado activo y el indicador de progreso se calcula dinámicamente según aparezca o no la selección de modo.

La arquitectura de almacenamiento se organiza en tres niveles según la duración de los datos. Session storage guarda banderas de consentimiento que expiran al cerrar el navegador. Para aplicaciones relacionadas con la salud preferimos que el usuario vuelva a aceptar activamente en cada sesión. Local storage guarda lo que debe persistir: historial de escaneos, preferencias de accesibilidad y la clave API. Finalmente hay una caché profunda embebida: cada entrada de historial almacena el diagnóstico completo con todas sus campos, tratamientos y recomendaciones. Esto aumenta el tamaño por elemento pero permite acceso offline real, esencial para usuarios rurales. El tamaño promedio de un escaneo ronda 20 a 30 KB y con un máximo razonable de entradas el consumo sigue muy por debajo del cupo típico del navegador.

La filosofía de endpoint único mantiene el backend simple. Un solo endpoint POST a /api/v1/analyze recibe imágenes y devuelve resultados estructurados. Las diferencias entre analizar una imagen, varias o video se resuelven con un parámetro de modo que adapta la construcción del prompt y el parseo de la respuesta. Múltiples endpoints habrían implicado lógica duplicada en cliente, validaciones repetidas y mayor complejidad de versión y documentación.

Optamos por que cada usuario proporcione su propia clave de API. Esta decisión es temporal mientras la aplicación está en pruebas, pero tiene ventajas claras. Transparencia en costes para el usuario, ausencia de almacenamiento de claves en nuestra infraestructura, caché operativo reducido y límites de cuota individuales que evitan que podamos generar facturas inesperadas. La desventaja es la fricción inicial que exige crear una cuenta con el proveedor de IA, algo asumible por usuarios avanzados pero a revisar para adopción masiva.

Al subir múltiples imágenes surge una duda importante: pertenecen a la misma planta o a plantas distintas. La IA no puede inferirlo con fiabilidad ya que ángulos diferentes pueden cambiar mucho la apariencia. Por eso la UI pregunta directamente. Modo mismo sujeto agrupa todas las imágenes en una sola petición para que el LLM sintetice la evidencia y entregue un único diagnóstico. Modo diferentes sujetos envía cada imagen por separado para diagnósticos independientes. Para video las frames extraídas por defecto se consideran mismo sujeto dado el carácter continuo de la grabación.

En el parsing de respuestas aprendimos a asumir imperfección. Aunque el prompt pida JSON puro, los LLM ocasionalmente envuelven la respuesta en bloques de markdown. El backend limpia esos marcadores y acepta tanto JSON crudo como JSON dentro de code blocks. Además cada campo tiene un fallback razonable para que una respuesta parcial sea preferible a una petición fallida. Salud por defecto a 0, severidad por defecto moderate, y así sucesivamente.

La arquitectura es en esencia una documentación de compensaciones. Renunciar a una base de datos centralizó privacidad y simplicidad a costa de sincronización entre dispositivos. Pedir una clave API al usuario añade fricción pero mejora transparencia y reduce complejidad operativa. Caché completa en el historial ocupa más espacio pero habilita uso offline crítico para ciertos usuarios. Endpoint único reduce código duplicado y facilita mantenimiento. Ninguna opción es universalmente correcta, sino adecuada a las restricciones: usuarios preocupados por privacidad, necesidad de acceso offline, sensibilidad al coste y un equipo de desarrollo pequeño.

El resultado es un sistema simple en sentido funcional. No simple porque sea trivial de construir sino porque cada componente cumple una sola función claramente definida. Frontend gestiona usuarios y experiencia, backend transforma datos, LLM aporta inteligencia, las capas de almacenamiento respetan la duración de los datos y el asistente de escaneo orquesta el flujo. Cada pieza es testeable y sustituible sin afectar a las demás. Esa claridad de intención hace el sistema mantenible.

En Q2BSTUDIO aplicamos estos principios en proyectos reales de desarrollo de software a medida y aplicaciones a medida integrando inteligencia artificial y prácticas de ciberseguridad. Somos especialistas en soluciones escalables y seguras y ofrecemos servicios cloud aws y azure junto con capacidades de servicios inteligencia de negocio y Power BI para transformar datos en decisiones accionables. Si desea explorar cómo la arquitectura sin estado puede encajar en su proyecto de IA empresarial visite nuestra página de inteligencia artificial en Servicios de inteligencia artificial en Q2BSTUDIO o descubra nuestras soluciones de desarrollo para aplicaciones y software a medida en Desarrollo de aplicaciones multicanal.

Palabras clave relevantes que aplicamos en nuestros proyectos: aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA y power bi. Si busca un partner que combine experiencia técnica y claridad arquitectónica para construir soluciones sostenibles, Q2BSTUDIO está listo para colaborar.

Fuente del proyecto disponible en GitHub y abierto a auditoría y mejoras por parte de la comunidad y clientes interesados en prácticas de ciberseguridad y pruebas de penetración.