tripbier nació para resolver un problema simple.
Descubrir una cervecería artesanal todavía depende de docenas de búsquedas dispersas, reseñas fragmentadas e información desactualizada.
Nuestra misión es organizar el conocimiento cervecero mundial en una única plataforma abierta, con búsqueda asistida por inteligencia artificial.
No queremos solo listar cervecerías.
Queremos conectar personas, territorios, historias, estilos, premiaciones y experiencias.
Desde la primera cerveza de barril en Gramado hasta una cervecería premiada en Portland, el viaje debe ser continuo.
Tripbier es una plataforma global de descubrimiento de cervecerías artesanales, itinerarios cerveceros, turismo cervecero e inteligencia geográfica, que utiliza inteligencia artificial para conectar viajeros, cervecerías y destinos en 16 países.
manual
del sistema
Guía completa de tripbier — plataforma de itinerarios cerveceros construida sobre Cloudflare Workers, D1, KV y R2. Cada sección contiene enlaces directos a la funcionalidad descrita.
qué es tripbier
visión generaltripbier es una plataforma serverless de descubrimiento e itinerarios de cervecerías artesanales. Combina una base de datos georreferenciada con IA generativa para crear experiencias personalizadas — desde el mapa interactivo hasta el itinerario narrado por un concierge cervecero.
Toda la infraestructura corre en Cloudflare (Workers + D1 + KV + R2), sin servidores propios, con latencia global de borde y costo variable por uso. El modelo de datos es SQLite vía D1, distribuido en múltiples bases por continente.
El sistema está compuesto por 6 workers independientes, cada uno con responsabilidad específica, que se comunican mediante fetch interno o comparten estado a través del KV.
números del sistema
métricas · jun 2026| métrica | valor | observación |
|---|---|---|
| Cervecerías mapeadas (total) | 19.905 | Brasil + 15 países internacionales · tripbeer-map |
| Cervecerías BR (tripbeer-db) | 5.448 | activas y operacionales |
| Cervecerías US (OpenBreweryDB) | 8.353 | importadas vía pipeline |
| Países con cobertura | 16 | BR, US, DE, BE, CZ, AT, UK, IE, FR, ES, IT, PT, NL, NO, SE, AR |
| Ciudades con páginas editoriales | 130+ | 63 internacionales + 67+ BR |
| Landing pages de cervecerías | premiadas | CBC, WBC, WBA — generadas dinámicamente |
| Visitantes / día | 625 | métrica jun/2026, crecimiento orgánico |
| Solicitudes / mes | ~40k | US + NL + BR como principales orígenes |
| Idiomas admitidos | 15 | pt-BR, en, es, de, fr, it, nl, no, sv, ja y más |
| Tablas en D1 principal | 40+ | tripbeer-db (main) + tripbeer-map (geo) |
| Posición media Google | 6.9 | "best craft beers near me" — 131 impresiones/día |
infraestructura
cloudflare stack| worker | dominio | responsabilidad |
|---|---|---|
utt-engine | tripbier.com/* · *.tripbier.com/* | enrutador principal — sirve páginas desde el KV, API pública, subdominios, banner LGPD |
utt-agentlink | /api/chat (interno) | pipeline Maestro — 6 mini-agentes para generación de itinerarios vía GPT-4o-mini |
utt-brewhub | brewhub.html | chat widget por cervecería, agente IA especializado por slug, protección /api/palpite |
utt-analytics | /api/collect (interno) | RUM 1st-party — recopila dwell time, recurrencia, embudo; cron de agregación diaria |
utt-beerfeed | /api/news | radar de noticias cerveceras por ciudad — cron lunes |
utt-static | assets estáticos | sirve CSS, JS, imágenes vía ASSETS binding |
| base | id | contenido principal |
|---|---|---|
tripbeer-db | principal | cervecerías BR, usuarios, itinerarios, pasaportes, premiaciones, estilos, horarios, social, analytics |
tripbeer-map | geo | cervecerías globales con lat/lon/slug para búsqueda del mapa |
DB_AMERICAS | continente | US, CA, AR, CL, MX — fallback del mapa |
DB_EUROPE | continente | DE, BE, CZ, FR, ES, IT, PT, UK, NL, NO, SE… |
utt-analytics | id: 170900e5 | eventos RUM, sesiones, dwell, embudo de jornada |
| namespace | id | uso |
|---|---|---|
UTT_CACHE | 4b5519d0… | páginas HTML (page:{nombre}.html), sesiones (sess:{id}), índices geo (idx:{ciudad}:{pais}), stats |
Patrón de claves KV: page:home.html · page:agm.html · page:copa.html · idx:porto+alegre:br:uuid · sess:abc123 · stats:total_cervejarias
Bucket: tripbeer-assets · CDN público: pub-b8f8998895a64e77a4fa43f286aa08dd.r2.dev/
Almacena logos de cervecerías, imágenes de hero (AVIF/WebP/PNG), og:images para WhatsApp (JPEG 1200×630 <300KB) y assets de campañas de socios.
páginas principales
páginas del sitioradar / mapa interactivo
funcionalidadEl radar (tripbier.com/mapa.html) es el corazón de la plataforma — un mapa Leaflet con 19.900+ pines de cervecerías en 16 países, con MarkerCluster para rendimiento y filtros en tiempo real.
Al abrirse, el mapa usa la geolocalización del navegador o la IP (Cloudflare cf.city) para centrarse automáticamente. Cada pin abre una tarjeta con rating, dirección, enlace a Instagram/sitio y botón "ver ruta en Google Maps". Las cervecerías premiadas obtienen un marcador diferenciado.
Parámetros de URL admitidos por el mapa:
| parámetro | ejemplo | efecto |
|---|---|---|
?lat=&lng=&zoom= | ?lat=-30.03&lng=-51.21&zoom=11 | centra en coordenadas específicas (utilizado por subdominios como AGM) |
?cidade=&uf= | ?cidade=Gramado&uf=RS | busca y centra en la ciudad indicada |
?roteiro= | ?roteiro=variedade-curitiba-3d | carga y destaca las cervecerías de un itinerario guardado |
?proximas=1 | ?proximas=1 | fuerza la búsqueda de las más cercanas al usuario |
concierge IA
pipeline maestroEl concierge tripbier es un pipeline de 6 mini-agentes que transforma un mensaje de texto en un itinerario cervecero personalizado. Cada agente recibe un sobre de datos, lo enriquece y lo pasa al siguiente.
El concierge es multifunción por diseño — no es un chatbot con menú de opciones. El usuario escribe en lenguaje natural y el sistema detecta la intención automáticamente, sin pedir que elija un modo:
| el usuario escribe | intención detectada | qué ocurre |
|---|---|---|
| "¿Hay IPA en Gramado?" | búsqueda | lista cervecerías con IPA en su carta, con enlace directo |
| "Explícame qué es una Weizen" | conversación | el sommelier responde sobre estilo, historia y maridaje |
| "Quiero pasar 3 días en Curitiba" | generar itinerario | pipeline completo: clima → curador → narrativa personalizada |
| "¿Dónde queda la Dado Bier?" | navegar | abre el mapa con el pin de la cervecería |
| "poa, fds, craft" | generar itinerario | normaliza sigla → extrae intención → genera itinerario de fin de semana en POA |
El Validador detecta los 4 modos sin ninguna llamada a LLM — lógica pura en JavaScript. Normaliza siglas (poa → Porto Alegre, cwb → Curitiba) antes del Extractor. El Curador consulta bases en cascada: DB Brasil → DB_AMERICAS → DB_EUROPE → DB_ASIA → Serper Discovery como fallback final.
pasaporte cervecero
gamificación · pwaEl pasaporte tripbier es una PWA (Progressive Web App) instalable que permite al usuario coleccionar sellos en cada visita a cervecerías socias. Es el motor de gamificación y fidelización de la plataforma.
Flujo del usuario: El usuario entra en passaporte.tripbier.com, lo instala en su celular (pantalla de inicio), se identifica con nombre y WhatsApp (sin registro), y recibe sellos al hacer check-in en cervecerías del circuito.
Circuitos disponibles: Cada itinerario de socio tiene un circuito con N paradas. Completar todas las paradas desbloquea un beneficio en la cervecería socia (regalo, descuento, experiencia exclusiva). El panel socio (admin-parceiro) muestra en tiempo real quién completó y permite enviar el premio por WhatsApp.
Niveles: Curioso → Aprendiz → Explorador → Maestro → Sommelier — basados en la cantidad de sellos acumulados en total.
itinerarios
generación y comparticiónLos itinerarios son generados por el pipeline Maestro y guardados automáticamente en D1 con una URL permanente y única — sin inicio de sesión. La URL puede compartirse por WhatsApp, incluirse en un correo o guardarse en favoritos.
Formato de la URL: tripbier.com/roteiros.html?id={slug} — donde el slug es generado por el Curador a partir de la ciudad, perfil y hash de la selección (ej: variedade-porto-alegre-3d-a1b2).
Cada itinerario almacena: lista de cervecerías (id, nombre, nota del curador), ciudad, perfil elegido, número de días, clima en el momento de la generación y la narrativa del Presentador.
16 países
cobertura globaltripbier tiene cobertura activa en 16 países, con base de datos, ciudades editoriales y enrutamiento por el concierge. Cada país tiene páginas de ciudades e integración con el mapa global.
Las páginas de países son dinámicas — no existen como archivos estáticos. Son generadas en tiempo real por el worker a partir de los datos del D1: cervecerías, ciudades, premiaciones y contenido editorial. Esto significa que agregar un nuevo país a la base de datos crea automáticamente todas sus páginas, sin ningún trabajo manual de publicación. Es infraestructura de escala disfrazada de contenido.
páginas de ciudades
editorial geográficoCada ciudad con masa crítica de cervecerías recibe una página editorial curada — no generada automáticamente, sino escrita con identidad local. La plantilla base es caxias.html (patrón serifado con sidebar, hero, pull-quote y grid de tarjetas).
Estructura de la página: hero con foto local → editorial "por qué visitar" → pull-quote → grid de cervecerías con rating/insta/sitio/agente → eventos → itinerario sugerido. La sección de noticias es alimentada por utt-beerfeed en tiempo real.
Todas las páginas de ciudades internacionales están en el subdirectorio del país: /de/berlim.html, /be/bruges.html, /it/roma.html, etc. Al igual que las páginas de países, las páginas de ciudades son generadas dinámicamente — el worker construye el HTML a partir del D1 en cada solicitud, sin archivos precompilados. Una nueva ciudad con cervecerías suficientes en la base ya tiene su página disponible.
| destacado | enlace |
|---|---|
| Caxias do Sul (RS) — plantilla de referencia | tripbier.com/caxias.html |
| Blumenau (SC) — capital catarinense | tripbier.com/blumenau.html |
| Porto Alegre (RS) — polo AGM | tripbier.com/porto-alegre.html |
| Gramado (RS) — turismo + craft | tripbier.com/gramado.html |
| Brujas (Bélgica) — referencia mundial | tripbier.com/be/bruges.html |
| Berlín (Alemania) | tripbier.com/de/berlin.html |
| Praga (República Checa) | tripbier.com/cz/praga.html |
landing pages de cervecerías
virtual landingLas cervecerías premiadas (CBC, WBC o WBA) reciben automáticamente una landing page dinámica generada a partir de los datos del D1 — sin intervención manual. El acceso es vía subdominio: slug.tripbier.com.
Contenido mostrado: nombre, ciudad/estado, rating y votos Google, horarios de atención por día de la semana, cervezas en producción (nombre, estilo, ABV, IBU), premiaciones con medalla y año, blog posts relacionados, mapa embed, botones para Instagram/sitio/WhatsApp y chat con agente IA especializado en la cervecería.
Regla de acceso: Si la cervecería tiene premiación → renderiza landing page completa. Si no tiene premiación pero tiene Instagram o sitio → redirige (302) a la red social. Si no tiene nada → 404.
Caché: cada landing page se almacena en el edge cache de Cloudflare por 1 hora (stale-while-revalidate=86400) — cero CPU en las visitas recurrentes.
concursos y premiaciones
palmaréstripbier indexa las medallas de los principales concursos de cerveza artesanal y las muestra en las landing pages de cervecerías y en la página de premiaciones. Las medallas son criterio de clasificación en el Curador.
| concurso | sigla | alcance | medallas |
|---|---|---|---|
| Campeonato Brasileiro de Cerveja | CBC | Nacional — Blumenau/SC | Gran Champion, Oro, Plata, Bronce |
| World Beer Cup | WBC | Internacional — EUA | Gold, Silver, Bronze |
| World Beer Awards | WBA | Internacional — UK | Country Winner, Gold, Silver |
| Concurso Gaúcho de Cerveja (AGM) | CGCBA | RS — organizado por AGM | Oro, Plata, Bronce |
| Mondial de la Bière | MDB | Brasil + Internacional | Médaille d'Or, d'Argent, de Bronze |
panel socio
admin · cerveceríasEl panel socio es la interfaz de gestión para propietarios de cervecerías. Acceso vía slug de la cervecería (sin inicio de sesión — auth por token vía URL, a implementar). URL directa: tripbier.com/admin-parceiro?slug={slug}.
| pestaña | qué gestiona | tabla D1 |
|---|---|---|
| 🗺️ itinerarios | Participantes de los circuitos del pasaporte: progreso, check-ins, botón "premiar" vía WhatsApp | passaporte_carimbos · passaportes |
| 🍺 cervezas | Catálogo de cervezas: nombre, estilo, ABV, IBU, descripción, foto (URL) | estilos_cervejaria |
| 📋 carta | Ítems de la carta: categoría, nombre, precio, descripción, foto — visible en la landing page | lp_cardapio |
| 🎯 promos | Campañas: título, tipo, descuento %, validez, toggle activo/inactivo | lp_campanhas |
| 🕐 horarios | Grilla semanal Lunes→Domingo: abre, cierra, cerrado, observación | horarios |
agm — associação gaúcha de microcervejarias
subdominio · alianzaagm.tripbier.com es un subdominio dedicado a la alianza tripbier × AGM — una pitch page editorial con las 19 cervecerías asociadas mapeadas, historia del movimiento craft gaúcho y CTA para afiliación.
Contenido histórico basado en investigación académica verificada: Cruz, R.C. (2016). Consumo e Formação de Mercado: um estudo sobre as microcervejarias de Porto Alegre. Dissertação UNISINOS.
Cronología: Dado Bier (1995, primera microcervejaria BR) → WE Consultoria (1997) → Acerva Gaúcha (2003) → AGM fundada por Jorge Gitzler → ICMS reducido en RS → Polo Anchieta (2010) → 50+ asociadas hoy.
claim your brewery
adquisición b2bLas cervecerías sin perfil completo muestran un CTA "¿Esta es tu cervecería?" en la landing page y en el chat widget. Al hacer clic, el propietario completa un formulario simple (nombre, e-mail, cargo, WhatsApp) que genera un lead en D1 (reivindicacoes) y dispara una notificación interna.
Es el embudo de entrada al modelo B2B: Starter (R$89/mes) → Professional (R$149/mes) → Premium (R$297/mes), con incremento de funciones en el panel socio y visibilidad en el mapa.
api endpoints
referencia técnica| método | endpoint | descripción |
|---|---|---|
| GET | /api/proximas | busca cervecerías por coords, ciudad o texto — motor principal del mapa y concierge |
| GET | /api/suggest?q=&pais= | autocompletado de ciudades (search-as-you-type, KV) |
| GET | /api/stats | total de cervecerías activas |
| GET | /api/ping | analytics: registra enter/leave/click con geo y dispositivo |
| POST | /api/chat | envía mensaje al pipeline Maestro y recibe respuesta del concierge |
| GET | /api/news?cidade=&limit= | noticias cerveceras por ciudad (utt-beerfeed) |
| POST | /api/news/collect | fuerza recolección manual de noticias (normalmente cron lunes) |
| GET | /api/estilos?q= | busca cervezas por estilo con foto — alimenta el grid de estilos |
| GET | /api/parceiro/perfil?slug= | devuelve datos completos de la cervecería: cervezas, carta, promos, horarios |
| POST | /api/parceiro/cerveja | crea o actualiza cerveza en el catálogo de la cervecería |
| DELETE | /api/parceiro/cerveja/:id | elimina cerveza del catálogo |
| POST | /api/parceiro/cardapio | crea o actualiza ítem de la carta |
| DELETE | /api/parceiro/cardapio/:id | desactiva ítem de la carta (soft delete) |
| POST | /api/parceiro/campanha | crea o actualiza promoción/campaña |
| PUT | /api/parceiro/campanha/:id/toggle | activa o desactiva campaña |
| DELETE | /api/parceiro/campanha/:id | elimina campaña permanentemente |
| POST | /api/parceiro/horario | guarda grilla de horarios (upsert por día de la semana) |
| POST | /api/checkin | registra check-in en el pasaporte (sello) |
| GET | /api/meu-passaporte | devuelve el pasaporte del usuario (por sesión) |
| POST | /api/roteiro-salvar | guarda itinerario generado por Maestro en D1 |
| GET | /api/admin/painel?roteiro= | datos del circuito para el panel socio (participantes, progreso) |
| GET | /sitemap.xml | sitemap dinámico con todas las cervecerías + páginas principales |
analytics
rum 1st-partytripbier usa analytics 1st-party — sin Google Analytics, sin cookies de terceros. El tracker (/a/tracker.js) es cargado por todas las páginas y envía eventos a /collect en utt-analytics.
Datos recopilados: páginas visitadas, tiempo de permanencia (dwell), recurrencia de sesión, embudo de conversión (inicio → mapa → itinerario → pasaporte), país/ciudad (CF headers), tipo de dispositivo. Sin PII — el identificador es hash SHA1 de IP+UA.
Cron diario: utt-analytics agrega los eventos brutos y graba resúmenes diarios en D1 (id: 170900e5) — visitantes únicos, pageviews, países top-5, bandwidth. El dashboard analytics lee de esos resúmenes.
Clics rastreados: Instagram, sitio, WhatsApp — por cervecería, por origen geográfico, por dispositivo.
privacidad
privacidad · complianceEl banner de cookies es inyectado por el worker en todas las páginas vía middleware — ninguna página necesita incluir el script manualmente. El consentimiento se almacena en localStorage por 365 días.
deploy y operaciones
infraestructura · wranglerTodo el deploy se realiza con Wrangler CLI desde el directorio G:\Site\tripbier\utt-engine\PRD\js\. La configuración está en wrangler.toml. Las credenciales de API (OpenAI, Serper, Google Places) están en G:\Site\tripbier\upg-engine\pipeline\.env.
# Deploy del worker principal npx wrangler deploy --config wrangler.toml # Publicar página en KV (HTML → page:nombre.html) npx wrangler kv key put "page:agm.html" \ --path ../html/agm.html \ --remote --binding UTT_CACHE --config wrangler.toml # Upload de imagen a R2 npx wrangler r2 object put "tripbeer-assets/agm/foto.png" \ --file ./foto.png --remote --config wrangler.toml # Query en D1 npx wrangler d1 execute tripbeer-db \ --command "SELECT COUNT(*) FROM cervejarias" \ --remote --json --config wrangler.toml
Regla de oro: modificar el worker o el HTML sin antes listar qué cambia y a quién afecta puede causar una regresión silenciosa. El proceso correcto: (1) listar cambios e impacto, (2) confirmar con Marcos, (3) publicar.
Atención: Tripbier y ClubTour son cuentas/negocios separados — nunca cruzar workers, datos ni credenciales entre los dos.
capa social
comunidadLa capa social permite que los usuarios del pasaporte interactúen entre sí: compartan itinerarios, comenten en cervecerías, sigan a otros viajeros y acumulen un historial de visitas visible en el perfil público.
Identidad basada en teléfono + nombre (sin contraseña). Avatar generado automáticamente por DiceBear. El feed de actividad muestra visitas recientes de la comunidad en cada ciudad.
Moderación: regex automático detecta teléfonos, enlaces y contenido inapropiado en comentarios antes de guardarlos en D1.