Búsqueda contextual y deslizamiento: guía UX completa
Una aplicación móvil se juzga en segundos. No en características. No en el número de botones. En segundos, el tiempo que te lleva encontrar lo que buscas y hacer lo que quieres hacer. Por eso he invertido tanto tiempo en la búsqueda contextual y la navegación por deslizamiento en TAMSIV.
Puntos clave a recordar:
- La búsqueda unificada consulta simultáneamente tareas y notas con ponderación por relevancia y actualidad.
- La búsqueda contextual prioriza los resultados del contexto actual (grupo, carpeta) sin excluir a los demás.
- El deslizamiento para descartar con un umbral de 100px es el punto óptimo entre un gesto accidental e intencional.
- La fluidez de una aplicación es la suma de cientos de microdecisiones UX invisibles.
¿Por qué la búsqueda es el primer indicador de calidad de una aplicación?
Cuando un usuario abre una aplicación de productividad, busca algo. Una tarea, una nota, una información. Si la búsqueda es lenta, mal dirigida o inexistente, toda la aplicación parece rota. Es un hecho que el Nielsen Norman Group ha documentado durante años.
En TAMSIV, la búsqueda no es un campo de texto básico colocado en la parte superior de la pantalla. Es un sistema unificado que consulta simultáneamente tareas, notas y eventos del calendario, en todos los contextos accesibles para el usuario.
El SearchService es un singleton que centraliza todas las solicitudes de búsqueda. Utiliza la búsqueda de texto completo de PostgreSQL a través de Supabase para obtener resultados rápidos y relevantes, incluso con miles de elementos.
¿Cómo funciona la ponderación de los resultados de búsqueda?
No todos los resultados son iguales. Cuando escribes "reunión", probablemente quieres la reunión de mañana, no la de hace 3 meses. El sistema de ponderación tiene en cuenta dos ejes:
- La relevancia textual: título > contenido > listas de verificación. Una coincidencia en el título vale más que una coincidencia en el cuerpo. PostgreSQL
ts_rankgestiona esto de forma nativa. - La actualidad: los elementos creados o modificados recientemente se potencian. Un coeficiente decreciente basado en la fecha de la última modificación penaliza los resultados antiguos.
Esta doble clasificación es crucial. Sin ella, una búsqueda de "informe" devolvería 200 resultados en un orden incomprensible. Con ella, los 3 primeros resultados son casi siempre los correctos.
He optimizado este sistema con el caché de contenido para evitar consultas costosas con cada pulsación de tecla. El debounce de 300ms combinado con el caché de memoria hace que la búsqueda sea casi instantánea.
¿Qué es la búsqueda contextual y por qué lo cambia todo?
La búsqueda "clásica" trata todos los resultados por igual. Buscas "presupuesto", obtienes todos los elementos que contienen "presupuesto" en toda la aplicación. Esto es correcto pero inútil cuando estás trabajando en un grupo específico.
La búsqueda contextual de TAMSIV funciona de manera diferente: prioriza los resultados del contexto actual sin excluir a los demás. Si estás en un grupo de "Marketing", los resultados de ese grupo aparecen primero, seguidos de los resultados personales y luego de los otros grupos.
¿Cómo funciona técnicamente?
- El
SearchServicerecibe el contexto actual (ID de grupo, tipo de vista) como parámetro - La consulta añade un impulso de relevancia para los elementos del contexto actual
- Los resultados se ordenan: contexto actual → personal → otros grupos
- Ningún resultado se filtra, solo cambia el orden
Este comportamiento está inspirado en la FilterBar del sistema de agenda que aplica el mismo principio de filtrado contextual. El usuario ve primero lo que es relevante en su contexto de trabajo.
Es una sutileza de UX que no se nota conscientemente, pero que marca toda la diferencia entre una aplicación donde encuentras todo de inmediato y una aplicación donde te cuesta.
¿Cómo implementar un deslizamiento para descartar fiable en React Native?
El deslizamiento para descartar es un patrón de navegación que a los usuarios les encanta, cuando funciona bien. El gesto de deslizar desde el borde de la pantalla para volver atrás se ha convertido en un reflejo en el móvil.
En TAMSIV, he implementado este patrón en todas las pantallas de detalle (tarea, nota, evento) con una pila técnica precisa:
GestureDetectorde react-native-gesture-handler para la detección del gestoAnimated.Viewpara la animación fluida del deslizamiento- Un hook personalizado
useSwipeGestureque encapsula toda la lógica
El punto crítico: el umbral de activación. Demasiado bajo (30px), el deslizamiento se activa accidentalmente al desplazarse. Demasiado alto (200px), el usuario tiene que forzar y la experiencia es molesta.
Después de docenas de pruebas, he calibrado el umbral a 100 píxeles. Es el punto óptimo, lo suficientemente alto para evitar falsos positivos, lo suficientemente bajo para ser natural. Este umbral se combina con una velocidad mínima: un deslizamiento lento incluso más allá de 100px no activa el retroceso.
Una trampa clásica en React Native: siempre hay que usar los componentes de react-native-gesture-handler (TouchableOpacity, FlatList, ScrollView) en las zonas de GestureDetector, nunca los de react-native. De lo contrario, los gestos entran en conflicto y el deslizamiento deja de funcionar. Es un problema que descubrí por las malas y documenté en las convenciones del proyecto.
¿Qué microdecisiones de UX separan un prototipo de un producto?
La fluidez de una aplicación no es una característica. Es la suma de cientos de microdecisiones. Cada una es invisible individualmente. Juntas, marcan la diferencia entre "esta aplicación está bien" y "esta aplicación es genial".
Aquí están las microdecisiones que tienen el mayor impacto en TAMSIV:
- El debounce de búsqueda a 300ms: no hay solicitudes con cada pulsación de tecla. El usuario termina de escribir y luego se inicia la búsqueda. Imperceptible, pero reduce el número de solicitudes en un factor de 10.
- Los resultados persistentes durante la carga: cuando modificas tu consulta, los resultados antiguos permanecen visibles hasta que llegan los nuevos. Sin destellos blancos.
- La animación de transición a 250ms: el punto óptimo para las transiciones de pantalla. Más rápido parece apresurado, más lento parece lento. Material Design confirma este rango.
- El feedback háptico al deslizar: una ligera vibración cuando se alcanza el umbral confirma la acción sin mirar la pantalla.
- El desplazamiento inercial conservado: cuando vuelves atrás deslizando, la lista está en la misma posición que antes. Sin volver al principio.
Cada una de estas decisiones tomó tiempo de refactorización. Pero es exactamente lo que transforma una aplicación funcional en una aplicación que la gente usa todos los días.
¿Cómo medir la fluidez de una aplicación móvil?
La fluidez no se mide solo en FPS. Aquí están las métricas que monitoreo en TAMSIV:
- Time-to-first-result: el tiempo entre la primera letra escrita y la visualización del primer resultado de búsqueda. Objetivo: < 200ms.
- Gesture recognition rate: el porcentaje de deslizamientos detectados correctamente frente a los falsos positivos. Objetivo: > 98%.
- Navigation depth: el número de toques necesarios para llegar a cualquier contenido. Objetivo: 3 toques máximo.
- Perceived performance: la sensación de rapidez, independientemente de las métricas brutas. Las animaciones y el diseño de las interacciones juegan un papel importante.
El panel de administración me permite seguir estas métricas en tiempo real y detectar regresiones antes de que los usuarios las informen.
¿Cuál es el impacto de la búsqueda por voz en la navegación?
La búsqueda textual es solo una parte de la ecuación. Con el dictáfono integrado, TAMSIV ofrece una alternativa aún más rápida: la búsqueda por voz implícita.
Cuando dices "¿dónde está el informe de marketing de la semana pasada?", la IA no se limita a crear un elemento, sino que busca en tus datos existentes y te responde. Es el pipeline vocal el que procesa esta solicitud, no el SearchService, pero el resultado es el mismo: encuentras lo que buscas sin escribir.
La combinación de búsqueda textual + búsqueda por voz + navegación por deslizamiento crea una experiencia en la que la aplicación se desvanece detrás de la acción. Ya no piensas en la interfaz, haces lo que tienes que hacer.
Preguntas Frecuentes
¿La búsqueda de TAMSIV funciona sin conexión?
La búsqueda utiliza una caché de memoria local que conserva los últimos resultados y los elementos accedidos con frecuencia. Para una búsqueda completa con resultados actualizados, se requiere una conexión, ya que la búsqueda de texto completo se ejecuta en el servidor a través de Supabase.
¿Se puede buscar en listas de verificación y archivos adjuntos?
Sí, la búsqueda cubre los títulos, el contenido de las tareas y notas, así como los elementos de las listas de verificación. Los nombres de los archivos adjuntos también se indexan. El sistema pondera los resultados para priorizar las coincidencias en los títulos.
¿El deslizamiento para descartar funciona en toda la aplicación?
El deslizamiento para descartar está activo en todas las pantallas de detalle: detalle de tarea, detalle de nota, detalle de evento del calendario. No está activo en las pantallas principales de navegación (pestañas) para evitar conflictos con el deslizamiento de cambio de pestaña.
¿Cómo gestiona la búsqueda los grupos privados frente a los compartidos?
La búsqueda respeta estrictamente las políticas RLS de Supabase. Solo ves los resultados a los que tienes acceso: tus elementos personales y los elementos de los grupos de los que eres miembro. La contextualización solo afecta el orden, nunca los permisos.