Skip to main content

Command Palette

Search for a command to run...

Caso de Estudio: Estate CRM — UX/UI de Alto Rendimiento en Oracle APEX

Cómo resolvimos el caos de WhatsApp en las inmobiliarias mexicanas con componentes nativos de APEX y diseño intencional.

Published
9 min read
Caso de Estudio: Estate CRM — UX/UI de Alto Rendimiento en Oracle APEX

Read this APEX Insight in English.

Nota de privacidad: Todos los nombres, direcciones y datos de propiedades que aparecen en este caso de estudio son sintéticos o modificados para proteger la privacidad. No se muestran datos reales.


🏗️ Estate CRM evoluciona a Producto SaaS

El sistema descrito en este APEX Insight está evolucionando hacia una plataforma SaaS diseñada para agentes inmobiliarios que ya se cansaron de gestionar el pipeline por WhatsApp y hojas de cálculo.

Únete a la lista de espera y sé el primero en conocer el acceso anticipado:

→ Solicita Acceso Anticipado a Estate CRM


El Costo Real de No Tener un Sistema

Son las 11 de la mañana de un martes. Un agente inmobiliario en Guadalajara abre WhatsApp y empieza a subir mensajes con el pulgar, buscando algo que le dijo una clienta el jueves pasado sobre la casa en Zapopan. No recuerda si ya le mandó las fotos o si solo le prometió que lo haría. Multiplica eso por 40 clientes activos.

Ese no es un problema de actitud. Es un problema de herramientas.

Cuando diseñamos Estate CRM, esa escena era la línea base. Los agentes no perdían ventas por malos vendedores — las perdían porque su "sistema" era un hilo de conversación. En el momento en que un lead se enfriaba o se olvidaba un seguimiento, no había alerta, no había badge, no había señal. Solo silencio.

El reto no era construir un wrapper de base de datos. Era construir algo que se adelantara al agente — que mostrara la información correcta antes de que ellos supieran que la necesitaban.


1. La Estrategia de Tarjetas de Alta Densidad

La primera decisión de diseño fue alejarse de los Interactive Reports para el pipeline principal de clientes. Los IR son poderosos, pero se sienten demasiado a hoja de cálculo para gestionar relaciones. Los agentes escanean sus leads igual que escanean WhatsApp: rápido, por prioridad, centrado en la persona.

La Solución: Cards Nativas con Pulido Personalizado

Usamos la región Cards de APEX extendida con una clase CSS personalizada (est-card) para llevarla más allá de la estética predeterminada.

  • Jerarquía visual: Iniciales o avatar del cliente para reconocimiento inmediato.

  • Metadatos contextuales: Rol (Comprador/Vendedor) y fecha de último contacto, visibles sin abrir el registro.

  • Badges dinámicos: Los estados ("Lead Caliente", "Activo", "Frío") usan una paleta semántica. El ojo va a la prioridad primero.

Tarjetas de clientes de alta densidad en Oracle APEX mostrando badges de
estatus, roles e información de
contacto

Figura 1: Tarjetas de clientes — estatus, rol y contacto visibles sin abrir el registro.

La restricción clave: la lista principal no puede requerir un clic para responder "¿vale la pena darle seguimiento a este lead?" Si el agente necesita abrir el registro para contestar eso, la tarjeta falló.


2. Visuales Proactivos: Badges de Estatus Semánticos

El problema de WhatsApp tiene un equivalente en datos: falta de contexto inmediato. Al ver un pipeline de clientes, el agente no debería tener que leer la letra chica para saber si alguien es un "Lead Caliente" o está "Frío". La UI comunica el estado al instante, a través del color.

La Lógica de Mapeo en la Base de Datos

En lugar de depender de campos de texto plano, mapeamos los estados de la base de datos a clases modificadoras del Universal Theme directamente en la consulta SQL:

SELECT
    c.client_id,
    c.full_name,
    c.role,                 -- Comprador / Vendedor
    c.status,
    c.last_contact,
    CASE c.status
        WHEN 'HOT_LEAD' THEN 'u-warning'        -- Urgencia
        WHEN 'ACTIVE'   THEN 'u-success'        -- Avance
        WHEN 'COLD'     THEN 'u-color-1'        -- Neutral
        ELSE 'u-color-15'
    END AS status_badge_class
FROM clients c
WHERE c.agent_id = :APP_USER_ID

La columna status_badge_class se asigna directamente al atributo Badge CSS Classes de la tarjeta en Page Designer. Sin JavaScript. Sin Dynamic Action. La base de datos decide; la UI lo refleja.

El mismo patrón aplica al módulo de propiedades: un inmueble "Disponible" recibe un color distinto al que está "Bajo Contrato" — misma lógica, diferente tabla.

💡 Regla del Patrón: El mapeo visual de estados pertenece a la capa de datos, no a la de presentación. Al generar clases del Universal Theme (u-success, u-warning) directamente en SQL, se mantiene una sola fuente de verdad.


3. El Flujo Master-Detail-Drawer

Moverse fuera de una lista de 500 propiedades para revisar un detalle es un impuesto a la productividad. El agente pierde la posición de scroll, pierde los filtros activos y tiene que reconstruir el contexto cuando regresa.

La Implementación del Drawer

Usamos la región Inline Dialog con la opción de plantilla js-rightDrawer.

Configuración en Page Designer:

  1. Crea una región Interactive Grid o Cards para la vista principal.

  2. Añade una región Inline Dialog. Asigna el Static ID DETAIL_DRAWER.

  3. Activa la Template Option "js-rightDrawer".

  4. En la región Cards, agrega un Dynamic Action en el evento Click del enlace de la tarjeta:

    • Action: Execute JavaScript

    • Código:

     apex.theme.openRegion("DETAIL_DRAWER");
  1. Antes de abrir el drawer, asigna P1_PROPERTY_ID con una acción Set Value para que la consulta del drawer sepa qué registro cargar.

Estate CRM con el drawer Master-Detail abierto a la derecha mientras la
lista de tarjetas permanece visible a la
izquierda

Figura 2: El drawer conserva la posición de scroll y el contexto de filtros.

Animación del drawer de APEX deslizándose desde la derecha al hacer clic
en una tarjeta

Figura 3: Una transición suave e intencional reduce la carga cognitiva.

El agente hace clic en una propiedad y el drawer se desliza desde la derecha. Los filtros y la posición de scroll en la lista principal no se tocan. Cierra el drawer y continúa exactamente donde estaba.

Los componentes pesados — el mapa embebido, el historial de contacto completo — solo se renderizan dentro del drawer. La lista principal nunca paga ese costo.


4. Inteligencia Externa Integrada (Google Maps)

En el mercado inmobiliario mexicano, la ubicación lo es todo. Colonia, vialidad, distancia al tren ligero o al periférico — todos son factores que el agente necesita comunicar al instante. Obligarlo a copiar y pegar una dirección en otra pestaña es fricción que se acumula a lo largo de 50 propiedades.

La implementación es intencionalmente simple:

-- URL dinámica de Google Maps en la consulta de detalle
'https://www.google.com/maps/search/?api=1&query='
    || APEX_UTIL.URL_ENCODE(p.address || ', ' || p.city)
AS maps_url

En la vista de detalle, una región Iframe renderiza el mapa de forma inline usando la misma URL codificada. El agente obtiene contexto de ubicación sin salir de la aplicación.

Configuración en Page Designer para la región Iframe:

  1. Dentro del Inline Dialog de detalle, agrega una nueva región de tipo Static Content.

  2. Establece Source Type en URL.

  3. Asigna al campo URL el valor #MAPS_URL# (sustitución de la columna maps_url en la consulta de detalle).

  4. Configura la Template de la región en Blank with Attributes para eliminar el padding predeterminado.

  5. Fija una altura de al menos 300px en el CSS de la región.

Nota: Google Maps Embed requiere una conexión HTTPS. Si tu instancia de APEX sirve en HTTP, el navegador bloqueará el iframe como contenido mixto. Asegúrate de que el entorno sea HTTPS antes de habilitar esta funcionalidad en producción.

Google Maps embebido de forma inline dentro del drawer de detalle de la
propiedad en Oracle APEX

Figura 4: Contexto de ubicación sin salir de la aplicación — cero cambios de pestaña.


Lecciones Aprendidas

La jerarquía de la tarjeta estaba mal en la primera versión. El orden inicial era: imagen → dirección → precio → estatus. Los agentes lo ignoraban. Después de observar dos sesiones, el patrón era claro: miraban el estatus primero, el precio segundo, la dirección tercero. Se reordenó la tarjeta y el engagement con la lista mejoró de inmediato. "Diseñar para el escaneo" significa diseñar para su escaneo, no para uno hipotético.

El drawer llegó en la segunda semana, no en la primera. La versión inicial navegaba a una página de detalle. Los agentes preguntaban seguido: "¿cómo regreso a mi búsqueda?" Una región Inline Dialog y una Dynamic Action reemplazaron un patrón de flujo que les costaba 30 segundos por cada consulta — en silencio.

90% nativo, 10% intencional. Cada elemento "premium" en Estate CRM — el badge de antigüedad, el drawer, el mapa — es una extensión de variables CSS o una Dynamic Action sobre un componente nativo. El archivo CSS personalizado tiene menos de 80 líneas. Si está peleando contra el Universal Theme para lograr una estética, el diseño necesita una segunda revisión, no más CSS.


Lecciones de Trinchera

Estate CRM prueba que el low-code empresarial no tiene por qué ser aburrido. El problema de WhatsApp no se resolvió con una función — se resolvió con un modelo de datos que superficie la urgencia, un layout que premia el escaneo y una navegación que no castiga al usuario por ser curioso.

¿Cuál es tu estrategia para manejar datos de alta densidad en APEX? ¿Sigues con reportes o ya diste el salto a Cards?


Trabaja Conmigo

Ayudo a empresas a diseñar y construir aplicaciones empresariales escalables en Oracle APEX — desde decisiones de arquitectura hasta UI lista para producción.

  1. 📅 Agenda una Llamada — Consulta gratuita de 30 minutos.

  2. 💼 Conecta en LinkedIn — Seguimiento semanal de APEX.

  3. 𝕏 Sígueme en X — Tips, hilos y avances de casos de estudio.

  4. 📬 Suscríbete al Newsletter — Análisis profundos cada mes.

💖 Apoya Este APEX Insight

Si este caso de estudio fue útil, considera apoyar el trabajo:

  1. ❤️ GitHub Sponsors — Apoya el código abierto.

  2. ☕ Invítame un Café — Combustible para el próximo caso de estudio.

Tu apoyo mantiene el contenido de Oracle APEX libre y abierto para la comunidad.


P.D. Un agente aquí en Guadalajara me dijo algo después de usar la primera versión del módulo de clientes: "Ya no busco en WhatsApp. Sé exactamente quién necesita atención." Eso no es un cambio de herramienta. Es un cambio de flujo de trabajo.


Referencias

  1. Nielsen Norman Group: Patrones de Divulgación Progresiva

  2. Guía de Referencia del Universal Theme de Oracle APEX

  3. Documentación de Oracle APEX: Inline Dialogs

  4. Documentación de la API de Google Maps Embed