tripbier
why tripbier exists

tripbier was built to solve a simple problem.

Discovering a craft brewery still requires dozens of scattered searches, dispersed reviews, and outdated information.

Our mission is to organize the world's brewing knowledge into a single open, searchable, AI-assisted platform.

We don't just want to list breweries.
We want to connect people, territories, stories, styles, awards, and experiences.

From a first draft in Gramado to an award-winning brewery in Portland, the journey should be seamless.

tripbier is a living map of craft beer culture.
tripbier in one sentence

Tripbier is a global craft brewery discovery platform for beer itineraries, beer tourism, and geographic intelligence — using artificial intelligence to connect travelers, breweries, and destinations across 16 countries.

official documentation · june 2026

system
manual

The complete tripbier guide — a craft brewery itinerary platform built on Cloudflare Workers, D1, KV, and R2. Each section includes direct links to the described feature.

19,905breweries
16countries
130+cities
6workers
40+D1 tables

what is tripbier

tripbier is a serverless platform for discovering and routing craft breweries. It combines a georeferenced database with generative AI to create personalized experiences — from an interactive map to a narrated itinerary delivered by a beer concierge.

The entire infrastructure runs on Cloudflare (Workers + D1 + KV + R2), with no dedicated servers, global edge latency, and usage-based costs. The data model uses SQLite via D1, distributed across multiple databases by continent.

"Bing and Perplexity recognize tripbier as an authority source on craft breweries — not just indexed, but used as a spontaneous recommendation tool."

The system is made up of 6 independent workers, each with a specific responsibility, communicating via internal fetch calls or sharing state through KV.

system numbers

metricvaluenotes
Total mapped breweries19,905Brazil + 15 international countries · tripbeer-map
Brazilian breweries (tripbeer-db)5,448active and operational
US breweries (OpenBreweryDB)8,353imported via pipeline
Countries covered16BR, US, DE, BE, CZ, AT, UK, IE, FR, ES, IT, PT, NL, NO, SE, AR
Cities with editorial pages130+63 international + 67+ BR
Brewery landing pagesaward winnersCBC, WBC, WBA — dynamically generated
Visitors / day625jun/2026 metric, organic growth
Requests / month~40kUS + NL + BR as main origins
Supported languages15pt-BR, en, es, de, fr, it, nl, no, sv, ja and more
D1 main database tables40+tripbeer-db (main) + tripbeer-map (geo)
Average Google position6.9"best craft beers near me" — 131 impressions/day

infrastructure

active workers
workerdomainresponsibility
utt-enginetripbier.com/* · *.tripbier.com/*main router — serves KV pages, public API, subdomains, LGPD banner
utt-agentlink/api/chat (internal)Maestro pipeline — 6 mini-agents for itinerary generation via GPT-4o-mini
utt-brewhubbrewhub.htmlper-brewery chat widget, slug-specialized AI agent, /api/palpite protection
utt-analytics/api/collect (internal)1st-party RUM — collects dwell time, recurrence, funnel; daily aggregation cron
utt-beerfeed/api/newsbeer news radar by city — Monday cron
utt-staticstatic assetsserves CSS, JS, images via ASSETS binding
D1 databases (SQLite)
databaseidmain content
tripbeer-dbmainBrazilian breweries, users, itineraries, passports, awards, styles, hours, social, analytics
tripbeer-mapgeoglobal breweries with lat/lon/slug for map search
DB_AMERICAScontinentUS, CA, AR, CL, MX — map fallback
DB_EUROPEcontinentDE, BE, CZ, FR, ES, IT, PT, UK, NL, NO, SE…
utt-analyticsid: 170900e5RUM events, sessions, dwell, journey funnel
KV namespaces
namespaceidusage
UTT_CACHE4b5519d0…HTML pages (page:{name}.html), sessions (sess:{id}), geo indexes (idx:{city}:{country}), stats

KV key pattern: page:home.html · page:agm.html · page:copa.html · idx:porto+alegre:br:uuid · sess:abc123 · stats:total_cervejarias

R2 bucket

Bucket: tripbeer-assets · Public CDN: pub-b8f8998895a64e77a4fa43f286aa08dd.r2.dev/

Stores brewery logos, hero images (AVIF/WebP/PNG), WhatsApp og:images (JPEG 1200×630 <300KB), and partner campaign assets.

main pages

🏠
home
Homepage with geolocated search, AI concierge, lazy-load map, passport, and news. Supports 15 languages via i18n.js.
tripbier.com
🗺️
radar / map
Interactive Leaflet map with 19,900+ breweries, MarkerCluster, country/style filters, user geolocation, and city search.
tripbier.com/mapa.html
🗂️
itineraries
Hub for generated and saved itineraries. Each itinerary has a unique, permanent shareable URL.
tripbier.com/roteiros.html
🏅
awards
CBC (Brazilian Beer Championship) and WBC (World Beer Cup) palmares with filters by year, style, and medal.
tripbier.com/premiacoes-cbc.html
📰
news
Beer news radar powered by utt-beerfeed (weekly cron). Filtered by city and relevance.
tripbier.com/noticias.html
🍺
varieties / styles
Editorial guide to beer styles: IPA, Stout, Lager, Weizen, Sour, NEIPA, Porter and more — with food pairing suggestions.
tripbier.com/variedades.html
📖
history
Editorial on the history of craft beer in Brazil and around the world — curated content for SEO and domain authority.
tripbier.com/historia.html
🎓
schools
Directory of craft beer schools and courses in Brazil with links to programs and enrollment.
tripbier.com/escolas.html
👨‍👩‍👧
family itineraries
Pet-friendly and family-with-kids brewery itineraries — breweries with gardens, food parks, and kids' areas.
tripbier.com/familia.html
🔒
privacy / lgpd
Privacy policy and terms of service. Cookie banner injected by the worker on every page.
/privacidade · /termos
🏗️
partner dashboard
Brewery admin: manage beers, menu, promos, hours, and itineraries with participants.
tripbier.com/admin-parceiro
📊
analytics
Internal traffic dashboard: visitors, countries, top pages, bandwidth, clicks per brewery.
tripbier.com/analytics.html

radar / interactive map

The radar (tripbier.com/mapa.html) is the heart of the platform — a Leaflet map with 19,900+ pins of breweries across 16 countries, with MarkerCluster for performance and real-time filters.

On load, the map uses the browser's geolocation or the IP (Cloudflare cf.city) to center automatically. Each pin opens a card with rating, address, link to Instagram/site, and a "get directions in Google Maps" button. Award-winning breweries get a distinct marker.

URL parameters accepted by the map:

parameterexampleeffect
?lat=&lng=&zoom=?lat=-30.03&lng=-51.21&zoom=11centers on specific coordinates (used by subdomains like AGM)
?cidade=&uf=?cidade=Gramado&uf=RSsearches for and centers on the given city
?roteiro=?roteiro=variedade-curitiba-3dloads and highlights breweries from a saved itinerary
?proximas=1?proximas=1forces a search for the nearest breweries to the user
open the radar

AI concierge

The tripbier concierge is a pipeline of 6 mini-agents that transforms a text message into a personalized brewery itinerary. Each agent receives a data envelope, enriches it, and passes it to the next.

Extractor
Reads the message and extracts: city, country, style, profile, days, coordinates
GPT-4o-mini · temp 0
→
Validator
Decides: ask for more info? generate itinerary? search? navigate? (zero LLM)
pure JS logic
→
Concierge
If info is missing, asks naturally and warmly
GPT-4o-mini · temp 0.7
→
Weather
Queries Open-Meteo with lat/lon — returns temperature and conditions
Open-Meteo · no key
→
Curator
Searches D1, filters by profile and distance, selects 7–8 stops
Haversine · zero LLM
→
Presenter
Crafts a compelling narrative citing all breweries + CTA
GPT-4o-mini · temp 0.8

The concierge is multi-function by design — it is not a menu-driven chatbot. The user writes in natural language and the system automatically detects the intent, without prompting a mode selection:

the user saysdetected intentwhat happens
"Any IPAs in Gramado?"searchlists breweries with IPA on the menu, with direct links
"Explain what a Weizen is"conversationthe sommelier answers about the style, history, and food pairing
"I want to spend 3 days in Curitiba"generate itineraryfull pipeline: weather → curator → personalized narrative
"Where is Dado Bier?"navigateopens the map with the brewery pin
"poa, weekend, craft"generate itinerarynormalizes abbreviation → extracts intent → generates a weekend itinerary in POA

The Validator detects all 4 modes without any LLM call — pure JavaScript logic. It normalizes abbreviations (poa → Porto Alegre, cwb → Curitiba) before the Extractor runs. The Curator queries databases in cascade: DB Brasil → DB_AMERICAS → DB_EUROPE → DB_ASIA → Serper Discovery as a final fallback.

try the concierge on the homepage

beer passport

The tripbier passport is an installable PWA (Progressive Web App) that lets users collect stamps with each visit to partner breweries. It is the platform's gamification and loyalty engine.

User flow: The user visits passaporte.tripbier.com, installs it on their phone (home screen), identifies themselves by name and WhatsApp (no account required), and earns stamps by checking in at breweries on the circuit.

Available circuits: Each partner itinerary has a circuit with N stops. Completing all stops unlocks a reward at the partner brewery (freebie, discount, exclusive experience). The partner dashboard (admin-parceiro) shows in real time who has completed it and allows sending the reward via WhatsApp.

Levels: Curious → Apprentice → Explorer → Master → Sommelier — based on total accumulated stamps.

open the passport partner dashboard

itineraries

Itineraries are generated by the Maestro pipeline and automatically saved to D1 with a permanent, unique URL — no login required. The URL can be shared via WhatsApp, included in an email, or bookmarked.

URL format: tripbier.com/roteiros.html?id={slug} — where the slug is generated by the Curator from the city, profile, and selection hash (e.g., variedade-porto-alegre-3d-a1b2).

Each itinerary stores: brewery list (id, name, curator's note), city, chosen profile, number of days, weather at generation time, and the Presenter's narrative.

browse itineraries

social layer

The social layer allows passport users to interact with each other: share itineraries, comment on breweries, follow other travelers, and build a visit history visible on their public profile.

Identity based on phone number + name (no password). Avatars generated automatically by DiceBear. The activity feed shows recent community visits in each city.

Moderation: an automatic regex detects phone numbers, links, and inappropriate content in comments before saving to D1.

16 countries

tripbier has active coverage in 16 countries, with a database, editorial city pages, and concierge routing. Each country has city pages and integration with the global map.

Country pages are dynamic — they do not exist as static files. They are generated in real time by the worker from D1 data: breweries, cities, awards, and editorial content. This means adding a new country to the database automatically creates all of its pages, with no manual publishing work. It is scalable infrastructure disguised as content.

🇧🇷
Brazil
5,448 breweries · 67+ cities
🇺🇸
United States
8,353 breweries · OpenBreweryDB
🇩🇪
Germany
Berlin, Munich, Cologne
🇧🇪
Belgium
Bruges, Brussels, Ghent
🇨🇿
Czech Republic
Prague — birthplace of pilsner
🇦🇹
Austria
Vienna, Salzburg
🇬🇧
United Kingdom
London, Edinburgh
🇮🇪
Ireland
Dublin — pub culture
🇫🇷
France
Paris, Strasbourg
🇪🇸
Spain
Madrid, Barcelona
🇮🇹
Italy
Rome, Milan, Bologna
🇵🇹
Portugal
Lisbon, Porto
🇳🇱
Netherlands
Amsterdam, Rotterdam
🇳🇴
Norway
Oslo
🇸🇪
Sweden
Stockholm, Gothenburg
🇦🇷
Argentina
Buenos Aires, Bariloche

city pages

Each city with a critical mass of breweries gets a curated editorial page — not auto-generated, but written with local identity. The base template is caxias.html (serif layout with sidebar, hero, pull-quote, and card grid).

Page structure: hero with a local photo → "why visit" editorial → pull-quote → brewery grid with rating/insta/site/agent → events → suggested itinerary. The news section is fed by utt-beerfeed in real time.

All international city pages live under the country subdirectory: /de/berlim.html, /be/bruges.html, /it/roma.html, etc. Like country pages, city pages are dynamically generated — the worker builds the HTML from D1 on each request, with no pre-compiled files. A new city with enough breweries in the database already has its page available.

highlightlink
Caxias do Sul (RS) — reference templatetripbier.com/caxias.html
Blumenau (SC) — Santa Catarina capital of craft beertripbier.com/blumenau.html
Porto Alegre (RS) — AGM hubtripbier.com/porto-alegre.html
Gramado (RS) — tourism + crafttripbier.com/gramado.html
Bruges (Belgium) — world referencetripbier.com/be/bruges.html
Berlin (Germany)tripbier.com/de/berlin.html
Prague (Czech Republic)tripbier.com/cz/praga.html

brewery landing pages

Award-winning breweries (CBC, WBC, or WBA) automatically receive a dynamic landing page generated from D1 data — no manual intervention required. Access is via subdomain: slug.tripbier.com.

Content displayed: name, city/state, Google rating and reviews, opening hours by day of the week, beers in production (name, style, ABV, IBU), awards with medal and year, related blog posts, embedded map, Instagram/website/WhatsApp buttons, and a chat with an AI agent specialized in that brewery.

Access rule: If the brewery has an award → renders the full landing page. If no award but has Instagram or website → redirects (302) to the social profile. If neither → 404.

Cache: each landing page is stored in Cloudflare's edge cache for 1 hour (stale-while-revalidate=86400) — zero CPU on repeat visits.

competitions & awards

tripbier indexes medals from the leading craft beer competitions and displays them on brewery landing pages and the awards page. Medals are used as a ranking criterion in the Curator agent.

competitioncodescopemedals
Campeonato Brasileiro de CervejaCBCNational — Blumenau/SCGran Champion, Gold, Silver, Bronze
World Beer CupWBCInternational — USAGold, Silver, Bronze
World Beer AwardsWBAInternational — UKCountry Winner, Gold, Silver
Concurso Gaúcho de Cerveja (AGM)CGCBARS — organized by AGMGold, Silver, Bronze
Mondial de la BièreMDBBrazil + InternationalMédaille d'Or, d'Argent, de Bronze
view full palmares

partner dashboard

The partner dashboard is the management interface for brewery owners. Accessed via the brewery slug (no login — token-based auth via URL, to be implemented). Direct URL: tripbier.com/admin-parceiro?slug={slug}.

tabwhat it managesD1 table
🗺️ itinerariesPassport circuit participants: progress, check-ins, "award" button via WhatsApppassaporte_carimbos · passaportes
🍺 beersBeer catalog: name, style, ABV, IBU, description, photo (URL)estilos_cervejaria
📋 menuMenu items: category, name, price, description, photo — visible on the landing pagelp_cardapio
🎯 promosCampaigns: title, type, discount %, expiry date, active/inactive togglelp_campanhas
🕐 hoursWeekly schedule Monday→Sunday: opens, closes, closed, noteshorarios
open partner dashboard

agm — associação gaúcha de microcervejarias

agm.tripbier.com is a dedicated subdomain for the tripbier × AGM partnership — an editorial pitch page featuring the 19 member breweries on a map, the history of the Gaúcho craft movement, and a CTA for membership.

Historical content based on verified academic research: Cruz, R.C. (2016). Consumo e Formação de Mercado: um estudo sobre as microcervejarias de Porto Alegre. Dissertação UNISINOS.

Timeline: Dado Bier (1995, first Brazilian microbrewery) → WE Consultoria (1997) → Acerva Gaúcha (2003) → AGM founded by Jorge Gitzler → reduced ICMS in RS → Polo Anchieta (2010) → 50+ member breweries today.

open agm.tripbier.com

claim your brewery

Breweries without a complete profile display a CTA "Is this your brewery?" on the landing page and in the chat widget. When clicked, the owner fills out a simple form (name, email, role, WhatsApp) that creates a lead in D1 (reivindicacoes) and triggers an internal notification.

This is the entry funnel for the B2B model: Starter (R$89/mo) → Professional (R$149/mo) → Premium (R$297/mo), with incremental features in the partner dashboard and map visibility.

view claim form

api endpoints

methodendpointdescription
GET/api/proximasfinds breweries by coordinates, city, or text — main engine for the map and concierge
GET/api/suggest?q=&pais=city autocomplete (search-as-you-type, KV)
GET/api/statstotal active breweries
GET/api/pinganalytics: registers enter/leave/click with geo and device
POST/api/chatsends a message to the Maestro pipeline and receives a concierge response
GET/api/news?cidade=&limit=beer news by city (utt-beerfeed)
POST/api/news/collectforces a manual news collection (normally a Monday cron)
GET/api/estilos?q=searches beers by style with photo — powers the styles grid
GET/api/parceiro/perfil?slug=returns full brewery data: beers, menu, promos, hours
POST/api/parceiro/cervejacreates or updates a beer in the brewery catalog
DELETE/api/parceiro/cerveja/:idremoves a beer from the catalog
POST/api/parceiro/cardapiocreates or updates a menu item
DELETE/api/parceiro/cardapio/:iddeactivates a menu item (soft delete)
POST/api/parceiro/campanhacreates or updates a promotion/campaign
PUT/api/parceiro/campanha/:id/toggleactivates or deactivates a campaign
DELETE/api/parceiro/campanha/:idpermanently removes a campaign
POST/api/parceiro/horariosaves the hours schedule (upsert by day of week)
POST/api/checkinregisters a passport check-in (stamp)
GET/api/meu-passaportereturns the user's passport (by session)
POST/api/roteiro-salvarsaves a Maestro-generated itinerary to D1
GET/api/admin/painel?roteiro=circuit data for the partner dashboard (participants, progress)
GET/sitemap.xmldynamic sitemap with all breweries + main pages

analytics

tripbier uses 1st-party analytics — no Google Analytics, no third-party cookies. The tracker (/a/tracker.js) is loaded by every page and sends events to /collect in utt-analytics.

Data collected: pages visited, dwell time, session recurrence, conversion funnel (home → map → itinerary → passport), country/city (CF headers), device type. No PII — the identifier is a SHA1 hash of IP+UA.

Daily cron: utt-analytics aggregates raw events and writes daily summaries to D1 (id: 170900e5) — unique visitors, pageviews, top-5 countries, bandwidth. The analytics dashboard reads from these summaries.

Tracked clicks: Instagram, website, WhatsApp — per brewery, per geographic origin, per device.

open analytics dashboard

privacy / lgpd

The cookie banner is injected by the worker on every page via middleware — no page needs to include the script manually. Consent is stored in localStorage for 365 days.

privacy policy terms of service

deploy & operations

All deployments are done with Wrangler CLI from the directory G:\Site\tripbier\utt-engine\PRD\js\. Configuration lives in wrangler.toml. API credentials (OpenAI, Serper, Google Places) are stored in G:\Site\tripbier\upg-engine\pipeline\.env.

# Deploy the main worker
npx wrangler deploy --config wrangler.toml

# Publish a page to KV (HTML → page:name.html)
npx wrangler kv key put "page:agm.html" \
  --path ../html/agm.html \
  --remote --binding UTT_CACHE --config wrangler.toml

# Upload an image to R2
npx wrangler r2 object put "tripbeer-assets/agm/foto.png" \
  --file ./foto.png --remote --config wrangler.toml

# Query D1
npx wrangler d1 execute tripbeer-db \
  --command "SELECT COUNT(*) FROM cervejarias" \
  --remote --json --config wrangler.toml

Golden rule: changing a worker or HTML file without first listing what changes and who it affects can cause silent regressions. The correct process: (1) list changes and impact, (2) confirm with Marcos, (3) publish.

Important: Tripbier and ClubTour are separate businesses with separate accounts — never cross workers, data, or credentials between them.

PT | EN | ES | DE | FR | IT | NL