Documentación del Proyecto

integration_instructions 1. Resumen Ejecutivo

El proyecto Vuelo consiste en la conceptualización, desarrollo e implementación de una plataforma de comunicación unificada omnicanal. El ecosistema combina un servidor de correo electrónico privado con un servidor de mensajería instantánea en tiempo real (XMPP), consumidos a través de una aplicación móvil nativa (Android).

El objetivo principal alcanzado fue lograr una sincronización perfecta de identidades: con un solo registro, el usuario obtiene su cuenta de correo (@vuelo.email) y su acceso al chat instantáneo, operando ambas bajo el mismo par de credenciales.

architecture 2. Arquitectura de Sistemas y Tecnologías

El stack tecnológico seleccionado garantiza escalabilidad, control total de los datos y alto rendimiento:

cloud
Infraestructura en la Nube Google Cloud Platform (GCP) - Ubuntu Server.
database
Base de Datos Principal PostgreSQL.
mail
Servidor de Correo Postfix (MTA) y Dovecot (IMAP/POP3).
forum
Servidor de Mensajería Openfire (Protocolo XMPP / WebSockets).
api
Backend / API de Puente Golang (Go) para lógica de unificación.
smartphone
Frontend Móvil Flutter (Dart).
web
Frontend Web / Landing Page HTML5, Tailwind CSS, y Apache2.

sync 3. Desarrollo del Backend y Unificación de Cuentas

Uno de los retos arquitectónicos más complejos fue sincronizar la creación de usuarios entre la base de datos relacional de correo y la base de datos interna del servidor de chat.

  • API en Go: Se desarrolló un microservicio en Golang que actúa como intermediario seguro.
  • Integración REST con Openfire: Se utilizó el plugin UserService de Openfire. Se superó un desafío de seguridad impuesto por el parche del CVE-2023-32315 en Openfire 4.8.x, habilitando el uso de "wildcards" (adminConsole.access.allow-wildcards-in-excludes = true) para permitir la autenticación de la API mediante cabeceras autorizadas.
  • Flujo: Al registrarse un usuario desde la app móvil, la API en Go inscribe al usuario en PostgreSQL (para el correo) y lanza un POST autorizado hacia Openfire, unificando la identidad bajo el dominio @vuelo.email.

support_agent 4. Estabilización del Servidor de Correo (Dovecot)

Durante las pruebas de integración del cliente de correo en Flutter, se detectó un error al intentar acceder a la bandeja de enviados (Mailbox doesn't exist).

Solución: Se intervino la configuración interna del servidor Linux (/etc/dovecot/conf.d/15-mailboxes.conf).

Se implementó la directiva auto = subscribe en los namespaces de las carpetas especiales (Drafts, Junk, Trash, Sent). Esto automatizó la creación física de los directorios en el servidor al momento del primer inicio de sesión del usuario.

forum 5. Implementación de Mensajería Instantánea (XMPP)

El componente de chat en tiempo real exigió una configuración minuciosa tanto a nivel de servidor como de red.

  • Configuración Openfire: Se habilitó el HTTP Binding y soporte CORS global (*) para permitir conexiones BOSH y WebSockets desde navegadores web, manteniendo la seguridad.
  • Gestión de Redes (Firewalls): Se configuraron múltiples capas de seguridad para permitir el tráfico TCP:
    • Apertura de puertos (7070, 7443, 5222) en el Firewall perimetral de Google Cloud Platform (VPC).
    • Reglas de tráfico interno usando el Uncomplicated Firewall (UFW) de Ubuntu.

install_mobile 6. Desarrollo de la Aplicación Móvil (Flutter)

La interfaz móvil evolucionó para alojar la dualidad del servicio (Correo + Chat) de manera intuitiva.

dashboard_customize

UI/UX

Se reestructuró la navegación implementando un BottomNavigationBar para alternar entre "Bandeja de Entrada" e "Instantáneo", reubicando carpetas secundarias (como Enviados) en un menú lateral (Drawer).

code_blocks

Cliente XMPP

Se migró de la librería whixp (que presentaba incompatibilidades de compilación FFI) a xmpp_stone, una solución escrita en Dart puro que garantizó estabilidad multiplataforma.

wifi_protected_setup

Blindaje de Conexión (Keep-Alive)

Se solucionó el problema de desconexión silenciosa por el modo "Doze" de Android implementando:

  • XMPP Pings (XEP-0199): Temporizador periódico que envía stanzas de ping para mantener vivo el socket TCP.
  • AppLifecycleObserver: Resurrección automática del estado y la conexión XMPP cada vez que la app vuelve a primer plano.
speed

Optimización de Rendimiento

Se resolvió un error fatal (ANR - Application Not Responding) agrupando las notificaciones de estado de la interfaz (notifyListeners()) para evitar sobrecargar el hilo principal durante la recepción masiva de contactos (Roster).

verified

Despliegue a Producción

Se configuraron permisos nativos explícitos (INTERNET, ACCESS_NETWORK_STATE) y tolerancia a tráfico HTTP en texto plano (usesCleartextTraffic="true") en el AndroidManifest.xml para pasar satisfactoriamente las revisiones de Google Play Console.

language 7. Despliegue de Landing Page

Para completar el ecosistema omnicanal, se preparó la infraestructura web.

  • Landing Page: Se diseñó una página de aterrizaje moderna usando Tailwind CSS orientada a conversión, detallando los beneficios y el stack tecnológico de la plataforma.
  • Despliegue Apache2: Se resolvió un conflicto de "DocumentRoot" entre Nginx y Apache2 en el servidor de Ubuntu. El servicio Nginx fue desactivado en favor de Apache2, donde la Landing Page se desplegó con éxito asignando los permisos correctos al usuario www-data en la ruta correspondiente.