Blog
UX
22 de novembro de 20258 min

Pesquisa contextual e deslize: guia UX completo

Um aplicativo móvel é julgado em segundos. Não em recursos. Não em número de botões. Em segundos — o tempo que você leva para encontrar o que procura e fazer o que deseja. É por isso que investi tanto tempo na pesquisa contextual e na navegação por deslizamento no TAMSIV.

Pontos chave a reter:
- A pesquisa unificada consulta simultaneamente tarefas e memorandos com ponderação por relevância e recenticidade.
- A pesquisa contextual prioriza os resultados do contexto atual (grupo, pasta) sem excluir os outros.
- O swipe-to-dismiss com um limite de 100px é o ponto ideal entre o gesto acidental e intencional.
- A fluidez de um aplicativo é a soma de centenas de micro-decisões UX invisíveis.

Por que a pesquisa é o primeiro indicador de qualidade de um aplicativo?

Quando um usuário abre um aplicativo de produtividade, ele está procurando algo. Uma tarefa, um memorando, uma informação. Se a pesquisa é lenta, mal direcionada ou ausente, o aplicativo inteiro parece quebrado. É um fato que o Nielsen Norman Group documenta há anos.

No TAMSIV, a pesquisa não é um campo de texto básico colocado no topo da tela. É um sistema unificado que consulta simultaneamente tarefas, memorandos e eventos de calendário, em todos os contextos acessíveis ao usuário.

O SearchService é um singleton que centraliza todas as requisições de pesquisa. Ele usa a pesquisa de texto completo do PostgreSQL via Supabase para resultados rápidos e relevantes, mesmo com milhares de itens.

Pessoa usando a pesquisa em um smartphone com uma interface moderna e resultados filtrados
A pesquisa unificada do TAMSIV consulta simultaneamente tarefas, memorandos e eventos com ponderação inteligente.

Como funciona a ponderação dos resultados da pesquisa?

Nem todos os resultados são iguais. Quando você digita "reunião", provavelmente quer a reunião de amanhã, não a de 3 meses atrás. O sistema de ponderação leva em conta dois eixos:

  1. A relevância textual: título > conteúdo > checklists. Uma correspondência no título vale mais do que uma correspondência no corpo. O ts_rank do PostgreSQL gerencia isso nativamente.
  2. A recenticidade: os itens criados ou modificados recentemente são impulsionados. Um coeficiente decrescente baseado na data da última modificação penaliza os resultados antigos.

Essa dupla classificação é crucial. Sem ela, uma pesquisa por "relatório" retornaria 200 resultados em uma ordem incompreensível. Com ela, os 3 primeiros resultados são quase sempre os corretos.

Otimizei este sistema com o cache de conteúdo para evitar requisições caras a cada digitação. O debounce de 300ms combinado com o cache de memória torna a pesquisa quase instantânea.

O que é a pesquisa contextual e por que ela muda tudo?

A pesquisa "clássica" trata todos os resultados de maneira igual. Você pesquisa "orçamento", obtém todos os itens que contêm "orçamento" em todo o aplicativo. Isso é correto, mas inútil quando você está trabalhando em um grupo específico.

A pesquisa contextual do TAMSIV funciona de forma diferente: ela prioriza os resultados do contexto atual sem excluir os outros. Se você está em um grupo "Marketing", os resultados desse grupo aparecem primeiro, seguidos pelos resultados pessoais e, em seguida, pelos outros grupos.

Como funciona tecnicamente?

  • O SearchService recebe o contexto atual (ID do grupo, tipo de visualização) como parâmetro
  • A requisição adiciona um boost de relevância para os itens do contexto atual
  • Os resultados são classificados: contexto atual → pessoal → outros grupos
  • Nenhum resultado é filtrado — apenas a ordem muda

Este comportamento é inspirado na FilterBar do sistema de agenda que aplica o mesmo princípio de filtragem contextual. O usuário vê primeiro o que é relevante em seu contexto de trabalho.

É uma sutileza de UX que não é notada conscientemente, mas que faz toda a diferença entre um aplicativo onde você encontra tudo imediatamente e um aplicativo onde você se esforça.

Como implementar um swipe-to-dismiss confiável no React Native?

O swipe-to-dismiss é um padrão de navegação que os usuários adoram — quando funciona bem. O gesto de deslizar da borda da tela para voltar se tornou um reflexo no celular.

No TAMSIV, implementei este padrão em todas as telas de detalhes (tarefa, memorando, evento) com uma pilha técnica precisa:

  • GestureDetector de react-native-gesture-handler para a detecção do gesto
  • Animated.View para a animação fluida do slide
  • Um hook personalizado useSwipeGesture que encapsula toda a lógica
Mão realizando um gesto de deslizar em uma tela de smartphone com uma animação de transição fluida
O swipe-to-dismiss com um limite de 100px oferece o equilíbrio perfeito entre precisão e conforto.

O ponto crítico: o limite de acionamento. Muito baixo (30px), o deslize é acionado acidentalmente ao rolar. Muito alto (200px), o usuário precisa forçar e a experiência é dolorosa.

Após dezenas de testes, calibrei o limite para 100 pixels. É o ponto ideal — alto o suficiente para evitar falsos positivos, baixo o suficiente para ser natural. Este limite é combinado com uma velocidade mínima: um deslize lento, mesmo além de 100px, não aciona o retorno.

Uma armadilha clássica no React Native: você deve sempre usar os componentes de react-native-gesture-handler (TouchableOpacity, FlatList, ScrollView) nas áreas de GestureDetector, nunca os de react-native. Caso contrário, os gestos entram em conflito e o deslize não funciona mais. É um "gotcha" que descobri da maneira mais difícil e documentei nas convenções do projeto.

Quais micro-decisões de UX separam um protótipo de um produto?

A fluidez de um aplicativo não é um recurso. É a soma de centenas de micro-decisões. Cada uma é invisível individualmente. Juntas, elas fazem a diferença entre "este aplicativo é bom" e "este aplicativo é ótimo".

Aqui estão as micro-decisões que têm o maior impacto no TAMSIV:

  1. O debounce de pesquisa em 300ms: nenhuma requisição a cada tecla. O usuário termina de digitar, então a pesquisa é iniciada. Imperceptível, mas divide por 10 o número de requisições.
  2. Os resultados persistentes durante o carregamento: quando você modifica sua requisição, os resultados antigos permanecem visíveis até que os novos cheguem. Sem flash branco.
  3. A animação de transição em 250ms: o ponto ideal para transições de tela. Mais rápido parece apressado, mais lento parece lento. Material Design confirma essa faixa.
  4. O feedback háptico no deslize: uma vibração leve quando o limite é atingido confirma a ação sem olhar para a tela.
  5. A rolagem inercial preservada: quando você volta por deslize, a lista está na mesma posição de antes. Sem retorno ao topo.

Cada uma dessas decisões levou tempo de refatoração. Mas é exatamente isso que transforma um aplicativo funcional em um aplicativo que as pessoas usam todos os dias.

Desenvolvedor analisando métricas de UX em várias telas com mapas de calor e diagramas de fluxo de usuário
Cada micro-decisão de UX é testada e medida para garantir a fluidez da experiência.

Como medir a fluidez de um aplicativo móvel?

A fluidez não é medida apenas em FPS. Aqui estão as métricas que monitoro no TAMSIV:

  • Time-to-first-result: o tempo entre a primeira letra digitada e a exibição do primeiro resultado da pesquisa. Objetivo: < 200ms.
  • Gesture recognition rate: a porcentagem de deslizes detectados corretamente versus falsos positivos. Objetivo: > 98%.
  • Navigation depth: o número de toques necessários para alcançar qualquer conteúdo. Objetivo: 3 toques no máximo.
  • Perceived performance: a sensação de rapidez, independentemente das métricas brutas. As animações e o design das interações desempenham um papel importante.

O painel de administração me permite acompanhar essas métricas em tempo real e detectar regressões antes que os usuários as relatem.

Qual é o impacto da pesquisa por voz na navegação?

A pesquisa textual é apenas uma parte da equação. Com o gravador de voz integrado, o TAMSIV oferece uma alternativa ainda mais rápida: a pesquisa por voz implícita.

Quando você diz "onde está o relatório de marketing da semana passada?", a IA não se contenta em criar um item — ela pesquisa em seus dados existentes e responde. É o pipeline de voz que processa essa requisição, não o SearchService, mas o resultado é o mesmo: você encontra o que procura sem digitar.

A combinação de pesquisa textual + pesquisa por voz + navegação por deslize cria uma experiência onde o aplicativo desaparece por trás da ação. Você não pensa mais na interface — você faz o que tem que fazer.

FAQ

A pesquisa do TAMSIV funciona offline?

A pesquisa usa um cache de memória local que mantém os últimos resultados e os itens acessados ​​com frequência. Para uma pesquisa completa com resultados atualizados, uma conexão é necessária porque a pesquisa de texto completo é executada no lado do servidor via Supabase.

É possível pesquisar em checklists e anexos?

Sim, a pesquisa abrange títulos, conteúdo de tarefas e memorandos, bem como itens de checklists. Os nomes dos arquivos anexados também são indexados. O sistema pondera os resultados para priorizar correspondências nos títulos.

O swipe-to-dismiss funciona em todo o aplicativo?

O swipe-to-dismiss está ativo em todas as telas de detalhes: detalhes da tarefa, detalhes do memorando, detalhes do evento do calendário. Não está ativo nas telas principais de navegação (abas) para evitar conflitos com o deslize de mudança de aba.

Como a pesquisa lida com grupos privados versus compartilhados?

A pesquisa respeita estritamente as políticas RLS do Supabase. Você só vê os resultados aos quais tem acesso: seus itens pessoais e os itens dos grupos dos quais você é membro. A contextualização afeta apenas a ordem, nunca as permissões.