clubtour
documentação oficial · junho 2026

manual
do sistema

Guia completo do ClubTour — plataforma de destinos turísticos por verticais de interesse construída sobre Cloudflare Workers e D1. Cada vertical roda no mesmo motor (clubtour-engine), detectado automaticamente pelo hostname.

3verticais
3.100+estabelecimentos
20+países
2workers
2bancos D1

o que é o clubtour

O ClubTour é uma engine replicável de destinos turísticos por verticais de interesse — pense num Shopify para hubs turísticos temáticos. Um único worker (clubtour-engine) detecta o hostname e serve o vertical correto, com marca, agente IA, paleta e vocabulário próprios.

Toda a infraestrutura roda em Cloudflare (Workers + D1 + ASSETS), sem servidores próprios. O banco é SQLite via D1, com uma única tabela mapa particionada por coluna vertical — a mesma query serve os três verticais.

"Um motor, três produtos. O Tripbier foi o laboratório. O ClubTour é a plataforma."

O comprador do ClubTour não é o turista — é a associação, secretaria ou prefeitura que quer um hub digital para o seu produto regional. A Rota da Cachaça, a Rota do Vinho e a Simple Malt são as primeiras instâncias públicas da engine.

números do sistema

métricavalorobservação
Alambiques mapeados (Rota da Cachaça)8.000+Brasil — maior base digital de alambiques do país
Vinícolas mapeadas (Rota do Vinho)3.100+Brasil + Argentina
Destilarias (Simple Malt)3.100+Escócia 780 · EUA 2.156 · Japão 112 · Brasil 143+
Verticais ativas3cachaca · vinho · whisky
Países com cobertura (whisky)20+Escócia, EUA, Japão, Irlanda, Canadá, Brasil…
Workers em produção2clubtour-engine · upg-engine
Bancos D12clubtour-bebidas-db · agentlink-db
Pipeline Maestro6 agentesRouter → Concierge → Interceptor → Curador → Validador → Apresentador

infraestrutura

workers ativos
workerdomíniosresponsabilidade
clubtour-enginerotadacachaca.clubtour.app · rotadovinho.clubtour.app · simplemalt.clubtour.appMotor unificado — detecta vertical por hostname, serve hub/mapa/chat/passaporte, pipeline Maestro de 6 agentes
upg-engineclubtour.app · passaporte.clubtour.app · gramado.clubtour.app · passaportegramado.comWorker da rede: página manifesto ClubTour, Copa 2026 splash, hubs regionais (Gramado, Vinhedos, Caxias), passaporte PWA
bancos D1 (SQLite)
bancoworkerconteúdo principal
clubtour-bebidas-dbclubtour-enginetabela mapa (todos os estabelecimentos, particionada por vertical), tabela estabelecimentos (dados enriquecidos), passaportes, carimbos, links, conhecimento do agente
agentlink-dbclubtour-enginehistórico de conversas, sessões, métricas de interação do pipeline Maestro
detecção de vertical

A função getVertical(request) no index.js do clubtour-engine lê o host header e retorna o vertical:

// src/index.js — clubtour-engine
function getVertical(request) {
  const host = request.headers.get('host') || '';
  if (host.includes('cachaca') || host.includes('pinga')) return 'cachaca';
  if (host.includes('whisky') || host.includes('malt'))   return 'whisky';
  if (host.includes('vinho') || host.includes('wine'))    return 'vinho';
  return request.headers.get('X-Vertical') || 'cachaca';
}

3 verticais ativas

Cada vertical é uma instância completa da engine com identidade própria: nome, cor, emoji, agente IA, vocabulário e conteúdo. O motor é sempre o mesmo clubtour-engine — o que muda é o VERTICAL_CONFIG[vertical].

🥃
Rota da Cachaça
rotadacachaca.clubtour.app
Maior base digital de alambiques do Brasil. Agente: Mestre Cachaçeiro. Filtros por envelhecimento (amburana, carvalho, jequitibá, inox). Cor: #6B2D0F.
🍷
Rota do Vinho
rotadovinho.clubtour.app
Vinícolas do Brasil e Argentina. Agente: Sommelier Digital. Filtros por varietal e tipo. Cor: #8B1A2E.
🥃
Simple Malt
simplemalt.clubtour.app
20+ países · Escócia 780 · EUA 2.156 · Japão 112. Agente: Mestre Malteiro. Filtros por estilo (Bourbon, Scotch, Japanese, Irish, Rye). Cor: #C9A646.

hub / catálogo

Cada vertical tem uma página hub — SPA com duas views: viewHome (cards de estados/países com contagem) e viewResults (lista de estabelecimentos com filtros e paginação 12/página).

Filtros disponíveis: por envelhecimento (cachaça), por varietal (vinho) ou por estilo (whisky). Segundo filtro: contato (site / telefone / Instagram). Ordenação: A→Z, por cidade, com site primeiro.

Busca com typeahead de 280ms de debounce — busca em tempo real via /api/search?q=. Cada card tem botão "mestre" que abre o chat flutuante diretamente contextualizado no estabelecimento.

🥃
hub cachaça
Estados brasileiros, filtros por envelhecimento, chat com Mestre Cachaçeiro por alambique.
rotadacachaca.clubtour.app/hub.html
🍷
hub vinho
Vinícolas do Brasil e Argentina, filtros por varietal, chat com Sommelier Digital.
rotadovinho.clubtour.app/hub.html
🥃
hub whisky
20+ países, filtros por estilo (Bourbon/Scotch/Japanese/Irish/Rye), chat com Mestre Malteiro.
simplemalt.clubtour.app/hub-whisky.html

mapa interativo

Cada vertical tem um mapa Leaflet 1.9.4 com tiles CartoCDN (dark night + voyager day, toggle). O mapa da cachaça e do vinho foca no Brasil (centro [-15.5, -47.9], zoom 5). O mapa do whisky é mundial (centro [30, 0], zoom 2).

Sidebar 300px com lista de estabelecimentos, filtro por estado/país e busca em tempo real. Cada pin é um L.divIcon colorido por estado/país. Popup com nome, cidade, links (site/insta/tel) e botão "mestre" que abre o chat flutuante.

Coordenadas: usa lat/lng do banco quando disponível, ou jitter determinístico em torno do centro do estado/país (seed baseado no id) para evitar sobreposição.

🗺️
mapa cachaça
Brasil. Cores por UF, centros dos 27 estados mapeados. Sidebar com filtro por UF.
rotadacachaca.clubtour.app/mapa.html
🗺️
mapa vinho
Brasil + Argentina. Zoom adaptado para cone sul. Sidebar por estado/país.
rotadovinho.clubtour.app/mapa.html
🌍
mapa whisky (mundial)
20+ países, zoom 2, PAIS_COLOR e PAIS_CENTRO para cada país produtor.
simplemalt.clubtour.app/mapa-whisky.html

agente ia por vertical

Cada vertical tem um agente especializado com nome, escopo e personalidade próprios. O chat pode ser aberto na home, no hub ou no mapa — sempre contextualizado no estabelecimento selecionado via estab_id.

verticalagenteescopo
cachacaMestre Cachaçeiroalambiques, destilação, envelhecimento, harmonizações, roteiros de cachaça — recusa off-topic
vinhoSommelier Digitalvinícolas, varietais, visitas, roteiros, harmonizações — recusa off-topic
whiskyMestre Malteirodestilarias, estilos, casks, envelhecimento, Copa 2026 Whisky, harmonizações — recusa off-topic

O chat usa a orquestra Maestro (6 mini-agentes) quando recebe uma mensagem via POST /api/chat. O histórico da conversa é mantido no cliente e passado a cada turn via history[]. O estab_id carrega a base de conhecimento específica do estabelecimento do banco D1.

Age gate: modal de verificação de idade injetado em todas as páginas do clubtour-engine. Bots (Googlebot, Bingbot etc.) são detectados por User-Agent e pulam o gate automaticamente.

orquestra maestro

O pipeline Maestro é composto por 6 mini-agentes sequenciais — cada um recebe um envelope de dados, processa e passa para o próximo. Resolve 5 falhas crônicas do worker monolítico: alucinação, dedupe, substituição silenciosa, loop e ortografia.

"GPT para linguagem, código para estrutura." — princípio fundador da orquestra.
Router
Classifica a intenção: roteiro, info, off-topic, pergunta técnica
GPT-4o-mini · temp 0
Concierge
Se falta info, pergunta de forma natural; se completo, prepara envelope
GPT-4o-mini · temp 0.7
Interceptor
Bloqueia off-topic, alucinações e respostas perigosas
lógica pura JS
Curador
Busca no D1 top-50 mais recentes + busca LIKE por artigo/regimento, seleciona paradas
D1 · zero LLM
Validador
Deduplica, checa ortografia e valida coerência do conjunto
lógica pura JS
Apresentador
Monta narrativa sedutora citando todos os estabelecimentos + CTA
GPT-4o-mini · temp 0.8

O Curador usa o Listening Pattern: lê os 50 registros mais recentes do D1 + faz busca LIKE pela intenção detectada — garantindo que o contexto mais fresco sempre entra na resposta. Estatuto e regimento são tratados como domínio separado com busca por artigo (Art. N°).

passaporte

O passaporte ClubTour é o motor de gamificação e fidelização. O usuário coleciona carimbos a cada visita a estabelecimentos parceiros. Níveis progressivos por vertical: Pingunçu Iniciante → Mestre → Grão-Pingunçu (cachaça); equivalentes para vinho e whisky.

Fluxo: usuário chega no hub → cria passaporte (nome + WhatsApp, zero senha) → faz check-in na visita → acumula carimbos → desbloqueia benefício na próxima visita ao estabelecimento.

Circuitos: cada roteiro de parceiro tem N paradas. Completar todas desbloqueia prêmio. O painel do dono mostra em tempo real quem completou e permite enviar benefício por WhatsApp.

passaporte cachaça passaporte vinho

copa do mundo do whisky · 2026

A Simple Malt tem uma página especial que cruza as 11 cidades-sede da Copa 2026 (Dallas, NY/NJ, LA, Philly, Boston, Seattle, Atlanta, SF, Kansas City, Miami + Toronto/Vancouver) com destilarias próximas em cada cidade.

A página worldcup.html é ativada também via splash de 8 segundos em clubtour.app — visitantes da marca-mãe são redirecionados para a experiência Copa.

Também inclui seção do Bourbon Trail (8 destilarias históricas do Kentucky), passaporte visual com slots por país e painel de estatísticas do whisky mundial.

abrir worldcup.html ver splash no clubtour.app

api endpoints

Todos os endpoints auto-detectam o vertical pelo hostname — sem parâmetro ?vertical=. Basta chamar de dentro do mesmo domínio ou passar o header Host correto.

Acesso externo requer autenticação via token de 256 bits no header Authorization: Bearer <token>. Requisições sem token válido recebem 403 Forbidden. Tokens são gerados por cliente e armazenados no D1.

Exemplo de requisição autenticada:

# Chamada autenticada via cURL
curl -H "Authorization: Bearer <seu-token-256bits>"   https://rotadacachaca.clubtour.app/api/stats

# Resposta sem token ou token inválido
HTTP/2 403
{ "error": "unauthorized" }
métodoendpointdescrição
GET/api/statstotal, com_site, por_estado — stats do vertical detectado
GET/api/estabelecimentos?estado=®iao=&limit=lista paginada por estado/país, limite até 300
GET/api/search?q=&limit=busca fulltext por nome, cidade, estado — limite padrão 8 (typeahead) ou 200 (lista)
POST/api/chatenvia mensagem ao pipeline Maestro; body: { estab_id, message, history[] }
GET/api/passaporteretorna passaporte do usuário pela sessão/cookie
POST/api/checkinregistra carimbo: body { passaporte_id, mapa_id }
GET/api/ping?page=&action=analytics 1st-party — registra pageview/evento sem PII
GET/api/conhecimento?estab_id=retorna base de conhecimento do estabelecimento para o agente

deploy e operações

Deploy do clubtour-engine via Wrangler CLI a partir de D:AgentLinkAgentesclubtour.appclubtour-engine. Cada deploy publica para os 3 domínios customizados simultaneamente.

# Deploy principal (clubtour-engine)
cd D:/AgentLink/Agentes/clubtour.app/clubtour-engine
npx wrangler deploy

# Deploy do upg-engine (clubtour.app + passaporte + gramado)
cd D:/AgentLink/Agentes/PassaporteGramado/upg-engine
npx wrangler deploy

# Query no D1 de estabelecimentos
npx wrangler d1 execute clubtour-bebidas-db
  --command "SELECT vertical, COUNT(*) FROM mapa GROUP BY vertical"
  --remote --json

Regra de ouro: toda mudança de arquitetura no worker atualiza o Changelog do .md correspondente. Tripbier e ClubTour são contas/negócios separados — nunca cruzar workers, dados ou credenciais.

Assets estáticos: HTML das páginas do hub, mapa e worldcup ficam em clubtour-engine/html/ e são servidos via binding ASSETS. O index.js faz rewrite de URL para servir versões por vertical (ex: /index.html/index-whisky.html no simplemalt).

lgpd

Banner de cookies injetado em todas as páginas dos verticais. Consentimento armazenado em localStorage. Analytics 1st-party via /api/ping — hash SHA1 de IP+UA, sem PII. Endpoints /legal/privacidade e /legal/termos disponíveis em todos os domínios.

Age gate modal em todos os verticais de bebidas — detecta bots por User-Agent e pula o gate automaticamente (Googlebot, Bingbot, WhatsApp, Twitterbot etc.).

política de privacidade termos de serviço