{"id":2497,"date":"2026-04-08T18:19:29","date_gmt":"2026-04-08T15:19:29","guid":{"rendered":"https:\/\/btchel.com\/?page_id=2497"},"modified":"2026-04-10T10:59:29","modified_gmt":"2026-04-10T07:59:29","slug":"survey-results","status":"publish","type":"page","link":"https:\/\/btchel.com\/fi\/survey-results\/","title":{"rendered":"BTCHEL 2026 Survey Results Dashboard"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>BTCHEL 2026 \u2014 Live Survey Dashboard<\/title>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@400;500;600;700&#038;family=Roboto:wght@300;400;500;700&#038;display=swap\" rel=\"stylesheet\">\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/Chart.js\/4.4.1\/chart.umd.min.js\"><\/script>\n<style>\n:root {\n  --bg: #000000;\n  --surface: #141414;\n  --surface-2: #1a1a1a;\n  --border: #2a2a2a;\n  --text: #e8e8e8;\n  --text-muted: #888;\n  --accent: #f7931a;\n  --accent-dim: rgba(247,147,26,0.12);\n  --accent-glow: rgba(247,147,26,0.25);\n  --green: #22c55e;\n  --red: #ef4444;\n  --blue: #3b82f6;\n  --purple: #a855f7;\n  --cyan: #06b6d4;\n  --radius: 12px;\n}\n*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\nhtml { scroll-behavior: smooth; }\nbody {\n  font-family: 'Roboto', sans-serif;\n  background: var(--bg);\n  color: var(--text);\n  line-height: 1.6;\n  min-height: 100vh;\n}\n.container { max-width: 1200px; margin: 0 auto; padding: 24px; }\n\n\/* Loading overlay *\/\n.loading-overlay {\n  position: fixed;\n  inset: 0;\n  background: var(--bg);\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  z-index: 10000;\n  transition: opacity 0.5s;\n}\n.loading-overlay.hidden { opacity: 0; pointer-events: none; }\n.loading-spinner {\n  width: 48px;\n  height: 48px;\n  border: 3px solid var(--border);\n  border-top-color: var(--accent);\n  border-radius: 50%;\n  animation: spin 0.8s linear infinite;\n}\n@keyframes spin { to { transform: rotate(360deg); } }\n.loading-text {\n  font-family: 'Montserrat', sans-serif;\n  font-size: 12px;\n  color: var(--text-muted);\n  letter-spacing: 2px;\n  text-transform: uppercase;\n  margin-top: 16px;\n}\n.error-state {\n  text-align: center;\n  padding: 80px 24px;\n}\n.error-state h2 { color: var(--red); margin-bottom: 12px; }\n.error-state p { color: var(--text-muted); max-width: 500px; margin: 0 auto; }\n.error-state button {\n  margin-top: 20px;\n  padding: 10px 24px;\n  background: var(--accent);\n  color: #000;\n  border: none;\n  border-radius: var(--radius);\n  font-family: 'Montserrat', sans-serif;\n  font-size: 12px;\n  cursor: pointer;\n  letter-spacing: 1px;\n}\n\n\/* Live indicator *\/\n.live-bar {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 8px 16px;\n  background: var(--surface);\n  border: 1px solid var(--border);\n  border-radius: 8px;\n  margin-bottom: 24px;\n  font-size: 12px;\n  color: var(--text-muted);\n}\n.live-dot {\n  display: inline-block;\n  width: 8px;\n  height: 8px;\n  background: var(--green);\n  border-radius: 50%;\n  margin-right: 8px;\n  animation: pulse 2s infinite;\n}\n@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } }\n.live-bar .refresh-btn {\n  background: none;\n  border: 1px solid var(--border);\n  color: var(--text-muted);\n  padding: 4px 12px;\n  border-radius: 6px;\n  font-family: 'Montserrat', sans-serif;\n  font-size: 10px;\n  cursor: pointer;\n  letter-spacing: 1px;\n  text-transform: uppercase;\n  transition: all 0.2s;\n}\n.live-bar .refresh-btn:hover { border-color: var(--accent); color: var(--accent); }\n\n\/* Header *\/\n.header { text-align: center; padding: 48px 0 40px; border-bottom: 1px solid var(--border); margin-bottom: 32px; }\n.header-tag { font-family: 'Montserrat', sans-serif; font-size: 11px; letter-spacing: 4px; text-transform: uppercase; color: var(--accent); display: block; margin-bottom: 12px; }\n.header h1 { font-size: clamp(28px, 4vw, 40px); font-weight: 700; background: linear-gradient(135deg, #fff 0%, #f7931a 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; margin-bottom: 8px; }\n.header p { color: var(--text-muted); font-size: 15px; font-weight: 300; }\n\n\/* KPI Row *\/\n.kpi-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 16px; margin-bottom: 32px; }\n.kpi { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 20px; text-align: center; transition: border-color 0.2s; }\n.kpi:hover { border-color: var(--accent); }\n.kpi-value { font-family: 'Montserrat', sans-serif; font-size: 32px; font-weight: 700; color: var(--accent); line-height: 1.2; }\n.kpi-label { font-size: 12px; color: var(--text-muted); text-transform: uppercase; letter-spacing: 1px; margin-top: 4px; }\n\n\/* Nav *\/\n.nav { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 32px; padding: 16px 0; border-bottom: 1px solid var(--border); position: sticky; top: 0; background: var(--bg); z-index: 100; }\n.nav-btn { font-family: 'Montserrat', sans-serif; font-size: 11px; letter-spacing: 1px; text-transform: uppercase; padding: 8px 16px; background: var(--surface); border: 1px solid var(--border); border-radius: 20px; color: var(--text-muted); cursor: pointer; transition: all 0.2s; text-decoration: none; }\n.nav-btn:hover, .nav-btn.active { background: var(--accent-dim); border-color: var(--accent); color: var(--accent); }\n\n\/* Cards *\/\n.section-title { font-family: 'Montserrat', sans-serif; font-size: 11px; letter-spacing: 3px; text-transform: uppercase; color: var(--accent); margin-bottom: 8px; }\n.section-heading { font-size: 24px; font-weight: 600; margin-bottom: 24px; }\n.card-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(340px, 1fr)); gap: 20px; margin-bottom: 48px; }\n.card-grid.single { grid-template-columns: 1fr; }\n.card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 24px; position: relative; overflow: hidden; }\n.card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 2px; background: linear-gradient(90deg, var(--accent), transparent); }\n.card h3 { font-size: 15px; font-weight: 500; margin-bottom: 16px; color: var(--text); }\n.chart-container { position: relative; width: 100%; }\n.chart-container.doughnut-chart { height: 280px; max-width: 280px; margin: 0 auto; }\n\n\/* Bar chart *\/\n.bar-list { display: flex; flex-direction: column; gap: 10px; }\n.bar-item { display: flex; align-items: center; gap: 10px; flex-wrap: nowrap; }\n.bar-label { font-size: 13px; width: 140px; min-width: 140px; text-align: right; color: var(--text-muted); flex-shrink: 0; line-height: 1.3; }\n.bar-track { flex: 1; height: 28px; background: var(--surface-2); border-radius: 6px; overflow: hidden; position: relative; min-width: 60px; }\n.bar-fill { height: 100%; border-radius: 6px; transition: width 1s cubic-bezier(0.4, 0, 0.2, 1); }\n.bar-value { font-family: 'Montserrat', sans-serif; font-size: 12px; font-weight: 700; color: var(--accent); min-width: 24px; text-align: right; flex-shrink: 0; }\n\n\/* Insight cards *\/\n.insight-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 20px; margin-bottom: 48px; }\n.insight { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 24px; border-left: 3px solid var(--accent); }\n.insight-icon { font-size: 24px; margin-bottom: 8px; }\n.insight h4 { font-size: 14px; font-weight: 600; margin-bottom: 8px; color: var(--accent); }\n.insight p { font-size: 13px; color: var(--text-muted); line-height: 1.7; }\n\n\/* Quote cards *\/\n.quote-grid { display: flex; flex-direction: column; gap: 12px; }\n.quote { padding: 14px 18px; background: var(--surface-2); border-radius: 8px; font-size: 13px; color: var(--text-muted); border-left: 2px solid var(--accent); font-style: italic; }\n\n@keyframes growBar { from { width: 0; } }\n\n@media (max-width: 768px) {\n  .card-grid { grid-template-columns: 1fr; }\n  .bar-label { font-size: 11px; width: 100px; min-width: 100px; }\n  .kpi-row { grid-template-columns: repeat(2, 1fr); }\n}\n<\/style>\n<\/head>\n<body>\n\n<!-- Loading State -->\n<div class=\"loading-overlay\" id=\"loadingOverlay\">\n  <div class=\"loading-spinner\"><\/div>\n  <div class=\"loading-text\">Loading survey data&#8230;<\/div>\n<\/div>\n\n<div class=\"container\" id=\"mainContent\" style=\"display:none;\">\n\n  <!-- Live indicator -->\n  <div class=\"live-bar\">\n    <div>\n      <span class=\"live-dot\"><\/span>\n      <span>Live data &middot; Updated <span id=\"lastUpdated\">&#8212;<\/span><\/span>\n    <\/div>\n    <div style=\"display:flex;gap:12px;align-items:center;\">\n      <label style=\"display:flex;align-items:center;gap:6px;cursor:pointer;\">\n        <input type=\"checkbox\" id=\"autoRefresh\" checked style=\"accent-color:var(--accent);\">\n        <span>Auto-refresh (60s)<\/span>\n      <\/label>\n      <button class=\"refresh-btn\" onclick=\"loadData()\">Refresh now<\/button>\n    <\/div>\n  <\/div>\n\n  <div class=\"header\">\n    <span class=\"header-tag\">Live Survey Dashboard<\/span>\n    <h1>BTCHEL 2026 Insights<\/h1>\n    <p id=\"headerSubtitle\">Loading&#8230;<\/p>\n  <\/div>\n\n  <!-- KPIs -->\n  <div class=\"kpi-row\">\n    <div class=\"kpi\"><div class=\"kpi-value\" id=\"kpi-total\">&#8212;<\/div><div class=\"kpi-label\">Total Responses<\/div><\/div>\n    <div class=\"kpi\"><div class=\"kpi-value\" id=\"kpi-returning\">&#8212;<\/div><div class=\"kpi-label\">Returning Attendees<\/div><\/div>\n    <div class=\"kpi\"><div class=\"kpi-value\" id=\"kpi-rating\">&#8212;<\/div><div class=\"kpi-label\">Avg Past Rating (\/ 5)<\/div><\/div>\n    <div class=\"kpi\"><div class=\"kpi-value\" id=\"kpi-attending\">&#8212;<\/div><div class=\"kpi-label\">Definitely \/ Likely<\/div><\/div>\n    <div class=\"kpi\"><div class=\"kpi-value\" id=\"kpi-bullish\">&#8212;<\/div><div class=\"kpi-label\">Bullish Sentiment<\/div><\/div>\n    <div class=\"kpi\"><div class=\"kpi-value\" id=\"kpi-spend\">&#8212;<\/div><div class=\"kpi-label\">Will Spend BTC<\/div><\/div>\n  <\/div>\n\n  <!-- Navigation -->\n  <div class=\"nav\">\n    <a class=\"nav-btn active\" href=\"#audience\">Audience<\/a>\n    <a class=\"nav-btn\" href=\"#discovery\">Discovery<\/a>\n    <a class=\"nav-btn\" href=\"#content\">Content<\/a>\n    <a class=\"nav-btn\" href=\"#expo\">Expo<\/a>\n    <a class=\"nav-btn\" href=\"#sentiment\">Sentiment<\/a>\n    <a class=\"nav-btn\" href=\"#attendance\">Attendance<\/a>\n    <a class=\"nav-btn\" href=\"#insights\">Insights<\/a>\n  <\/div>\n\n  <!-- AUDIENCE -->\n  <div id=\"audience\">\n    <span class=\"section-title\">01 \u2014 Audience Profile<\/span>\n    <h2 class=\"section-heading\">Who Are Your Attendees?<\/h2>\n    <div class=\"card-grid\">\n      <div class=\"card\"><h3>Role in Bitcoin Space<\/h3><div class=\"bar-list\" id=\"roleChart\"><\/div><\/div>\n      <div class=\"card\"><h3>Years of Bitcoin Experience<\/h3><div class=\"chart-container doughnut-chart\"><canvas id=\"expChart\"><\/canvas><\/div><\/div>\n      <div class=\"card\"><h3>Country Distribution<\/h3><div class=\"bar-list\" id=\"countryChart\"><\/div><\/div>\n      <div class=\"card\"><h3>Previous Attendance<\/h3><div class=\"chart-container doughnut-chart\"><canvas id=\"attendedChart\"><\/canvas><\/div><\/div>\n    <\/div>\n  <\/div>\n\n  <!-- DISCOVERY -->\n  <div id=\"discovery\">\n    <span class=\"section-title\">02 \u2014 Marketing Channels<\/span>\n    <h2 class=\"section-heading\">How They Found You &#038; Stay Updated<\/h2>\n    <div class=\"card-grid\">\n      <div class=\"card\"><h3>Discovery Channels<\/h3><div class=\"bar-list\" id=\"discoveryChart\"><\/div><\/div>\n      <div class=\"card\"><h3>Preferred Update Channels<\/h3><div class=\"bar-list\" id=\"updateChart\"><\/div><\/div>\n    <\/div>\n  <\/div>\n\n  <!-- CONTENT -->\n  <div id=\"content\">\n    <span class=\"section-title\">03 \u2014 Content &#038; Programming<\/span>\n    <h2 class=\"section-heading\">What They Want to See &#038; Hear<\/h2>\n    <div class=\"card-grid\">\n      <div class=\"card\"><h3>Most Wanted Speaker Types<\/h3><div class=\"bar-list\" id=\"speakerChart\"><\/div><\/div>\n      <div class=\"card\"><h3>Bitcoin Topics of Interest<\/h3><div class=\"bar-list\" id=\"topicsChart\"><\/div><\/div>\n    <\/div>\n    <div class=\"card-grid\">\n      <div class=\"card\"><h3>Side Topics (&#8220;Beyond Bitcoin&#8221;)<\/h3><div class=\"bar-list\" id=\"sideChart\"><\/div><\/div>\n      <div class=\"card\"><h3>Primary Motivation<\/h3><div class=\"bar-list\" id=\"motivationChart\"><\/div><\/div>\n    <\/div>\n  <\/div>\n\n  <!-- EXPO -->\n  <div id=\"expo\">\n    <span class=\"section-title\">04 \u2014 Expo &#038; Products<\/span>\n    <h2 class=\"section-heading\">What They Want to Buy &#038; See<\/h2>\n    <div class=\"card-grid\">\n      <div class=\"card\"><h3>Product Category Interest<\/h3><div class=\"bar-list\" id=\"productsChart\"><\/div><\/div>\n      <div class=\"card\"><h3>Willing to Spend BTC?<\/h3><div class=\"chart-container doughnut-chart\"><canvas id=\"spendChart\"><\/canvas><\/div><\/div>\n    <\/div>\n  <\/div>\n\n  <!-- SENTIMENT -->\n  <div id=\"sentiment\">\n    <span class=\"section-title\">05 \u2014 Market Sentiment<\/span>\n    <h2 class=\"section-heading\">Community Mood<\/h2>\n    <div class=\"card-grid\">\n      <div class=\"card\"><h3>Bitcoin Sentiment<\/h3><div class=\"chart-container\" style=\"height:200px\"><canvas id=\"sentimentChart\"><\/canvas><\/div><\/div>\n      <div class=\"card\"><h3>Does Price Affect Event Interest?<\/h3><div class=\"bar-list\" id=\"priceChart\"><\/div><\/div>\n    <\/div>\n  <\/div>\n\n  <!-- ATTENDANCE -->\n  <div id=\"attendance\">\n    <span class=\"section-title\">06 \u2014 Attendance<\/span>\n    <h2 class=\"section-heading\">2026 Outlook<\/h2>\n    <div class=\"card-grid\">\n      <div class=\"card\"><h3>Attendance Likelihood<\/h3><div class=\"chart-container\" style=\"height:260px\"><canvas id=\"attendanceChart\"><\/canvas><\/div><\/div>\n      <div class=\"card\"><h3>EMS Track Interest<\/h3><div class=\"chart-container doughnut-chart\"><canvas id=\"emsChart\"><\/canvas><\/div><\/div>\n    <\/div>\n    <div class=\"card-grid\">\n      <div class=\"card\"><h3>Past Event Rating<\/h3><div class=\"chart-container\" style=\"height:200px\"><canvas id=\"ratingChart\"><\/canvas><\/div><\/div>\n      <div class=\"card\"><h3>Improvement Requests<\/h3><div class=\"quote-grid\" id=\"improvementsQuotes\"><\/div><\/div>\n    <\/div>\n  <\/div>\n\n  <!-- INSIGHTS (static analysis - always shown) -->\n  <div id=\"insights\">\n    <span class=\"section-title\">07 \u2014 Actionable Insights<\/span>\n    <h2 class=\"section-heading\">Marketing &#038; Event Production Recommendations<\/h2>\n    <div class=\"insight-grid\" id=\"insightsGrid\"><\/div>\n  <\/div>\n\n<\/div>\n\n<script>\nvar API_URL = 'https:\/\/script.google.com\/macros\/s\/AKfycbyptxg-NplGbuwTkRv7113JGUXdSpXc8ywxuAayplOe6KPsDj7pLXsuK9282jp2-dSn\/exec?action=dashboard';\nvar REFRESH_INTERVAL = 60000;\nvar refreshTimer = null;\nvar chartInstances = {};\n\nChart.defaults.color = '#888';\nChart.defaults.borderColor = '#2a2a2a';\nChart.defaults.font.family = \"'Roboto', sans-serif\";\n\nvar orange = '#f7931a';\nvar colors = ['#f7931a','#22c55e','#3b82f6','#a855f7','#06b6d4','#ef4444','#eab308','#ec4899','#14b8a6','#f97316','#6366f1','#84cc16'];\n\nvar LABELS = {\n  roles: { enthusiast:'Enthusiast', investor:'Investor \/ Trader', entrepreneur:'Entrepreneur', developer:'Developer', miner:'Miner', corporate:'Corporate', media:'Media \/ Creator', student:'Student \/ Researcher', other_role:'Other' },\n  countries: { FI:'Finland', SE:'Sweden', NO:'Norway', DK:'Denmark', IS:'Iceland', EE:'Estonia', DE:'Germany', NL:'Netherlands', GB:'United Kingdom', US:'United States', CH:'Switzerland', other:'Other' },\n  experience: { '5+':'5+ years', '3-5':'3\\u20135 years', '1-3':'1\\u20133 years', '<1':'<1 year' },\n  discovery: { twitter:'X (Twitter)', telegram:'Telegram', linkedin:'LinkedIn', youtube:'YouTube\/Podcasts', btchel_hub:'BTCHEL Hub', word_of_mouth:'Word of Mouth', street_posters:'Street Posters', google_ads:'Google Ads', mainstream_media:'Mainstream Media', other_channel:'Other' },\n  channels: { twitter:'X (Twitter)', telegram:'Telegram', linkedin:'LinkedIn', email:'Email', nostr:'Nostr' },\n  speakerTypes: { builders:'Protocol Builders', entrepreneurs:'Entrepreneurs', mining:'Mining Leaders', economics:'Economists', policy:'Policy Makers', philosophy:'Philosophers', privacy:'Privacy Advocates' },\n  topics: { self_custody:'Self-Custody \\x26 Security', education:'Education \\x26 Onboarding', lightning:'Lightning Network', privacy:'Privacy \\x26 Censorship Resistance', regulation:'Regulation \\x26 Legal', adoption:'Adoption', hardware:'Hardware Wallets', protocol:'Protocol Dev', mining:'Mining Economics \\x26 Energy', open_source:'Open Source', nostr:'Nostr \\x26 Decentralized Social', treasury:'Treasury Strategies' },\n  sideTopics: { ai:'AI \\x26 Freedom', entrepreneurship:'Entrepreneurship', geopolitics:'Geopolitics', art:'Art \\x26 Culture', health:'Health \\x26 Wellness', food:'Food Sovereignty', philosophy:'Philosophy \\x26 Ethics', parenting:'Parenting', homesteading:'Homesteading', energy:'Energy Markets', other_side:'Other' },\n  products: { wallets:'Wallets', exchanges:'Non-KYC Exchanges', mining_hw:'Mining Hardware', payments:'Payment Systems', node:'Node Hardware', privacy_tools:'Privacy Tools', education_products:'Education Products', financial:'Financial Services', merch:'Merch \\x26 Physical' },\n  spendBtc: { yes:'Yes', maybe:'Maybe', no:'No' },\n  priceAffects: { no:'Price Independent', somewhat:'Somewhat', yes_more:'Bull = Excited', yes_less:'Bear = Building' },\n  motivation: { networking:'Networking', learning:'Learning', business:'Business', community:'Community', speakers:'Speakers', fun:'Fun \\x26 Social' },\n  attending: { definitely:'Definitely', likely:'Likely', maybe:'Maybe', unlikely:'Unlikely', no:'No' },\n  sentiment: { '1':'Very Bearish','1.0':'Very Bearish','2':'Bearish','2.0':'Bearish','3':'Neutral','3.0':'Neutral','4':'Bullish','4.0':'Bullish','5':'Very Bullish','5.0':'Very Bullish' },\n  ems: { yes:'Yes, very interested', somewhat:'Somewhat', no:'Not for me' }\n};\n\nfunction humanLabel(key, context) {\n  var map = context ? LABELS[context] : {};\n  return map[key] || key.replace(\/_\/g, ' ').replace(\/\\b\\w\/g, function(c) { return c.toUpperCase(); });\n}\n\nfunction mapData(arr, context) {\n  return (arr || []).map(function(d) { return { label: humanLabel(d.label, context), value: d.value }; });\n}\n\nfunction makeBarList(containerId, data, color) {\n  var container = document.getElementById(containerId);\n  if (!container) return;\n  container.innerHTML = '';\n  if (!data || data.length === 0) { container.innerHTML = '<p style=\"color:var(--text-muted);font-size:13px;\">No data yet<\/p>'; return; }\n  var max = Math.max.apply(null, data.map(function(d) { return d.value; }));\n  data.forEach(function(d, i) {\n    var rawPct = max > 0 ? (d.value \/ max * 100) : 0;\n    var pct = Math.max(rawPct, 8).toFixed(0);\n    var c = color || colors[i % colors.length];\n    container.innerHTML +=\n      '<div class=\"bar-item\">' +\n      '<span class=\"bar-label\">' + d.label + '<\/span>' +\n      '<div class=\"bar-track\">' +\n      '<div class=\"bar-fill\" style=\"width:' + pct + '%;background:' + c + ';animation:growBar 1s ' + (i*0.05) + 's both\"><\/div>' +\n      '<\/div>' +\n      '<span class=\"bar-value\">' + d.value + '<\/span>' +\n      '<\/div>';\n  });\n}\n\nfunction makeChart(canvasId, type, labels, data, bgColors, options) {\n  if (chartInstances[canvasId]) { chartInstances[canvasId].destroy(); }\n  var canvas = document.getElementById(canvasId);\n  if (!canvas) return;\n  chartInstances[canvasId] = new Chart(canvas, {\n    type: type,\n    data: { labels: labels, datasets: [{ data: data, backgroundColor: bgColors, borderWidth: 0, borderRadius: type === 'bar' ? 6 : 0, borderSkipped: false }] },\n    options: Object.assign({ responsive: true, maintainAspectRatio: false, plugins: { legend: { position: 'bottom', labels: { padding: 12, usePointStyle: true, pointStyle: 'circle' } } } }, options || {})\n  });\n}\n\nfunction makeQuotes(containerId, texts) {\n  var container = document.getElementById(containerId);\n  if (!container) return;\n  container.innerHTML = '';\n  if (!texts || texts.length === 0) { container.innerHTML = '<p style=\"color:var(--text-muted);font-size:13px;\">No responses yet<\/p>'; return; }\n  texts.forEach(function(t) {\n    container.innerHTML += '<div class=\"quote\">' + t + '<\/div>';\n  });\n}\n\nfunction generateInsights(d) {\n  var grid = document.getElementById('insightsGrid');\n  if (!grid) return;\n  var n = d.kpis.totalResponses;\n  var retPct = d.kpis.returningPct;\n  var bullPct = d.kpis.bullishPct;\n  var attPct = d.kpis.attendingPct;\n  var spendPct = d.kpis.spendBtcPct;\n  var _pc = d.preferredChannels || [];\n  var topChannel = _pc[0] ? humanLabel(_pc[0].label, 'channels') : 'Email';\n  var _mot = d.motivation || [];\n  var topMotivation = _mot[0] ? humanLabel(_mot[0].label, 'motivation') : 'Networking';\n  var top2Disc = (d.discovery || []).slice(0,2).map(function(x) { return humanLabel(x.label,'discovery'); }).join(' and ');\n  var top2Speak = (d.speakerTypes || []).slice(0,2).map(function(x) { return humanLabel(x.label,'speakerTypes'); }).join(' and ');\n  var top3Topics = (d.bitcoinTopics || []).slice(0,3).map(function(x) { return humanLabel(x.label,'topics'); }).join(', ');\n  var top2Side = (d.sideTopics || []).slice(0,2).map(function(x) { return humanLabel(x.label,'sideTopics'); }).join(' and ');\n  var _pi = d.productInterests || [];\n  var topProduct = _pi[0] ? humanLabel(_pi[0].label,'products') : 'Financial Services';\n  var _m0 = (d.motivation || [])[0];\n  var motivPct = (_m0 ? (n > 0 ? Math.round(_m0.value \/ n * 100) : 0) : 0);\n\n  \/\/ --- Smart conditional insights ---\n  var avgRating = parseFloat(d.kpis.avgPastRating) || 0;\n  var firstTimerPct = 100 - retPct;\n\n  \/\/ 1. Discovery insight - adapts to channel mix\n  var discText;\n  var disc1 = (d.discovery || [])[0];\n  var disc1Pct = (disc1 ? (n > 0 ? Math.round(disc1.value \/ n * 100) : 0) : 0);\n  if (disc1Pct > 50) {\n    discText = top2Disc + ' dominate discovery (' + disc1Pct + '% from #1 alone). You are heavily reliant on one channel \\u2014 diversify into paid ads, partnerships, or street marketing to reduce risk.';\n  } else if (disc1Pct > 30) {\n    discText = top2Disc + ' lead discovery from ' + n + ' responses. Healthy mix, but double down on these two with referral incentives and shareable content.';\n  } else {\n    discText = 'Discovery is spread across many channels \\u2014 no single one dominates. This is resilient but makes it harder to optimize. Focus budget on ' + top2Disc + ' where you get the best ROI.';\n  }\n\n  \/\/ 2. Update channel - adapts recommendation\n  var chanText;\n  if (topChannel === 'X (Twitter)') {\n    chanText = 'X (Twitter) is the #1 update channel. Prioritize threads, spaces, and countdown posts. Pair with email for people who miss algorithmic feeds.';\n  } else if (topChannel === 'Telegram') {\n    chanText = 'Telegram leads for updates. Run a dedicated announcement channel with speaker reveals, early-bird drops, and behind-the-scenes content.';\n  } else if (topChannel === 'Email') {\n    chanText = 'Email is the #1 preferred channel. Build a strong drip sequence: early-bird access, speaker reveals, venue sneak peeks, and countdown reminders.';\n  } else {\n    chanText = topChannel + ' is the top update channel. Build a consistent posting cadence there with speaker announcements and ticket drops.';\n  }\n\n  \/\/ 3. Speaker demand - adapts to sentiment\n  var speakText;\n  if (bullPct > 70) {\n    speakText = top2Speak + ' are most requested. With ' + bullPct + '% bullish sentiment, the crowd wants bold, forward-looking talks. Book visionaries and builders who match the optimism.';\n  } else if (bullPct > 40) {\n    speakText = top2Speak + ' are most requested. Sentiment is mixed (' + bullPct + '% bullish) \\u2014 balance aspirational talks with practical, grounded content that appeals to both camps.';\n  } else {\n    speakText = top2Speak + ' are most requested. With only ' + bullPct + '% bullish, the mood is cautious. Prioritize practical builders and educators over hype-driven speakers.';\n  }\n\n  \/\/ 4. Topics - adapts to what dominates\n  var topicText = 'Top 3 topics: ' + top3Topics + '. ';\n  var topTopic = (d.bitcoinTopics || [])[0];\n  var topTopicLabel = topTopic ? humanLabel(topTopic.label, 'topics') : '';\n  if (topTopicLabel.match(\/[Ss]ecurity|[Cc]ustody\/)) {\n    topicText += 'Self-custody is king \\u2014 run hands-on workshops with hardware wallets and multisig setups, not just panels.';\n  } else if (topTopicLabel.match(\/[Pp]rivacy\/)) {\n    topicText += 'Privacy tops the list \\u2014 lean into the cypherpunk roots. CoinJoin workshops, Tor sessions, and privacy tool demos will pack the room.';\n  } else if (topTopicLabel.match(\/[Ll]ightning\/)) {\n    topicText += 'Lightning leads interest \\u2014 make the conference itself a Lightning showcase. Every vendor on Lightning, live payment demos, build-a-node stations.';\n  } else {\n    topicText += 'Ensure every track touches these themes. Build workshop tracks alongside main stage talks for deeper engagement.';\n  }\n\n  \/\/ 5. Side topics - adapts to returning vs new audience\n  var sideText;\n  if (retPct > 60) {\n    sideText = top2Side + ' lead side interests. With ' + retPct + '% returning attendees, your core is loyal \\u2014 use side tracks like these to attract fresh faces and grow beyond the base.';\n  } else if (retPct > 30) {\n    sideText = top2Side + ' are the most wanted side topics. Good mix of new and returning attendees \\u2014 side tracks can be the differentiator that sets BTCHEL apart from pure Bitcoin events.';\n  } else {\n    sideText = top2Side + ' lead side interests. With ' + firstTimerPct + '% first-timers, your audience is mostly new \\u2014 side tracks make the event more welcoming and less intimidating.';\n  }\n\n  \/\/ 6. Motivation - adapts to what people actually want\n  var motivText;\n  if (topMotivation.toLowerCase() === 'networking') {\n    motivText = motivPct + '% come primarily for networking. Create structured formats: speed-meeting rounds, industry roundtables, extended breaks, and a dedicated evening social.';\n  } else if (topMotivation.toLowerCase() === 'learning') {\n    motivText = motivPct + '% prioritize learning. Invest in workshop quality: smaller rooms, hands-on exercises, take-home materials, and beginner-to-advanced tracks.';\n  } else if (topMotivation.toLowerCase() === 'community') {\n    motivText = motivPct + '% come for community. This is your moat \\u2014 foster it with open mic sessions, local meetup integrations, and community-led unconference slots.';\n  } else {\n    motivText = motivPct + '% attend primarily for ' + topMotivation.toLowerCase() + '. Design the schedule and venue flow around this \\u2014 it is your biggest draw.';\n  }\n\n  \/\/ 7. Expo - adapts to spend willingness\n  var expoText;\n  if (spendPct > 60) {\n    expoText = 'Strong spending intent (' + spendPct + '%). Top interest: ' + topProduct + '. Go big on the expo floor \\u2014 more vendors, exclusive conference deals, and make Lightning payments seamless everywhere.';\n  } else if (spendPct > 35) {\n    expoText = 'Moderate spending intent (' + spendPct + '%). Top interest: ' + topProduct + '. Focus on a curated expo with quality over quantity. Demo stations and try-before-you-buy will convert the \"maybe\" spenders.';\n  } else {\n    expoText = 'Spending intent is low (' + spendPct + '%). Top interest: ' + topProduct + '. Keep the expo lean and educational rather than sales-heavy. Product demos and workshops will resonate more than vendor booths.';\n  }\n\n  \/\/ 8. Attendance - adapts to confidence level and rating\n  var attText;\n  if (attPct > 75) {\n    attText = 'Attendance confidence is very high (' + attPct + '% definite\/likely). ';\n    if (avgRating >= 4.5) {\n      attText += 'Last event scored ' + avgRating + '\/5 \\u2014 you have earned this loyalty. Focus on exceeding expectations and upselling VIP or premium experiences.';\n    } else {\n      attText += 'Capitalize on this momentum. Address last year\\'s feedback to push satisfaction even higher.';\n    }\n  } else if (attPct > 50) {\n    attText = 'Solid attendance outlook (' + attPct + '%). Focus marketing on converting the \"maybe\" group \\u2014 early-bird pricing, speaker reveals, and FOMO content will move the needle.';\n  } else {\n    attText = 'Attendance intent is soft (' + attPct + '%). Prioritize trust-building: share last event highlights, publish the full speaker lineup early, and offer risk-free refund policies.';\n  }\n\n  \/\/ 9. Recording - adapts to improvement feedback\n  var hasRecordingFeedback = false;\n  (d.improvements || []).forEach(function(t) {\n    if (String(t).toLowerCase().match(\/record|video|stream|film|capture\/)) { hasRecordingFeedback = true; }\n  });\n  var recordText;\n  if (hasRecordingFeedback) {\n    recordText = 'Attendees are explicitly asking for better recordings. This came up in the improvement suggestions \\u2014 treat it as a top priority. Reliable multi-camera recording is essential for content marketing and attendee trust.';\n  } else {\n    recordText = 'Even without explicit requests, professional recording is a must for post-event content marketing, social proof, and reaching people who could not attend. Plan multi-camera coverage from day one.';\n  }\n\n  \/\/ 10. Venue - adapts to improvement feedback\n  var hasVenueFeedback = false;\n  (d.improvements || []).forEach(function(t) {\n    if (String(t).toLowerCase().match(\/venue|space|bigger|room|outdoor|crowd\/)) { hasVenueFeedback = true; }\n  });\n  var venueText;\n  if (hasVenueFeedback) {\n    venueText = 'Venue size came up in improvement requests. Attendees want more space \\u2014 plan for indoor-outdoor flow, wider hallways, and breakout areas. A cramped venue kills the networking vibe.';\n  } else {\n    venueText = 'No major venue complaints so far, but plan ahead \\u2014 if attendance grows, you will need flexible space. Book a venue with room to scale and good outdoor options for the Nordic summer.';\n  }\n\n  var insights = [\n    { icon: '\\uD83D\\uDCE3', title: 'Discovery: ' + top2Disc, text: discText },\n    { icon: '\\uD83D\\uDCE7', title: 'Updates: ' + topChannel, text: chanText },\n    { icon: '\\uD83C\\uDFA4', title: 'Speakers: ' + top2Speak, text: speakText },\n    { icon: '\\uD83D\\uDD10', title: 'Topics: ' + top3Topics, text: topicText },\n    { icon: '\\uD83E\\uDD16', title: 'Beyond Bitcoin: ' + top2Side, text: sideText },\n    { icon: '\\uD83E\\uDD1D', title: '#1 Motivation: ' + topMotivation + ' (' + motivPct + '%)', text: motivText },\n    { icon: '\\u26A1', title: spendPct + '% Will Spend BTC', text: expoText },\n    { icon: '\\uD83C\\uDFAF', title: attPct + '% Likely Attending', text: attText },\n    { icon: '\\uD83D\\uDCF9', title: 'Recording Strategy', text: recordText },\n    { icon: '\\uD83C\\uDFE0', title: 'Venue Planning', text: venueText }\n  ];\n\n  var html = '';\n  for (var i = 0; i < insights.length; i++) {\n    var ins = insights[i];\n    html += '<div class=\"insight\">' +\n      '<div class=\"insight-icon\">' + ins.icon + '<\/div>' +\n      '<h4>' + ins.title + '<\/h4>' +\n      '<p>' + ins.text + '<\/p>' +\n      '<\/div>';\n  }\n  grid.innerHTML = html;\n}\n\nfunction renderDashboard(d) {\n  document.getElementById('headerSubtitle').textContent =\n    d.totalResponses + ' responses \\u00B7 Updated ' + new Date(d.timestamp).toLocaleString() + ' \\u00B7 Helsinki Bitcoin Conference, Sept 25\\u201326';\n\n  document.getElementById('kpi-total').textContent = d.kpis.totalResponses;\n  document.getElementById('kpi-returning').textContent = d.kpis.returningPct + '%';\n  document.getElementById('kpi-rating').textContent = d.kpis.avgPastRating;\n  document.getElementById('kpi-attending').textContent = d.kpis.attendingPct + '%';\n  document.getElementById('kpi-bullish').textContent = d.kpis.bullishPct + '%';\n  document.getElementById('kpi-spend').textContent = d.kpis.spendBtcPct + '%';\n\n  makeBarList('roleChart', mapData(d.roles, 'roles'), orange);\n  makeBarList('countryChart', mapData(d.countries, 'countries'), orange);\n  makeBarList('discoveryChart', mapData(d.discovery, 'discovery'), orange);\n  makeBarList('updateChart', mapData(d.preferredChannels, 'channels'), '#3b82f6');\n  makeBarList('speakerChart', mapData(d.speakerTypes, 'speakerTypes'), orange);\n  makeBarList('topicsChart', mapData(d.bitcoinTopics, 'topics'), '#22c55e');\n  makeBarList('sideChart', mapData(d.sideTopics, 'sideTopics'), '#a855f7');\n  makeBarList('motivationChart', mapData(d.motivation, 'motivation'), orange);\n  makeBarList('productsChart', mapData(d.productInterests, 'products'), '#06b6d4');\n  makeBarList('priceChart', mapData(d.priceAffects, 'priceAffects'), orange);\n\n  \/\/ Experience - client-side normalization\n  function normalizeExpLabel(lbl) {\n    var s = String(lbl).trim().toLowerCase();\n    if (s === '5+' || s === '5' || s === '5+ years') return '5+';\n    if (s === '<1' || s === 'less than 1 year' || s === '<1 year') return '<1';\n    if (s === '1-3' || s === '1\\u20133' || s === '1-3 years' || s === '1\\u20133 years') return '1-3';\n    if (s === '3-5' || s === '3\\u20135' || s === '3-5 years' || s === '3\\u20135 years') return '3-5';\n    if (s.match(\/01.?03|jan.*3|1.*3.*2026|2026.*1.*3\/)) return '1-3';\n    if (s.match(\/03.?05|mar.*5|3.*5.*2026|2026.*3.*5|05.?03|may.*3\/)) return '3-5';\n    if (s.match(\/2026|2025|2024\/)) { if (s.match(\/jan|01\/)) return '1-3'; }\n    if (s.match(\/2026|2025|2024\/)) { if (s.match(\/mar|03|may|05\/)) return '3-5'; }\n    return s;\n  }\n  var expBuckets = { '5+': 0, '3-5': 0, '1-3': 0, '<1': 0 };\n  (d.experience || []).forEach(function(e) {\n    var bucket = normalizeExpLabel(e.label);\n    if (expBuckets.hasOwnProperty(bucket)) {\n      expBuckets[bucket] += e.value;\n    } else {\n      console.warn('Unknown experience label:', e.label);\n    }\n  });\n  var expOrder = ['5+', '3-5', '1-3', '<1'];\n  var expLabels = expOrder.map(function(k) { return humanLabel(k, 'experience'); });\n  var expData = expOrder.map(function(k) { return expBuckets[k]; });\n  makeChart('expChart', 'doughnut', expLabels, expData, [orange, '#22c55e', '#3b82f6', '#a855f7']);\n\n  \/\/ Attended Before\n  var attYes = (d.attendedBefore.find(function(a) { return a.label === 'yes'; }) || {}).value || 0;\n  var attNo = (d.attendedBefore.find(function(a) { return a.label === 'no'; }) || {}).value || 0;\n  makeChart('attendedChart', 'doughnut',\n    ['Returning (' + d.kpis.returningPct + '%)', 'First-timers (' + (100 - d.kpis.returningPct) + '%)'],\n    [attYes, attNo], [orange, '#3b82f6']);\n\n  \/\/ Spend BTC\n  var spY = (d.spendBtc.find(function(s) { return s.label === 'yes'; }) || {}).value || 0;\n  var spM = (d.spendBtc.find(function(s) { return s.label === 'maybe'; }) || {}).value || 0;\n  var spN = (d.spendBtc.find(function(s) { return s.label === 'no'; }) || {}).value || 0;\n  var spTotal = spY + spM + spN;\n  makeChart('spendChart', 'doughnut',\n    ['Yes (' + (spTotal ? Math.round(spY\/spTotal*100) : 0) + '%)', 'Maybe (' + (spTotal ? Math.round(spM\/spTotal*100) : 0) + '%)', 'No (' + (spTotal ? Math.round(spN\/spTotal*100) : 0) + '%)'],\n    [spY, spM, spN], ['#22c55e', orange, '#ef4444']);\n\n  \/\/ EMS\n  var emsY = (d.emsInterest.find(function(e) { return e.label === 'yes'; }) || {}).value || 0;\n  var emsS = (d.emsInterest.find(function(e) { return e.label === 'somewhat'; }) || {}).value || 0;\n  var emsN = (d.emsInterest.find(function(e) { return e.label === 'no'; }) || {}).value || 0;\n  var emsT = emsY + emsS + emsN;\n  makeChart('emsChart', 'doughnut',\n    ['Yes (' + (emsT ? Math.round(emsY\/emsT*100) : 0) + '%)', 'Somewhat (' + (emsT ? Math.round(emsS\/emsT*100) : 0) + '%)', 'Not for me (' + (emsT ? Math.round(emsN\/emsT*100) : 0) + '%)'],\n    [emsY, emsS, emsN], [orange, '#3b82f6', '#2a2a2a']);\n\n  \/\/ Sentiment\n  var sentOrder = ['1', '2', '3', '4', '5'];\n  var sentLabels = ['Very Bearish', 'Bearish', 'Neutral', 'Bullish', 'Very Bullish'];\n  var sentData = sentOrder.map(function(k) {\n    var found = d.sentiment.find(function(s) { return s.label === k || s.label === k + '.0'; });\n    return found ? found.value : 0;\n  });\n  makeChart('sentimentChart', 'bar', sentLabels, sentData,\n    ['#ef4444','#f97316','#eab308','#22c55e', orange],\n    { plugins: { legend: { display: false } }, scales: { y: { beginAtZero: true, grid: { color: '#1a1a1a' } }, x: { grid: { display: false } } } });\n\n  \/\/ Attendance\n  var attdOrder = ['definitely', 'likely', 'maybe', 'unlikely', 'no'];\n  var attdLabels = ['Definitely', 'Likely', 'Maybe', 'Unlikely', 'No'];\n  var attdData = attdOrder.map(function(k) {\n    var found = d.attending2026.find(function(a) { return a.label === k; });\n    return found ? found.value : 0;\n  });\n  makeChart('attendanceChart', 'bar', attdLabels, attdData,\n    ['#22c55e','#3b82f6', orange, '#f97316','#ef4444'],\n    { indexAxis: 'y', plugins: { legend: { display: false } }, scales: { x: { beginAtZero: true, grid: { color: '#1a1a1a' } }, y: { grid: { display: false } } } });\n\n  \/\/ Past rating\n  var ratOrder = ['3', '4', '5'];\n  var ratLabels = ['Good (3)', 'Great (4)', 'Excellent (5)'];\n  var ratData = ratOrder.map(function(k) {\n    var found = d.pastRating.find(function(r) { return r.label === k || r.label === k + '.0'; });\n    return found ? found.value : 0;\n  });\n  makeChart('ratingChart', 'bar', ratLabels, ratData,\n    ['#eab308','#22c55e', orange],\n    { plugins: { legend: { display: false } }, scales: { y: { beginAtZero: true, grid: { color: '#1a1a1a' } }, x: { grid: { display: false } } } });\n\n  makeQuotes('improvementsQuotes', d.improvements);\n  generateInsights(d);\n  document.getElementById('lastUpdated').textContent = new Date().toLocaleTimeString();\n}\n\nasync function loadData() {\n  var overlay = document.getElementById('loadingOverlay');\n  var content = document.getElementById('mainContent');\n  try {\n    var url = API_URL + '\\x26_t=' + Date.now();\n    var res = await fetch(url, { redirect: 'follow' });\n    if (!res.ok) throw new Error('HTTP ' + res.status);\n    var text = await res.text();\n    var data = JSON.parse(text);\n    if (data.error) throw new Error(data.error);\n    renderDashboard(data);\n    overlay.classList.add('hidden');\n    content.style.display = '';\n  } catch (err) {\n    console.error('[BTCHEL] Failed:', err);\n    var msg = String(err.message || err).replace(\/<\/g, '\\x26lt;').replace(\/>\/g, '\\x26gt;');\n    overlay.innerHTML =\n      '<div class=\"error-state\">' +\n      '<h2>Could not load survey data<\/h2>' +\n      '<p>' + msg + '<\/p>' +\n      '<p style=\"margin-top:12px;font-size:13px;\">Check browser console for details.<\/p>' +\n      '<button onclick=\"loadData()\">Try Again<\/button>' +\n      '<\/div>';\n  }\n}\n\nfunction startAutoRefresh() {\n  if (refreshTimer) clearInterval(refreshTimer);\n  refreshTimer = setInterval(function() {\n    if (document.getElementById('autoRefresh').checked) {\n      loadData();\n    }\n  }, REFRESH_INTERVAL);\n}\n\ndocument.querySelectorAll('.nav-btn').forEach(function(btn) {\n  btn.addEventListener('click', function() {\n    document.querySelectorAll('.nav-btn').forEach(function(b) { b.classList.remove('active'); });\n    btn.classList.add('active');\n  });\n});\n\nloadData();\nstartAutoRefresh();\n<\/script>\n<\/body>\n<\/html>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>BTCHEL 2026 \u2014 Live Survey Dashboard Loading survey data&#8230; Live data &middot; Updated &#8212; Auto-refresh (60s) Refresh now Live Survey Dashboard BTCHEL 2026 Insights Loading&#8230; &#8212; Total Responses &#8212; Returning [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_price":"","_stock":"","_tribe_ticket_header":"","_tribe_default_ticket_provider":"","_tribe_ticket_capacity":"0","_ticket_start_date":"","_ticket_end_date":"","_tribe_ticket_show_description":"","_tribe_ticket_show_not_going":false,"_tribe_ticket_use_global_stock":"","_tribe_ticket_global_stock_level":"","_global_stock_mode":"","_global_stock_cap":"","_tribe_rsvp_for_event":"","_tribe_ticket_going_count":"","_tribe_ticket_not_going_count":"","_tribe_tickets_list":"[]","_tribe_ticket_has_attendee_info_fields":false,"_EventAllDay":false,"_EventTimezone":"","_EventStartDate":"","_EventEndDate":"","_EventStartDateUTC":"","_EventEndDateUTC":"","_EventShowMap":false,"_EventShowMapLink":false,"_EventURL":"","_EventCost":"","_EventCostDescription":"","_EventCurrencySymbol":"","_EventCurrencyCode":"","_EventCurrencyPosition":"","_EventDateTimeSeparator":"","_EventTimeRangeSeparator":"","_EventOrganizerID":[],"_EventVenueID":[],"_OrganizerEmail":"","_OrganizerPhone":"","_OrganizerWebsite":"","_VenueAddress":"","_VenueCity":"","_VenueCountry":"","_VenueProvince":"","_VenueState":"","_VenueZip":"","_VenuePhone":"","_VenueURL":"","_VenueStateProvince":"","_VenueLat":"","_VenueLng":"","_VenueShowMap":false,"_VenueShowMapLink":false,"footnotes":"","_tec_slr_enabled":"","_tec_slr_layout":""},"class_list":["post-2497","page","type-page","status-publish","hentry"],"ticketed":false,"_links":{"self":[{"href":"https:\/\/btchel.com\/fi\/wp-json\/wp\/v2\/pages\/2497","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/btchel.com\/fi\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/btchel.com\/fi\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/btchel.com\/fi\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/btchel.com\/fi\/wp-json\/wp\/v2\/comments?post=2497"}],"version-history":[{"count":28,"href":"https:\/\/btchel.com\/fi\/wp-json\/wp\/v2\/pages\/2497\/revisions"}],"predecessor-version":[{"id":2529,"href":"https:\/\/btchel.com\/fi\/wp-json\/wp\/v2\/pages\/2497\/revisions\/2529"}],"wp:attachment":[{"href":"https:\/\/btchel.com\/fi\/wp-json\/wp\/v2\/media?parent=2497"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}