Saltar al contenido
Andrés González
ANDRÉS GONZÁLEZ
Volver a todos los proyectos
Sistemas Distribuidos & Mobile Sync Plataforma de Movilidad & Servicios Automotrices Conectados

Motor Dinámico de Notificaciones & Centro de Preferencias

Arquitectura End-to-End: De microservicios distribuidos y optimización batch en backend, a una experiencia móvil resiliente de alta fidelidad.

Flutter Dart Node.js TypeScript Moleculer MongoDB TypeORM Firebase FCM Jest

Ficha de Proyecto

Motor Dinámico de Notificaciones & Centro de Preferencias

Rol Técnico

Full Stack / Mobile & Backend Engineer

Enfoque de Arquitectura

Sistemas Distribuidos · Optimización Batch · Resiliencia Móvil

Contexto de negocio

El Desafío y Contexto de Negocio

En aplicaciones de servicios vehiculares y movilidad con alto volumen de transacciones, la saturación de comunicaciones no deseadas desencadena el silenciamiento de notificaciones a nivel de sistema operativo o la desinstalación directa de la app. El ecosistema técnico heredado presentaba tres cuellos de botella fundamentales:

01

Catálogo estático y rígido

Los tipos de notificación estaban acoplados mediante enumeraciones en código. Crear o modificar una categoría requería tocar múltiples repositorios y redesplegar servicios.

02

Control binario de todo o nada

Solo existía una bandera global (disableAll). Si el usuario deseaba silenciar promociones, se veía obligado a perder alertas operativas críticas como citas de taller o revisiones vehiculares.

03

Desperdicio de recursos en broadcast

Los envíos masivos creaban registros in-app y disparaban peticiones externas a Firebase sin validar previamente si los destinatarios deseaban recibir dicha categoría, generando sobrecostos de I/O y red.

Ingeniería de Sistemas

Arquitectura de la Solución End-to-End

Estructuración modular de microservicios con validación de preferencias en cascada y compuerta de descarte temprano:

architecture-flow.system
Event-Driven & Microservices
Capa Clientes

Flutter Mobile & Admin

Centro de ajustes granular, debouncing de eventos y selector dinámico en dashboard/CMS.

Flutter / Web JWT Securizado
Core Engine
Microservicio

Notification Service

Catálogo dinámico, reglas de opt-in en cascada y resolución virtual de preferencias en tiempo de ejecución.

Node.js / TS Moleculer Core
Persistencia & Reglas

MongoDB & Batch Filter

Colecciones dinámicas indexadas y descarte anticipado de destinatarios no elegibles antes de persistir.

TypeORM Early Discard
Distribución

Firebase FCM Gate

Compuerta de seguridad que omite tokens de dispositivos silenciados con estado auditado `skipped_preference`.

FCM Cloud iOS / Android
Frontend Cliente Flutter · Dart · State Management

Experiencia Móvil (Flutter)

  • Centro de ajustes interactivo con tarjetas independientes por categoría de interés (Citas de taller, Mantenimiento, Perfil, Novedades, Reservas).
  • Control de concurrencia y debouncing para mitigar condiciones de carrera ante toques rápidos repetidos.
  • Rollback optimista: si una petición falla por timeout o pérdida de red, el switch revierte de forma limpia a su posición confirmada.
  • Pantallas de recuperación contextual con deep links directos a configuración cuando el usuario consulta su bandeja estando desactivado.
Ingress & Autenticación JWT · Reverse Proxy · REST API

API Gateway & Control de Acceso

  • Asociación estricta de preferencias al token JWT del usuario para garantizar consistencia multisesión.
  • Exposición de endpoints securizados para consumo desde la app móvil, el portal administrativo y el CMS.
Capa de Microservicios Backend Node.js · TypeScript · Moleculer · TypeORM · MongoDB

Motor de Notificaciones & Catálogo Dinámico

  • Entidad NotificationType con índices únicos, auditoría y validación estricta de claves por expresión regular (^[a-z][a-z0-9_]{1,63}$).
  • Resolución virtual de preferencias: cruza el catálogo activo con las preferencias guardadas en tiempo de ejecución, ofreciendo opt-in por defecto sin inflar la base de datos con registros vacíos.
  • Reglas de negocio en cascada: (1) Sin registro → permitir; (2) disableAll global → bloquear; (3) Sin tipo declarado → respetar regla global; (4) Tipo declarado → verificar switch específico.
Optimización de Envíos Masivos Batch Filter · Firebase Cloud Messaging (FCM)

Early Discard Gate & Despacho Cloud

  • Filtro en lote previo: la función filterEligibleUserIdsForPush evalúa y depura la lista de destinatarios antes de persistir notificaciones in-app o llamar a Firebase.
  • Compuerta de despacho FCM: canReceivePush valida la elegibilidad antes de resolver tokens de dispositivos, registrando el estado skipped_preference para auditoría.
  • Integración automática con jobs de mantenimiento programado, citas y publicaciones del CMS.

Valor de Ingeniería

Capacidades Clave Implementadas

Mecanismos desarrollados para resolver cuellos de botella de concurrencia, desacoplamiento y escalabilidad.

Catálogo Zero-Deployment

El equipo operativo puede dar de alta nuevos tipos de notificación desde el dashboard sin requerir nuevos despliegues de backend ni aprobaciones de tienda.

Descarte Temprano en Batch

Filtrado masivo de destinatarios previo al almacenamiento y al encolado FCM, optimizando escrituras en MongoDB y consumos de cuota cloud.

UI Resiliente & Rollback

Feedback contextual, control de debouncing y reversión automática de switches ante fallos de conexión garantizan consistencia absoluta.

Recuperación Amigable

Pantallas informativas contextuales guían al usuario hacia la reactivación con un solo toque en caso de requerir alertas clave.

Calidad de Código

Pruebas Automatizadas y Fiabilidad

Suite de pruebas exhaustivas para validar la integridad del motor de decisión y evitar regresiones en producción:

Pruebas unitarias de catálogo (CRUD, unicidad de claves, formatos regex inválidos).

Pruebas del motor de preferencias (cascada de reglas, usuarios nuevos, completado dinámico de items virtuales).

Pruebas del gate FCM (validación de descarte con resultado skipped_preference sin disparar llamadas de red a Firebase).

Pruebas de repositorio para operaciones batch e inserciones masivas depuradas.

Métricas & Resultados

Impacto Técnico y de Producto

Resultados medibles alcanzados tras la implementación y puesta en marcha del ecosistema.

Zero-Release

Agilidad Operativa

Nuevas campañas y tipos de alerta se configuran al instante desde el panel sin alterar código.

Optimizado

Eficiencia Cloud

Ahorro de lecturas/escrituras en MongoDB y llamadas a FCM mediante filtrado temprano de destinatarios.

100%

Consistencia de Estado

Persistencia securizada en backend con protección ante condiciones de carrera y caídas de red.

Respetuoso

Retención de Usuarios

Prevención de desinstalaciones al otorgar control granular y transparente sobre las alertas recibidas.

¿Tienes un reto similar de arquitectura o sincronización?

Analicemos los requerimientos de tu infraestructura técnica y diseñemos una arquitectura escalable y tolerante a fallos para tus aplicaciones móviles y backend.

Llamada de Diagnóstico