Como ranqueamos
O hub ordena atrações com uma função de score determinística: os mesmos dados de conteúdo, clima e perfil escolhido produzem a mesma ordem. Não usamos modelo de linguagem para ordenar a lista.
1. Perfil (category tags)
Se você escolhe um perfil (ex.: família), atrações que têm essa tag em category_tags ganham um bônus fixo no score.
2. Clima (Open-Meteo)
Usamos previsão/atual para Gramado. Quando o sinal indica tempo ruim para ao ar livre, cada atração recebe peso maior de weather_suitability (1–5) e ajustes por semantic_tags (ex.: indoor forte, outdoor exposto, rain-friendly). Em tempo mais favorável ao ar livre, os pesos semânticos mudam (ex.: leve bônus a outdoor).
3. Tags semânticas (radar)
São independentes do “perfil” de marketing: descrevem logística e ambiente (chuva, fila, indoor). Lista canônica e validação no build estão em lib/schemas.ts e na documentação de conteúdo.
4. Preço
Entre atrações comparáveis, quem tem menor preço listado entre parceiros cadastrados sobe um pouco no ranking (penalidade menor no score para preços altos).
5. O que não fazemos
- Não raspamos sites de terceiros para preço em tempo real.
- O termômetro de “movimento” na cidade é estimativa editorial por calendário — não é fila oficial.
- Preços e disponibilidade podem mudar no site do parceiro depois da nossa última revisão.
Implementação: pesos documentados em comentários em lib/radar.ts.