Voltar aos projetos

Tem no SUS!

Produto que ajuda pessoas a descobrir serviços gratuitos do SUS, encontrar atendimento próximo e entender como acessar cada direito.

Para quem
Projeto próprio, criado para o Desafio Liga Jovem 2026
Ano e andamento
2026 · em andamento
Página inicial do Tem no SUS! com a chamada Encontre psicólogo perto de você e um celular mostrando a busca por psicólogo com resultados do CAPS e do ambulatório

O ponto de partida

O SUS oferece mais de cem serviços gratuitos, e quase ninguém sabe quais existem nem onde ficam. A pessoa não procura por nome de serviço: ela procura por necessidade, com as palavras dela. Nenhuma busca comum traduz preciso de psicólogo para o CAPS mais próximo com horário de atendimento.

O que foi construído

Aplicativo em Expo com uma base de código para Android, iOS e web, apoiado em Postgres com PostGIS. Os dados do CNES são ingeridos para o banco próprio, então a busca nunca depende da API do governo. Busca textual em português com correspondência aproximada, mapa com os pontos mais próximos e leitura em voz alta para quem tem pouca familiaridade com telas.

Minha participação

Produto, pesquisa, arquitetura e desenvolvimento na equipe

Decisões importantes

  • Manter protótipos e documentos do projeto no mesmo histórico.
  • Usar TypeScript na aplicação publicada.
  • Registrar as etapas de planejamento junto do desenvolvimento.

O que funcionou

  • A aplicação em TypeScript chegou a uma versão pública que pode ser demonstrada.
  • O histórico reúne desenvolvimento, protótipos e materiais do desafio em um único lugar.

Limites atuais

  • A ausência de README impede entender com precisão o problema e as contribuições individuais.
  • Os resultados do projeto ainda não estão documentados publicamente.

Próximo passo

Adicionar um README que explique o problema, a contribuição de cada pessoa e o resultado alcançado.

Por dentro da construção

Arquitetura, tecnologias e as escolhas de implementação deste projeto.

  • Expo
  • React Native
  • Supabase
  • PostGIS
  • TypeScript

Como o sistema é montado

Três camadas com uma regra que organiza todas: o dado público entra por um pipeline agendado e nunca no meio de uma busca. Assim a resposta é rápida mesmo com rede ruim, que é a condição normal do público no interior.

  1. Aplicativo

    Expo, React Native e TypeScript
    • Expo Router
    • TanStack Query
    • Zustand
    • react-native-maps
    • expo-speech

    Uma base de código para Android, iOS e web, com cache local para uso offline.

    HTTPS, REST e RPC

  2. Backend

    Supabase
    • Postgres com PostGIS
    • Auth com RLS
    • RPC buscar_servicos()
    • Full text search e pg_trgm

    A busca roda dentro do banco, perto dos dados, em vez de num serviço intermediário.

    Escrita agendada

  3. Ingestão

    pg_cron e GitHub Actions
    • CNES e DATASUS
    • Normalização por município
    • Dicionário de necessidade para serviço

    O cadastro nacional é fonte, não dependência em tempo real.

Stack e o porquê de cada peça

Aplicativo

Expo (React Native)
Android, iOS e web da mesma base
TypeScript strict
Segurança de tipos conforme o app cresce
Expo Router
Rotas por arquivo e deep linking nativo
TanStack Query
Cache e repetição automática em rede instável
Zustand
Estado de interface sem cerimônia

Dados

Postgres com PostGIS
Consulta geográfica nativa e rápida
Full text search e pg_trgm
Busca tolerante a erro de digitação
Supabase Auth e RLS
Acesso anônimo com regra no próprio banco

Acessibilidade

expo-speech
Leitura em voz para baixa literacia digital
expo-location
Serviço mais próximo sem digitar endereço

Pinheiro, terracota e uma gota

A identidade precisa parecer serviço público sem parecer repartição: confiável como o SUS, acolhedora como quem atende bem. Landing e aplicativo compartilham a mesma paleta e os mesmos nomes de token, então o que se decide num lugar vale no outro.

  • verde#0d6a51

    Cor de marca. Pinheiro, não o verde-bandeira do serviço público.

  • verde-deep#062f25

    Fundo dos blocos de busca, onde o texto precisa de contraste alto.

  • verde-bright#18a878

    Confirmação e estado positivo.

  • verde-wash#e2efe8

    Superfície de apoio para avisos e blocos de comunidade.

  • coral#d65a3c

    Terracota: o calor humano que o verde sozinho não carrega.

  • amber#e0a23f

    Destaque pontual, reservado para o que muda de estado.

  • paper#f4f1e7

    Creme quente no lugar do branco puro, que cansa em tela ao sol.

  • ink#14211c

    Tinta principal, esverdeada, para não brigar com a paleta.

  • Fraunces para dizer, Inter para ler

    A serifa variável abre as chamadas e dá voz à marca; o texto corrido, os rótulos e os dados ficam em Inter, que aguenta tamanho pequeno em tela de celular barato.

  • O token que foi escurecido por reprovar

    O cinza de apoio nasceu #76837b e falhava AA 4.5:1 abaixo de 18px. Virou #506059 e a razão ficou escrita no próprio token, para ninguém reverter sem saber o que estava comprando.

  • Alto contraste é tema, não filtro

    A variante acessível redefine a paleta inteira à mão (verdes mais profundos, bordas reforçadas, tinta preta) em vez de aplicar um filtro genérico por cima. A identidade sobrevive ao modo.

Pingo

A silhueta do Pingo é uma gota e um pin de mapa ao mesmo tempo, em terracota, com a cruz da saúde no corpo. A forma resolve duas coisas de uma vez: diz saúde e diz lugar, que é exatamente o que o aplicativo faz. Ele aparece onde a tela poderia assustar (onboarding, lista vazia, o que levar na consulta) e some no resto, para não virar enfeite. São seis poses, animadas em Lottie no aplicativo e reduzidas a SVG estático na web, onde a animação se mostrou instável. Cada pose carrega o próprio rótulo para leitor de tela.

  • Pingo, mascote do Tem no SUS!, acenandoAcenando: abre o onboarding
  • Pingo apontando o caminhoApontando: indica o próximo passo
  • Pingo segurando uma lista do que levarChecklist: o que levar na consulta