{"version":3,"file":"UpsolveFeaturePage.CE7-TDLu.mjs","names":["React.useRef","React.useMemo","_Fragment"],"sources":["https:/framerusercontent.com/modules/JU4fGW5PNHyBkiOOcfeI/mnfKmu0uwaIQuz3geR0J/UpsolveFeaturePage.js"],"sourcesContent":["// Upsolve feature pages: one Framer code component for /features/[slug] and the Complete Agent Stack hub.\n// Generated by build3.py. Edit copy in extras.py / features_base.json and rebuild instead of editing here.\nimport{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import*as React from\"react\";import{addPropertyControls,ControlType}from\"framer\";const CSS='/* Scoped to .upsolve-feature-root so it can\\'t leak into the Framer header/footer. Tokens match upsolve.ai. */\\n.upsolve-feature-root {\\n  --paper: #FAFAF6; --paper-2: #F5F5ED; --panel: #F2F1E8; --line: #E2E2D2; --white: #FFFFFF;\\n  --ink: #0D0D0B; --ink-2: #1A1A18; --body: #48453F; --muted: #8A8780; --faint: #BFBDB7;\\n  --green: #0A9B6A; --green-soft: #ECF9F4; --red: #E70017; --red-soft: #FFF3F4;\\n  --navy: #0B1640; --blue-deep: #1B44C4; --purple-deep: #5B1FC4;\\n  --blue: #2455E8; --blue-soft: #E6EDFB; --purple: #7530E8; --purple-soft: #EDE6FD;\\n  --orange: #D4700A; --orange-soft: #FBEEDF; --red: #E70017;\\n  --sans: Inter, \"Inter Placeholder\", system-ui, sans-serif; --mono: \"JetBrains Mono\", ui-monospace, monospace;\\n  --max: 1152px;\\n  background: var(--paper); color: var(--ink); font-family: var(--sans); -webkit-font-smoothing: antialiased;\\n  line-height: 1.6; width: 100%; overflow-x: hidden;\\n  container-type: inline-size; container-name: upf;\\n}\\n.upsolve-feature-root *, .upsolve-feature-root *::before, .upsolve-feature-root *::after { box-sizing: border-box; margin: 0; padding: 0; }\\n.upsolve-feature-root a { color: inherit; text-decoration: none; }\\n.upsolve-feature-root img { display: block; max-width: 100%; }\\n.upsolve-feature-root .up-mono { font-family: var(--mono); }\\n\\n/* Labels: \"01 / THE PROBLEM\" with the coloured tick, as on the homepage */\\n.upsolve-feature-root .up-label { display: flex; align-items: center; gap: 10px; font-family: var(--mono); font-size: 11px; letter-spacing: 1.76px; text-transform: uppercase; color: var(--muted); margin-bottom: 18px; }\\n.upsolve-feature-root .up-label::before { content: \"\"; width: 3px; height: 12px; background: var(--blue); }\\n.upsolve-feature-root .up-label-purple::before { background: var(--purple); }\\n.upsolve-feature-root .up-label-light { color: #9DA9D6; }\\n.upsolve-feature-root .up-label-light::before { background: #7E9BFF; }\\n.upsolve-feature-root .up-eyebrow { display: flex; align-items: center; gap: 12px; font-family: var(--mono); font-size: 11px; letter-spacing: 1.76px; text-transform: uppercase; color: var(--muted); margin-bottom: 20px; }\\n.upsolve-feature-root .up-eyebrow::before { content: \"\"; width: 3px; height: 14px; background: var(--blue); }\\n\\n/* Type */\\n.upsolve-feature-root h1 { font-size: 54px; line-height: 1.06; font-weight: 800; letter-spacing: -1.62px; margin-bottom: 20px; }\\n.upsolve-feature-root h1 em, .upsolve-feature-root h2 em { font-style: normal; color: var(--blue); }\\n.upsolve-feature-root h2 { font-size: 34px; line-height: 1.15; font-weight: 800; letter-spacing: -1.2px; margin-bottom: 28px; max-width: 820px; }\\n.upsolve-feature-root h3 { font-size: 18px; font-weight: 700; line-height: 1.3; margin-bottom: 8px; }\\n.upsolve-feature-root p { color: var(--body); font-size: 15px; }\\n.upsolve-feature-root .up-lede { font-size: 17px; line-height: 1.65; max-width: 540px; margin-bottom: 22px; }\\n.upsolve-feature-root .up-sub { font-size: 16px; max-width: 640px; margin: -12px 0 28px; }\\n\\n/* Tags and chips */\\n.upsolve-feature-root .up-tags { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 26px; }\\n.upsolve-feature-root .up-tag { display: inline-flex; align-items: center; font-family: var(--mono); font-size: 11px; font-weight: 500; letter-spacing: 1.1px; text-transform: uppercase; padding: 5px 10px; border: 1px solid var(--line); background: var(--paper-2); color: var(--body); }\\n.upsolve-feature-root .up-tag-purple { background: var(--purple-soft); border-color: #D6C4FA; color: var(--purple); }\\n.upsolve-feature-root .up-tag-blue { background: var(--blue-soft); border-color: #C9D7F8; color: var(--blue); }\\n.upsolve-feature-root .up-chip { display: inline-flex; align-items: center; gap: 6px; font-size: 10px; letter-spacing: 1px; text-transform: uppercase; color: var(--blue); background: var(--blue-soft); border: 1px solid #C9D7F8; padding: 3px 8px; }\\n.upsolve-feature-root .up-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--blue); flex-shrink: 0; }\\n\\n/* Buttons (square, like the site) */\\n.upsolve-feature-root .up-ctas { display: flex; flex-wrap: wrap; gap: 12px; }\\n.upsolve-feature-root .up-btn { display: inline-flex; align-items: center; justify-content: center; font-weight: 600; font-size: 15px; padding: 13px 22px; border: 1px solid transparent; transition: background .15s, border-color .15s; }\\n.upsolve-feature-root .up-btn-dark { background: var(--blue); color: var(--white); }\\n.upsolve-feature-root .up-btn-dark:hover { background: var(--blue-deep); }\\n.upsolve-feature-root .up-btn-ghost { background: var(--white); color: var(--ink); border-color: var(--line); }\\n.upsolve-feature-root .up-btn-ghost:hover { border-color: var(--ink); }\\n.upsolve-feature-root .up-launch-note { display: inline-flex; align-items: center; gap: 8px; margin-top: 22px; font-size: 11px; letter-spacing: .6px; text-transform: uppercase; color: var(--blue); }\\n.upsolve-feature-root .up-launch-note:hover { color: var(--ink); }\\n.upsolve-feature-root .up-link { display: inline-block; margin-top: 18px; font-size: 12px; letter-spacing: 1px; text-transform: uppercase; color: var(--blue); }\\n\\n/* Hero */\\n.upsolve-feature-root .up-hero { max-width: var(--max); margin: 0 auto; padding: 88px 24px 96px; display: grid; grid-template-columns: 1.05fr 1fr; gap: 56px; align-items: center; }\\n.upsolve-feature-root .up-hero-center { grid-template-columns: 1fr; text-align: left; padding-bottom: 64px; }\\n.upsolve-feature-root .up-hero-center .up-lede { max-width: 720px; }\\n.upsolve-feature-root .up-hero-visual { position: relative; }\\n.upsolve-feature-root .up-hero-visual::before { content: \"\"; position: absolute; inset: -32px -24px; background-image: radial-gradient(var(--faint) 1px, transparent 1px); background-size: 12px 12px; opacity: .55; z-index: 0; }\\n.upsolve-feature-root .up-window { position: relative; z-index: 1; background: var(--white); border: 1px solid var(--line); box-shadow: 0 1px 2px rgba(13,13,11,.04), 0 12px 32px rgba(13,13,11,.06); }\\n.upsolve-feature-root .up-window-bar { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 16px; border-bottom: 1px solid var(--line); font-size: 10px; letter-spacing: 1.4px; text-transform: uppercase; color: var(--muted); }\\n.upsolve-feature-root .up-window img { width: 100%; height: auto; }\\n\\n/* Sections */\\n.upsolve-feature-root .up-section { max-width: var(--max); margin: 0 auto; padding: 0 24px 104px; }\\n.upsolve-feature-root .up-card { background: var(--white); border: 1px solid var(--line); padding: 28px 24px; }\\n.upsolve-feature-root .up-grid3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }\\n.upsolve-feature-root .up-big-num { font-size: 40px; font-weight: 500; line-height: 1; color: var(--ink); margin-bottom: 20px; }\\n.upsolve-feature-root .up-prob p { font-size: 15px; }\\n.upsolve-feature-root .up-steps { display: grid; grid-template-columns: repeat(3, 1fr); gap: 32px; border-top: 1px solid var(--line); padding-top: 28px; }\\n.upsolve-feature-root .up-step-num { width: 36px; height: 36px; display: grid; place-items: center; border: 1px solid var(--line); background: var(--white); font-size: 12px; color: var(--ink); margin-bottom: 16px; }\\n.upsolve-feature-root .up-step p { font-size: 14px; }\\n.upsolve-feature-root .up-grid4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; }\\n.upsolve-feature-root .up-get { background: var(--paper-2); }\\n.upsolve-feature-root .up-get .up-tag { margin-bottom: 16px; }\\n.upsolve-feature-root .up-get p { font-size: 14px; }\\n\\n/* Dark band (recipes page style) */\\n.upsolve-feature-root .up-dark { background: var(--navy); color: #E8E4D8; margin-bottom: 104px; }\\n.upsolve-feature-root .up-dark-inner { max-width: var(--max); margin: 0 auto; padding: 88px 24px; }\\n.upsolve-feature-root .up-dark h2 { color: #F5F5ED; }\\n.upsolve-feature-root .up-dark h2 em { color: #8FA8FF; }\\n.upsolve-feature-root .up-compare { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }\\n.upsolve-feature-root .up-compare-box { border: 1px solid rgba(232,228,216,.18); background: rgba(255,255,255,.03); padding: 24px; }\\n.upsolve-feature-root .up-compare-box.on { border-color: rgba(143,168,255,.55); background: rgba(36,85,232,.16); }\\n.upsolve-feature-root .up-compare-k { font-size: 10px; letter-spacing: 1.4px; text-transform: uppercase; color: #9DA9D6; margin-bottom: 10px; }\\n.upsolve-feature-root .up-compare-box.on .up-compare-k { color: #B79BFF; }\\n.upsolve-feature-root .up-dark p { color: #D9D5C8; font-size: 15px; }\\n\\n/* Loop diagram */\\n.upsolve-feature-root .up-loop { display: grid; grid-template-columns: 1fr 24px 1fr 24px 1fr 24px 1fr; align-items: stretch; background: var(--panel); border: 1px solid var(--line); padding: 28px 24px 20px; background-image: radial-gradient(#D8D6CC 1px, transparent 1px); background-size: 12px 12px; }\\n.upsolve-feature-root .up-loop-cell { background: var(--white); border: 1px solid var(--line); border-top: 3px solid var(--line); padding: 16px; position: relative; }\\n.upsolve-feature-root .up-loop-arrow { display: grid; place-items: center; color: var(--muted); font-size: 16px; }\\n.upsolve-feature-root .up-loop-num { font-size: 11px; color: var(--muted); margin-bottom: 6px; }\\n.upsolve-feature-root .up-loop-name { font-family: var(--mono); font-size: 12px; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; margin-bottom: 6px; }\\n.upsolve-feature-root .up-loop-desc { font-size: 13px; color: var(--body); line-height: 1.5; }\\n.upsolve-feature-root .up-c-blue { border-top-color: var(--blue); } .upsolve-feature-root .up-c-blue.on { background: var(--blue-soft); border-color: var(--blue); }\\n.upsolve-feature-root .up-c-purple { border-top-color: var(--purple); } .upsolve-feature-root .up-c-purple.on { background: var(--purple-soft); border-color: var(--purple); }\\n.upsolve-feature-root .up-c-orange { border-top-color: var(--orange); } .upsolve-feature-root .up-c-orange.on { background: var(--orange-soft); border-color: var(--orange); }\\n.upsolve-feature-root .up-c-red { border-top-color: var(--red); } .upsolve-feature-root .up-c-red.on { background: var(--red-soft); border-color: var(--red); }\\n.upsolve-feature-root .up-loop-here { margin-top: 10px; display: inline-block; font-family: var(--mono); font-size: 10px; letter-spacing: 1px; text-transform: uppercase; background: var(--ink); color: var(--white); padding: 3px 8px; }\\n.upsolve-feature-root .up-loop-back { grid-column: 1 / -1; margin-top: 14px; font-size: 11px; letter-spacing: .8px; text-transform: uppercase; color: var(--muted); }\\n\\n/* Series strip */\\n.upsolve-feature-root .up-series { display: grid; grid-template-columns: repeat(4, 1fr); border-top: 1px solid var(--line); border-left: 1px solid var(--line); }\\n.upsolve-feature-root .up-series-item { display: flex; flex-direction: column; gap: 4px; padding: 18px 20px; background: var(--white); border-right: 1px solid var(--line); border-bottom: 1px solid var(--line); transition: background .15s; }\\n.upsolve-feature-root .up-series-item:hover { background: var(--paper-2); }\\n.upsolve-feature-root .up-series-item.current { background: var(--ink); color: var(--white); }\\n.upsolve-feature-root .up-series-day { font-size: 10px; letter-spacing: 1.2px; text-transform: uppercase; color: var(--muted); }\\n.upsolve-feature-root .up-series-item.current .up-series-day { color: #8FA8FF; }\\n.upsolve-feature-root .up-series-name { font-weight: 700; font-size: 16px; }\\n\\n/* FAQ (homepage style: numbered rows, square plus) */\\n.upsolve-feature-root .up-faq-list { border: 1px solid var(--line); background: var(--white); }\\n.upsolve-feature-root .up-faq-item + .up-faq-item { border-top: 1px solid var(--line); }\\n.upsolve-feature-root .up-faq-q { width: 100%; display: flex; align-items: center; gap: 24px; padding: 24px 28px; background: none; border: 0; cursor: pointer; text-align: left; font-family: var(--sans); color: var(--ink); }\\n.upsolve-feature-root .up-faq-n { font-size: 11px; color: var(--muted); width: 18px; flex-shrink: 0; }\\n.upsolve-feature-root .up-faq-t { flex: 1; font-size: 15px; font-weight: 700; }\\n.upsolve-feature-root .up-faq-plus { width: 28px; height: 28px; display: grid; place-items: center; border: 1px solid var(--line); font-size: 16px; flex-shrink: 0; transition: transform .2s; }\\n.upsolve-feature-root .up-faq-q:hover .up-faq-t { color: var(--blue); }\\n.upsolve-feature-root .up-faq-a { max-height: 0; overflow: hidden; transition: max-height .3s ease; }\\n.upsolve-feature-root .up-faq-a p { padding: 0 28px 24px 70px; font-size: 14px; line-height: 1.7; }\\n.upsolve-feature-root .up-faq-item.open .up-faq-a { max-height: 320px; }\\n.upsolve-feature-root .up-faq-item.open .up-faq-plus { transform: rotate(45deg); }\\n.upsolve-feature-root .up-faq-more { margin-top: 16px; font-size: 13px; color: var(--ink); }\\n.upsolve-feature-root .up-faq-more a { color: #F23571; text-decoration: underline; }\\n\\n/* Hub cards */\\n.upsolve-feature-root .up-hub-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; }\\n.upsolve-feature-root .up-hub-card { display: flex; flex-direction: column; background: var(--white); border: 1px solid var(--line); transition: border-color .15s; }\\n.upsolve-feature-root .up-hub-card:hover { border-color: var(--ink); }\\n.upsolve-feature-root .up-hub-img { border-bottom: 1px solid var(--line); aspect-ratio: 16 / 7; overflow: hidden; background: var(--panel); }\\n.upsolve-feature-root .up-hub-img img { width: 100%; height: 100%; object-fit: cover; object-position: top center; }\\n.upsolve-feature-root .up-hub-body { padding: 22px 24px 24px; display: flex; flex-direction: column; gap: 6px; }\\n.upsolve-feature-root .up-hub-body h3 { margin: 4px 0 0; }\\n.upsolve-feature-root .up-hub-body p { font-size: 14px; }\\n.upsolve-feature-root .up-hub-go { margin-top: 8px; font-size: 11px; letter-spacing: 1px; text-transform: uppercase; color: var(--blue); }\\n\\n@container upf (max-width: 1024px) {\\n  .upsolve-feature-root .up-hero { grid-template-columns: 1fr; gap: 48px; padding-top: 64px; }\\n  .upsolve-feature-root .up-grid4 { grid-template-columns: repeat(2, 1fr); }\\n  .upsolve-feature-root .up-loop { grid-template-columns: 1fr 1fr; gap: 12px; }\\n  .upsolve-feature-root .up-loop-arrow { display: none; }\\n  .upsolve-feature-root .up-series { grid-template-columns: repeat(2, 1fr); }\\n}\\n@container upf (max-width: 900px) {\\n  .upsolve-feature-root .up-grid3 { grid-template-columns: 1fr; gap: 12px; }\\n  .upsolve-feature-root .up-prob { display: flex; align-items: center; gap: 24px; padding: 20px 24px; }\\n  .upsolve-feature-root .up-prob .up-big-num { margin-bottom: 0; font-size: 32px; flex-shrink: 0; }\\n}\\n@container upf (max-width: 720px) {\\n  .upsolve-feature-root .up-hero { padding: 48px 16px 64px; }\\n  .upsolve-feature-root h1 { font-size: 38px; letter-spacing: -1.1px; }\\n  .upsolve-feature-root h2 { font-size: 27px; letter-spacing: -.8px; }\\n  .upsolve-feature-root .up-section { padding: 0 16px 72px; }\\n  .upsolve-feature-root .up-grid3, .upsolve-feature-root .up-steps, .upsolve-feature-root .up-grid4,\\n  .upsolve-feature-root .up-compare, .upsolve-feature-root .up-hub-grid, .upsolve-feature-root .up-loop { grid-template-columns: 1fr; }\\n  .upsolve-feature-root .up-dark { margin-bottom: 72px; }\\n  .upsolve-feature-root .up-dark-inner { padding: 64px 16px; }\\n  .upsolve-feature-root .up-btn { flex: 1 1 100%; }\\n  .upsolve-feature-root .up-hero-visual::before { inset: -16px -8px; }\\n  .upsolve-feature-root .up-faq-q { padding: 18px 16px; gap: 14px; }\\n  .upsolve-feature-root .up-faq-a p { padding: 0 16px 20px 48px; }\\n}\\n.upsolve-feature-root .up-series-soon { background: var(--paper-2); color: var(--muted); }\\n.upsolve-feature-root .up-series-soon .up-series-name { color: var(--muted); font-weight: 600; }\\n.upsolve-feature-root .up-hub-soon { border-style: dashed; background: var(--paper-2); }\\n.upsolve-feature-root .up-hub-soon h3 { color: var(--muted); }\\n\\n/* hub intro: understated, Supabase launch-week style */\\n.upsolve-feature-root .up-hub-intro { max-width: var(--max); margin: 0 auto; padding: 56px 24px 28px; }\\n.upsolve-feature-root .up-hub-top { display: flex; justify-content: space-between; align-items: flex-end; gap: 32px; padding-bottom: 28px; border-bottom: 1px solid var(--line); }\\n.upsolve-feature-root .up-hub-intro .up-eyebrow { margin-bottom: 12px; }\\n.upsolve-feature-root h1.up-hub-title { font-size: 24px; line-height: 1.3; font-weight: 600; letter-spacing: -0.4px; margin: 0 0 6px; max-width: 720px; }\\n.upsolve-feature-root h1.up-hub-title em { font-style: normal; color: var(--blue); font-weight: 600; }\\n.upsolve-feature-root .up-hub-lede { font-size: 15px; line-height: 1.55; color: var(--muted); max-width: 620px; margin: 0; }\\n.upsolve-feature-root .up-hub-ctas { display: flex; gap: 8px; flex: none; }\\n.upsolve-feature-root .up-btn-sm { font-size: 13px; padding: 9px 16px; }\\n.upsolve-feature-root .up-hub-launches { padding-top: 0; }\\n.upsolve-feature-root .up-hub-bar { display: flex; justify-content: space-between; gap: 16px; font-family: var(--mono); font-size: 11px; letter-spacing: 1.4px; text-transform: uppercase; color: var(--muted); padding: 0 0 16px; }\\n@container upf (max-width: 720px) {\\n  .upsolve-feature-root .up-hub-intro { padding-top: 36px; }\\n  .upsolve-feature-root .up-hub-top { flex-direction: column; align-items: flex-start; gap: 18px; }\\n  .upsolve-feature-root h1.up-hub-title { font-size: 21px; }\\n}\\n.upsolve-feature-root .up-hub-ctas .up-btn { flex: 0 0 auto; white-space: nowrap; }\\n@container upf (max-width: 720px) {\\n  .upsolve-feature-root .up-hub-intro { padding: 36px 16px 24px; }\\n  .upsolve-feature-root .up-hub-launches { padding-top: 0; }\\n}\\n\\n.upsolve-feature-root.up-hide-campaign .up-campaign { display: none !important; }\\n.upsolve-feature-root .up-img-empty { aspect-ratio: 16/9; display: grid; place-items: center; background: var(--panel); color: var(--muted); font-family: var(--mono); font-size: 11px; letter-spacing: 1px; text-transform: uppercase; }\\n';const FONTS=\"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600;700&display=swap\";const BODIES={\"data-models\":'<section class=\"up-hero\">\\n  <div class=\"up-hero-copy\">\\n    <div class=\"up-eyebrow\"><span>Feature &middot; Upsolve Data Models</span></div>\\n    <h1>One definition of ARR. <em>Every agent answer uses it.</em></h1>\\n    <p class=\"up-lede\">Register your data model, metric definitions and business vocabulary once. Upsolve grounds every agent answer in them, versions them like code, and keeps column values fresh as your data changes.</p>\\n    <div class=\"up-tags\"><span class=\"up-tag up-tag-neutral\">Versioned context</span><span class=\"up-tag up-tag-blue\">Nightly refresh</span><span class=\"up-tag up-tag-purple\">No semantic layer required</span></div>\\n    <div class=\"up-ctas\">\\n      <a class=\"up-btn up-btn-dark\" href=\"__START__\" target=\"_blank\" rel=\"noopener\">Start free in Upsolve</a>\\n      <a class=\"up-btn up-btn-ghost\" href=\"__DEMO__\" target=\"_blank\" rel=\"noopener\">Book a demo</a>\\n    </div>\\n    <a class=\"up-launch-note up-mono\" href=\"__SITE__/launch-month\" target=\"_top\"><span class=\"up-dot\"></span>Feature 01 of 14 &middot; The Complete Agent Stack &rarr;</a>\\n  </div>\\n  <div class=\"up-hero-visual\">\\n    <div class=\"up-window\">\\n      <div class=\"up-window-bar\"><span class=\"up-mono\">DATA MODEL \\xb7 PROCUREMENT DATA V7</span><span class=\"up-chip up-mono\"><span class=\"up-dot\"></span>GROUNDED</span></div>\\n      <!-- TODO: replace with the Framer-hosted gallery image, or a YouTube embed of the feature video -->\\n      <img src=\"__IMG_data-models__\" alt=\"Upsolve agent settings with the Procurement Data V7 data model attached, next to the agent&#x27;s answer about spend\" loading=\"eager\">\\n    </div>\\n  </div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>01 / The problem</span></div>\\n  <h2>Ten definitions of revenue. One agent guessing between them.</h2>\\n  <div class=\"up-grid3\"><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">01</div><p>Schemas don\\'t say which table is the source of truth or how your team defines a metric.</p></div><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">02</div><p>Prompt-only context drifts the moment a status, term or category changes in the data.</p></div><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">03</div><p>When the agent picks the wrong definition, the number looks right and nobody notices until the board meeting.</p></div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>02 / How it works</span></div>\\n  <h2>From setup to production in three steps</h2>\\n  <div class=\"up-steps\"><div class=\"up-step\"><div class=\"up-mono up-step-num\">01</div><h3>Register your tables</h3><p>Attach tables and fields to an Upsolve data model, with descriptions, types, and primary and foreign keys.</p></div><div class=\"up-step\"><div class=\"up-mono up-step-num\">02</div><h3>Encode your vocabulary</h3><p>Put canonical definitions, analysis approaches and output formats in a versioned system prompt.</p></div><div class=\"up-step\"><div class=\"up-mono up-step-num\">03</div><h3>Keep it fresh</h3><p>Mark columns as selectable and Upsolve pre-caches their values, refreshed nightly or on your schedule.</p></div></div>\\n</section>\\n\\n<section class=\"up-dark\">\\n  <div class=\"up-dark-inner\">\\n    <div class=\"up-label up-label-light\"><span>03 / What changes</span></div>\\n    <h2>What changes with <em>Upsolve Data Models</em></h2>\\n    <div class=\"up-compare\">\\n      <div class=\"up-compare-box\"><div class=\"up-mono up-compare-k\">Without Upsolve Data Models</div><p>Ten definitions of revenue live in docs, Slack and people\\'s heads. The agent picks one and the number looks right.</p></div>\\n      <div class=\"up-compare-box on\"><div class=\"up-mono up-compare-k\">With Upsolve Data Models</div><p>Tables, keys, descriptions and canonical definitions live in one versioned model the agent always reads.</p></div>\\n    </div>\\n  </div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>04 / What you get</span></div>\\n  <h2>Everything that ships with Data Models</h2>\\n  <div class=\"up-grid4\"><div class=\"up-card up-get\"><span class=\"up-tag up-tag-blue\">MODEL</span><h3>Descriptive data model</h3><p>Every table and column carries the context your best analyst would give a new hire.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-purple\">VERSIONS</span><h3>Versioned like code</h3><p>System prompts and models have versions and drafts, so you can change context safely and roll back.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-neutral\">VALUES</span><h3>Selectable values</h3><p>The agent already knows your five contract statuses and four payment terms before it writes SQL.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-neutral\">START</span><h3>No semantic layer required</h3><p>Start from your warehouse as it is today. Add definitions as you find the gaps.</p></div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>05 / Where it fits</span></div>\\n  <h2>One layer of a closed learning loop</h2>\\n  <p class=\"up-sub\">Upsolve builds the whole stack for data agents that stay accurate in production. Every conversation feeds the next improvement.</p>\\n  <div class=\"up-loop\"><div class=\"up-loop-cell up-c-blue on\"><div class=\"up-mono up-loop-num\">01</div><div class=\"up-loop-name\">Ontology</div><div class=\"up-loop-desc\">Your data described clearly. Permissions enforced deterministically, not delegated to the agent.</div><div class=up-loop-here>This feature</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-purple\"><div class=\"up-mono up-loop-num\">02</div><div class=\"up-loop-name\">Agent harness</div><div class=\"up-loop-desc\">Snappy, reliable, accurate. Learns from real interactions and updates its skills and memory.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-orange\"><div class=\"up-mono up-loop-num\">03</div><div class=\"up-loop-name\">Distribution</div><div class=\"up-loop-desc\">Your product, your Slack channels, Claude. Go where your users already are.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-red\"><div class=\"up-mono up-loop-num\">04</div><div class=\"up-loop-name\">Improvement loop</div><div class=\"up-loop-desc\">Live evals on real usage find the gaps, then you harden the context to close them.</div></div><div class=\"up-loop-back up-mono\" aria-hidden=\"true\">&#8617; Improvement loop feeds back into the ontology</div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>06 / The Complete Agent Stack</span></div>\\n  <h2>One of fourteen features in The Complete Agent Stack</h2>\\n  <div class=\"up-series\"><a class=\"up-series-item current\" href=\"__SITE__/features/data-models\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 01 &middot; Ontology</span><span class=\"up-series-name\">Data Models</span></a><a class=\"up-series-item\" href=\"__SITE__/features/row-level-security\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 02 &middot; Ontology</span><span class=\"up-series-name\">Row-Level Security</span></a><a class=\"up-series-item\" href=\"__SITE__/features/mcp-connections\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 03 &middot; Agent harness</span><span class=\"up-series-name\">MCP Connections</span></a><a class=\"up-series-item\" href=\"__SITE__/features/harness-2\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 04 &middot; Agent harness</span><span class=\"up-series-name\">Harness 2.0</span></a><a class=\"up-series-item\" href=\"__SITE__/features/bi-canvases\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 05 &middot; Distribution</span><span class=\"up-series-name\">BI Canvases</span></a><a class=\"up-series-item\" href=\"__SITE__/features/observability\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 06 &middot; Improvement loop</span><span class=\"up-series-name\">Observability</span></a><a class=\"up-series-item\" href=\"__SITE__/features/data-plane\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 07 &middot; Ontology</span><span class=\"up-series-name\">Data Plane</span></a><a class=\"up-series-item\" href=\"__SITE__/features/mcp-for-claude\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 08 &middot; Distribution</span><span class=\"up-series-name\">MCP for Claude</span></a><a class=\"up-series-item\" href=\"__SITE__/features/demo-projects\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 09 &middot; Distribution</span><span class=\"up-series-name\">Demo Projects</span></a><a class=\"up-series-item\" href=\"__SITE__/features/golden-questions\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 10 &middot; Improvement loop</span><span class=\"up-series-name\">Golden Questions</span></a><a class=\"up-series-item\" href=\"__SITE__/features/workspaces\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 11 &middot; Ontology</span><span class=\"up-series-name\">Workspaces</span></a><a class=\"up-series-item\" href=\"__SITE__/features/html-apps\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 12 &middot; Distribution</span><span class=\"up-series-name\">Branded HTML Apps</span></a><a class=\"up-series-item\" href=\"__SITE__/features/builder-agent\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 13 &middot; Improvement loop</span><span class=\"up-series-name\">Builder Agent</span></a><a class=\"up-series-item\" href=\"__SITE__/features/self-serve-onboarding\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 14 &middot; Ontology</span><span class=\"up-series-name\">Self-Serve Onboarding</span></a></div>\\n  <a class=\"up-link up-mono\" href=\"__SITE__/launch-month\" target=\"_top\">See all fourteen features &rarr;</a>\\n</section>\\n\\n<section class=\"up-section up-faq\">\\n  <div class=\"up-label up-label-blue\"><span>07 / FAQ</span></div>\\n  <h2>Common questions</h2>\\n  <div class=\"up-faq-list\"><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">01</span><span class=\"up-faq-t\">Do I need dbt or an existing semantic layer?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>No. You can build the data model in Upsolve directly on top of your warehouse tables, then add definitions over time.</p></div></div><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">02</span><span class=\"up-faq-t\">How is this different from adding a long system prompt?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>Prompts hold business practice. The data model holds the truth of the underlying data: tables, keys, descriptions and live column values. Upsolve uses both.</p></div></div><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">03</span><span class=\"up-faq-t\">How often is the cached data refreshed?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>Nightly by default, or on whatever cadence you set, so the agent\\'s picture of your data doesn\\'t drift.</p></div></div></div>\\n  <p class=\"up-faq-more\">Can\\'t find your answer? <a href=\"__DEMO__\" target=\"_blank\" rel=\"noopener\">Get in touch.</a></p>\\n</section>\\n<script type=\"application/ld+json\">{\"@context\": \"https://schema.org\", \"@type\": \"FAQPage\", \"mainEntity\": [{\"@type\": \"Question\", \"name\": \"Do I need dbt or an existing semantic layer?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"No. You can build the data model in Upsolve directly on top of your warehouse tables, then add definitions over time.\"}}, {\"@type\": \"Question\", \"name\": \"How is this different from adding a long system prompt?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Prompts hold business practice. The data model holds the truth of the underlying data: tables, keys, descriptions and live column values. Upsolve uses both.\"}}, {\"@type\": \"Question\", \"name\": \"How often is the cached data refreshed?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Nightly by default, or on whatever cadence you set, so the agent\\'s picture of your data doesn\\'t drift.\"}}]}</script>',\"row-level-security\":'<section class=\"up-hero\">\\n  <div class=\"up-hero-copy\">\\n    <div class=\"up-eyebrow\"><span>Feature &middot; Upsolve Row-Level Security</span></div>\\n    <h1>Data permissions your AI agent <em>can\\'t talk its way past.</em></h1>\\n    <p class=\"up-lede\">Row-level security enforced server side, before any query runs. Set rules from user and org properties, test them as any user, and deploy one agent to every tenant. The agent never sees the rules, so it can\\'t bypass them.</p>\\n    <div class=\"up-tags\"><span class=\"up-tag up-tag-neutral\">Server-side</span><span class=\"up-tag up-tag-blue\">Multi-tenant</span><span class=\"up-tag up-tag-purple\">Invisible to the agent</span></div>\\n    <div class=\"up-ctas\">\\n      <a class=\"up-btn up-btn-dark\" href=\"__START__\" target=\"_blank\" rel=\"noopener\">Start free in Upsolve</a>\\n      <a class=\"up-btn up-btn-ghost\" href=\"__DEMO__\" target=\"_blank\" rel=\"noopener\">Book a demo</a>\\n    </div>\\n    <a class=\"up-launch-note up-mono\" href=\"__SITE__/launch-month\" target=\"_top\"><span class=\"up-dot\"></span>Feature 02 of 14 &middot; The Complete Agent Stack &rarr;</a>\\n  </div>\\n  <div class=\"up-hero-visual\">\\n    <div class=\"up-window\">\\n      <div class=\"up-window-bar\"><span class=\"up-mono\">DATA SECURITY \\xb7 GLOBAL RULES</span><span class=\"up-chip up-mono\"><span class=\"up-dot\"></span>ENFORCED</span></div>\\n      <!-- TODO: replace with the Framer-hosted gallery image, or a YouTube embed of the feature video -->\\n      <img src=\"__IMG_row-level-security__\" alt=\"Upsolve data security tab with a global rule filtering the country column to the signed-in user&#x27;s country\" loading=\"eager\">\\n    </div>\\n  </div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>01 / The problem</span></div>\\n  <h2>\"The prompt tells it not to\" is not a security model.</h2>\\n  <div class=\"up-grid3\"><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">01</div><p>Agents that enforce their own permissions can be confused, prompt-injected or simply wrong.</p></div><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">02</div><p>Multi-tenant SaaS can\\'t put an agent in front of customers without hard data isolation.</p></div><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">03</div><p>Security reviews stall AI projects when nobody can show exactly what each user can see.</p></div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>02 / How it works</span></div>\\n  <h2>From setup to production in three steps</h2>\\n  <div class=\"up-steps\"><div class=\"up-step\"><div class=\"up-mono up-step-num\">01</div><h3>Register orgs and users</h3><p>Give organisations and users properties such as country, tenant or role.</p></div><div class=\"up-step\"><div class=\"up-mono up-step-num\">02</div><h3>Write rules once</h3><p>Global rules like column country = user.country apply to every table that has the column. Custom SQL rules cover the rest.</p></div><div class=\"up-step\"><div class=\"up-mono up-step-num\">03</div><h3>Test as anyone</h3><p>Preview any query as any user and see the exact WHERE clause Upsolve will apply before it runs.</p></div></div>\\n</section>\\n\\n<section class=\"up-dark\">\\n  <div class=\"up-dark-inner\">\\n    <div class=\"up-label up-label-light\"><span>03 / What changes</span></div>\\n    <h2>What changes with <em>Upsolve Row-Level Security</em></h2>\\n    <div class=\"up-compare\">\\n      <div class=\"up-compare-box\"><div class=\"up-mono up-compare-k\">Without Upsolve Row-Level Security</div><p>The agent is told in its prompt not to show other tenants\\' data, and you hope it listens.</p></div>\\n      <div class=\"up-compare-box on\"><div class=\"up-mono up-compare-k\">With Upsolve Row-Level Security</div><p>Every query is pre-filtered on the server from user properties before it runs. The agent never sees the rules.</p></div>\\n    </div>\\n  </div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>04 / What you get</span></div>\\n  <h2>Everything that ships with Row-Level Security</h2>\\n  <div class=\"up-grid4\"><div class=\"up-card up-get\"><span class=\"up-tag up-tag-blue\">FILTER</span><h3>Server-side pre-filters</h3><p>Every query, whether an agent or a person wrote it, is filtered before it reaches your database.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-purple\">SEPARATION</span><h3>Invisible to the agent</h3><p>Rules live outside the agent\\'s context, keeping deterministic security separate from agentic workflows.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-neutral\">CONTROL</span><h3>Optional or required</h3><p>Choose whether a missing property skips the rule or blocks the data entirely.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-neutral\">SCALE</span><h3>Built for multi-tenant</h3><p>One agent, deployed to thousands of customers, each seeing only their own rows.</p></div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>05 / Where it fits</span></div>\\n  <h2>One layer of a closed learning loop</h2>\\n  <p class=\"up-sub\">Upsolve builds the whole stack for data agents that stay accurate in production. Every conversation feeds the next improvement.</p>\\n  <div class=\"up-loop\"><div class=\"up-loop-cell up-c-blue on\"><div class=\"up-mono up-loop-num\">01</div><div class=\"up-loop-name\">Ontology</div><div class=\"up-loop-desc\">Your data described clearly. Permissions enforced deterministically, not delegated to the agent.</div><div class=up-loop-here>This feature</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-purple\"><div class=\"up-mono up-loop-num\">02</div><div class=\"up-loop-name\">Agent harness</div><div class=\"up-loop-desc\">Snappy, reliable, accurate. Learns from real interactions and updates its skills and memory.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-orange\"><div class=\"up-mono up-loop-num\">03</div><div class=\"up-loop-name\">Distribution</div><div class=\"up-loop-desc\">Your product, your Slack channels, Claude. Go where your users already are.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-red\"><div class=\"up-mono up-loop-num\">04</div><div class=\"up-loop-name\">Improvement loop</div><div class=\"up-loop-desc\">Live evals on real usage find the gaps, then you harden the context to close them.</div></div><div class=\"up-loop-back up-mono\" aria-hidden=\"true\">&#8617; Improvement loop feeds back into the ontology</div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>06 / The Complete Agent Stack</span></div>\\n  <h2>One of fourteen features in The Complete Agent Stack</h2>\\n  <div class=\"up-series\"><a class=\"up-series-item\" href=\"__SITE__/features/data-models\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 01 &middot; Ontology</span><span class=\"up-series-name\">Data Models</span></a><a class=\"up-series-item current\" href=\"__SITE__/features/row-level-security\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 02 &middot; Ontology</span><span class=\"up-series-name\">Row-Level Security</span></a><a class=\"up-series-item\" href=\"__SITE__/features/mcp-connections\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 03 &middot; Agent harness</span><span class=\"up-series-name\">MCP Connections</span></a><a class=\"up-series-item\" href=\"__SITE__/features/harness-2\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 04 &middot; Agent harness</span><span class=\"up-series-name\">Harness 2.0</span></a><a class=\"up-series-item\" href=\"__SITE__/features/bi-canvases\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 05 &middot; Distribution</span><span class=\"up-series-name\">BI Canvases</span></a><a class=\"up-series-item\" href=\"__SITE__/features/observability\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 06 &middot; Improvement loop</span><span class=\"up-series-name\">Observability</span></a><a class=\"up-series-item\" href=\"__SITE__/features/data-plane\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 07 &middot; Ontology</span><span class=\"up-series-name\">Data Plane</span></a><a class=\"up-series-item\" href=\"__SITE__/features/mcp-for-claude\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 08 &middot; Distribution</span><span class=\"up-series-name\">MCP for Claude</span></a><a class=\"up-series-item\" href=\"__SITE__/features/demo-projects\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 09 &middot; Distribution</span><span class=\"up-series-name\">Demo Projects</span></a><a class=\"up-series-item\" href=\"__SITE__/features/golden-questions\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 10 &middot; Improvement loop</span><span class=\"up-series-name\">Golden Questions</span></a><a class=\"up-series-item\" href=\"__SITE__/features/workspaces\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 11 &middot; Ontology</span><span class=\"up-series-name\">Workspaces</span></a><a class=\"up-series-item\" href=\"__SITE__/features/html-apps\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 12 &middot; Distribution</span><span class=\"up-series-name\">Branded HTML Apps</span></a><a class=\"up-series-item\" href=\"__SITE__/features/builder-agent\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 13 &middot; Improvement loop</span><span class=\"up-series-name\">Builder Agent</span></a><a class=\"up-series-item\" href=\"__SITE__/features/self-serve-onboarding\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 14 &middot; Ontology</span><span class=\"up-series-name\">Self-Serve Onboarding</span></a></div>\\n  <a class=\"up-link up-mono\" href=\"__SITE__/launch-month\" target=\"_top\">See all fourteen features &rarr;</a>\\n</section>\\n\\n<section class=\"up-section up-faq\">\\n  <div class=\"up-label up-label-blue\"><span>07 / FAQ</span></div>\\n  <h2>Common questions</h2>\\n  <div class=\"up-faq-list\"><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">01</span><span class=\"up-faq-t\">Can a clever prompt get around these rules?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>No. Rules are applied server side as pre-filters on every query, and the agent never sees them.</p></div></div><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">02</span><span class=\"up-faq-t\">What if a rule needs a join to another table?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>Write a custom SQL rule for that table. Upsolve reads the user property and applies your SQL before anything runs.</p></div></div><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">03</span><span class=\"up-faq-t\">Does this apply to shared dashboards too?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>Yes. Live views on shared canvases re-run under the viewer\\'s own permissions.</p></div></div></div>\\n  <p class=\"up-faq-more\">Can\\'t find your answer? <a href=\"__DEMO__\" target=\"_blank\" rel=\"noopener\">Get in touch.</a></p>\\n</section>\\n<script type=\"application/ld+json\">{\"@context\": \"https://schema.org\", \"@type\": \"FAQPage\", \"mainEntity\": [{\"@type\": \"Question\", \"name\": \"Can a clever prompt get around these rules?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"No. Rules are applied server side as pre-filters on every query, and the agent never sees them.\"}}, {\"@type\": \"Question\", \"name\": \"What if a rule needs a join to another table?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Write a custom SQL rule for that table. Upsolve reads the user property and applies your SQL before anything runs.\"}}, {\"@type\": \"Question\", \"name\": \"Does this apply to shared dashboards too?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Yes. Live views on shared canvases re-run under the viewer\\'s own permissions.\"}}]}</script>',\"mcp-connections\":'<section class=\"up-hero\">\\n  <div class=\"up-hero-copy\">\\n    <div class=\"up-eyebrow\"><span>Feature &middot; Upsolve MCP Connections</span></div>\\n    <h1>Plug Notion, Linear and more <em>into your data agent.</em></h1>\\n    <p class=\"up-lede\">Attach any MCP server to your Upsolve agent. It still answers from governed warehouse data, and can now read and write where your team works: save an analysis to Notion, open a ticket, pull context from docs.</p>\\n    <div class=\"up-tags\"><span class=\"up-tag up-tag-neutral\">Any MCP server</span><span class=\"up-tag up-tag-blue\">OAuth</span><span class=\"up-tag up-tag-purple\">Per-tool control</span></div>\\n    <div class=\"up-ctas\">\\n      <a class=\"up-btn up-btn-dark\" href=\"__START__\" target=\"_blank\" rel=\"noopener\">Start free in Upsolve</a>\\n      <a class=\"up-btn up-btn-ghost\" href=\"__DEMO__\" target=\"_blank\" rel=\"noopener\">Book a demo</a>\\n    </div>\\n    <a class=\"up-launch-note up-mono\" href=\"__SITE__/launch-month\" target=\"_top\"><span class=\"up-dot\"></span>Feature 03 of 14 &middot; The Complete Agent Stack &rarr;</a>\\n  </div>\\n  <div class=\"up-hero-visual\">\\n    <div class=\"up-window\">\\n      <div class=\"up-window-bar\"><span class=\"up-mono\">AGENT \\xb7 NOTION MCP</span><span class=\"up-chip up-mono\"><span class=\"up-dot\"></span>CONNECTED</span></div>\\n      <!-- TODO: replace with the Framer-hosted gallery image, or a YouTube embed of the feature video -->\\n      <img src=\"__IMG_mcp-connections__\" alt=\"Upsolve agent chat saving an analysis of Olympic medal winners as a new page in Notion through an MCP connection\" loading=\"eager\">\\n    </div>\\n  </div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>01 / The problem</span></div>\\n  <h2>A great answer that stays in the chat window is half an answer.</h2>\\n  <div class=\"up-grid3\"><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">01</div><p>Analyses get copied by hand into docs and tickets, and lose their context on the way.</p></div><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">02</div><p>Useful context lives in tools your data agent can\\'t reach.</p></div><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">03</div><p>Every new integration used to mean custom engineering work.</p></div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>02 / How it works</span></div>\\n  <h2>From setup to production in three steps</h2>\\n  <div class=\"up-steps\"><div class=\"up-step\"><div class=\"up-mono up-step-num\">01</div><h3>Add a server</h3><p>Paste the MCP server URL in project settings and add a one-line instruction, like \"use this to save analyses in Notion docs\".</p></div><div class=\"up-step\"><div class=\"up-mono up-step-num\">02</div><h3>Authenticate and choose tools</h3><p>Connect through OAuth, then allow all tools or block the ones you don\\'t want the agent to use.</p></div><div class=\"up-step\"><div class=\"up-mono up-step-num\">03</div><h3>Ask and act</h3><p>Ask a data question, then tell the agent to write the analysis to Notion. It finds the right page and creates it.</p></div></div>\\n</section>\\n\\n<section class=\"up-dark\">\\n  <div class=\"up-dark-inner\">\\n    <div class=\"up-label up-label-light\"><span>03 / What changes</span></div>\\n    <h2>What changes with <em>Upsolve MCP Connections</em></h2>\\n    <div class=\"up-compare\">\\n      <div class=\"up-compare-box\"><div class=\"up-mono up-compare-k\">Without Upsolve MCP Connections</div><p>A great answer stays in the chat window, and someone copies it into a doc by hand.</p></div>\\n      <div class=\"up-compare-box on\"><div class=\"up-mono up-compare-k\">With Upsolve MCP Connections</div><p>The agent answers from governed data, then writes the analysis to Notion or opens the ticket itself.</p></div>\\n    </div>\\n  </div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>04 / What you get</span></div>\\n  <h2>Everything that ships with MCP Connections</h2>\\n  <div class=\"up-grid4\"><div class=\"up-card up-get\"><span class=\"up-tag up-tag-blue\">SOURCES</span><h3>Any MCP server</h3><p>Notion, Linear, GitHub, PostHog and any other tool that exposes an MCP server.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-purple\">TOOLS</span><h3>Per-tool control</h3><p>Allow or block individual tools on every server you connect.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-neutral\">INSTRUCTIONS</span><h3>Instructions per source</h3><p>Tell the agent when and why to use each connection.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-neutral\">GOVERNED</span><h3>Still governed</h3><p>Questions still run through your data model and row-level security.</p></div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>05 / Where it fits</span></div>\\n  <h2>One layer of a closed learning loop</h2>\\n  <p class=\"up-sub\">Upsolve builds the whole stack for data agents that stay accurate in production. Every conversation feeds the next improvement.</p>\\n  <div class=\"up-loop\"><div class=\"up-loop-cell up-c-blue\"><div class=\"up-mono up-loop-num\">01</div><div class=\"up-loop-name\">Ontology</div><div class=\"up-loop-desc\">Your data described clearly. Permissions enforced deterministically, not delegated to the agent.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-purple on\"><div class=\"up-mono up-loop-num\">02</div><div class=\"up-loop-name\">Agent harness</div><div class=\"up-loop-desc\">Snappy, reliable, accurate. Learns from real interactions and updates its skills and memory.</div><div class=up-loop-here>This feature</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-orange\"><div class=\"up-mono up-loop-num\">03</div><div class=\"up-loop-name\">Distribution</div><div class=\"up-loop-desc\">Your product, your Slack channels, Claude. Go where your users already are.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-red\"><div class=\"up-mono up-loop-num\">04</div><div class=\"up-loop-name\">Improvement loop</div><div class=\"up-loop-desc\">Live evals on real usage find the gaps, then you harden the context to close them.</div></div><div class=\"up-loop-back up-mono\" aria-hidden=\"true\">&#8617; Improvement loop feeds back into the ontology</div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>06 / The Complete Agent Stack</span></div>\\n  <h2>One of fourteen features in The Complete Agent Stack</h2>\\n  <div class=\"up-series\"><a class=\"up-series-item\" href=\"__SITE__/features/data-models\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 01 &middot; Ontology</span><span class=\"up-series-name\">Data Models</span></a><a class=\"up-series-item\" href=\"__SITE__/features/row-level-security\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 02 &middot; Ontology</span><span class=\"up-series-name\">Row-Level Security</span></a><a class=\"up-series-item current\" href=\"__SITE__/features/mcp-connections\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 03 &middot; Agent harness</span><span class=\"up-series-name\">MCP Connections</span></a><a class=\"up-series-item\" href=\"__SITE__/features/harness-2\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 04 &middot; Agent harness</span><span class=\"up-series-name\">Harness 2.0</span></a><a class=\"up-series-item\" href=\"__SITE__/features/bi-canvases\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 05 &middot; Distribution</span><span class=\"up-series-name\">BI Canvases</span></a><a class=\"up-series-item\" href=\"__SITE__/features/observability\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 06 &middot; Improvement loop</span><span class=\"up-series-name\">Observability</span></a><a class=\"up-series-item\" href=\"__SITE__/features/data-plane\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 07 &middot; Ontology</span><span class=\"up-series-name\">Data Plane</span></a><a class=\"up-series-item\" href=\"__SITE__/features/mcp-for-claude\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 08 &middot; Distribution</span><span class=\"up-series-name\">MCP for Claude</span></a><a class=\"up-series-item\" href=\"__SITE__/features/demo-projects\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 09 &middot; Distribution</span><span class=\"up-series-name\">Demo Projects</span></a><a class=\"up-series-item\" href=\"__SITE__/features/golden-questions\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 10 &middot; Improvement loop</span><span class=\"up-series-name\">Golden Questions</span></a><a class=\"up-series-item\" href=\"__SITE__/features/workspaces\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 11 &middot; Ontology</span><span class=\"up-series-name\">Workspaces</span></a><a class=\"up-series-item\" href=\"__SITE__/features/html-apps\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 12 &middot; Distribution</span><span class=\"up-series-name\">Branded HTML Apps</span></a><a class=\"up-series-item\" href=\"__SITE__/features/builder-agent\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 13 &middot; Improvement loop</span><span class=\"up-series-name\">Builder Agent</span></a><a class=\"up-series-item\" href=\"__SITE__/features/self-serve-onboarding\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 14 &middot; Ontology</span><span class=\"up-series-name\">Self-Serve Onboarding</span></a></div>\\n  <a class=\"up-link up-mono\" href=\"__SITE__/launch-month\" target=\"_top\">See all fourteen features &rarr;</a>\\n</section>\\n\\n<section class=\"up-section up-faq\">\\n  <div class=\"up-label up-label-blue\"><span>07 / FAQ</span></div>\\n  <h2>Common questions</h2>\\n  <div class=\"up-faq-list\"><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">01</span><span class=\"up-faq-t\">Should I use MCP for analytics across tools?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>For actions and extra context, yes. For numbers across several sources, use the Upsolve Data Plane, which queries them with real SQL instead of combining results in the agent\\'s context.</p></div></div><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">02</span><span class=\"up-faq-t\">Which MCP servers are supported?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>Any server reachable by URL. Standard OAuth flows are supported for authentication.</p></div></div><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">03</span><span class=\"up-faq-t\">Can I limit what the agent does in a connected tool?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>Yes. After connecting, choose which of the server\\'s tools are allowed.</p></div></div></div>\\n  <p class=\"up-faq-more\">Can\\'t find your answer? <a href=\"__DEMO__\" target=\"_blank\" rel=\"noopener\">Get in touch.</a></p>\\n</section>\\n<script type=\"application/ld+json\">{\"@context\": \"https://schema.org\", \"@type\": \"FAQPage\", \"mainEntity\": [{\"@type\": \"Question\", \"name\": \"Should I use MCP for analytics across tools?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"For actions and extra context, yes. For numbers across several sources, use the Upsolve Data Plane, which queries them with real SQL instead of combining results in the agent\\'s context.\"}}, {\"@type\": \"Question\", \"name\": \"Which MCP servers are supported?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Any server reachable by URL. Standard OAuth flows are supported for authentication.\"}}, {\"@type\": \"Question\", \"name\": \"Can I limit what the agent does in a connected tool?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Yes. After connecting, choose which of the server\\'s tools are allowed.\"}}]}</script>',\"harness-2\":'<section class=\"up-hero\">\\n  <div class=\"up-hero-copy\">\\n    <div class=\"up-eyebrow\"><span>Feature &middot; Upsolve Harness 2.0</span></div>\\n    <h1>A data agent that\\'s 2x faster <em>and learns every user.</em></h1>\\n    <p class=\"up-lede\">We rebuilt the Upsolve agent harness from scratch for people who don\\'t know the underlying data. Twice as fast, self-correcting, extendable with your own skills, and personalised for every user.</p>\\n    <div class=\"up-tags\"><span class=\"up-tag up-tag-neutral\">2x faster</span><span class=\"up-tag up-tag-blue\">Self-correcting</span><span class=\"up-tag up-tag-purple\">Skills and memory</span></div>\\n    <div class=\"up-ctas\">\\n      <a class=\"up-btn up-btn-dark\" href=\"__START__\" target=\"_blank\" rel=\"noopener\">Start free in Upsolve</a>\\n      <a class=\"up-btn up-btn-ghost\" href=\"__DEMO__\" target=\"_blank\" rel=\"noopener\">Book a demo</a>\\n    </div>\\n    <a class=\"up-launch-note up-mono\" href=\"__SITE__/launch-month\" target=\"_top\"><span class=\"up-dot\"></span>Feature 04 of 14 &middot; The Complete Agent Stack &rarr;</a>\\n  </div>\\n  <div class=\"up-hero-visual\">\\n    <div class=\"up-window\">\\n      <div class=\"up-window-bar\"><span class=\"up-mono\">AGENT HARNESS 2.0 \\xb7 OBSERVABILITY</span><span class=\"up-chip up-mono\"><span class=\"up-dot\"></span>SELF-CORRECTED</span></div>\\n      <!-- TODO: replace with the Framer-hosted gallery image, or a YouTube embed of the feature video -->\\n      <img src=\"__IMG_harness-2__\" alt=\"Upsolve agent answering a monthly spend by category question, with the harness steps and skills shown in observability\" loading=\"eager\">\\n    </div>\\n  </div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>01 / The problem</span></div>\\n  <h2>Most people asking data questions don\\'t know the schema. They shouldn\\'t have to.</h2>\\n  <div class=\"up-grid3\"><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">01</div><p>Hardcoded agent workflows are slow and break when the data doesn\\'t look the way they expected.</p></div><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">02</div><p>Generic agents can\\'t learn the specific analyses your business runs.</p></div><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">03</div><p>Every user gets the same one-size-fits-all output.</p></div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>02 / How it works</span></div>\\n  <h2>From setup to production in three steps</h2>\\n  <div class=\"up-steps\"><div class=\"up-step\"><div class=\"up-mono up-step-num\">01</div><h3>Ask in plain English</h3><p>The harness plans with tools and skills, writes SQL, validates it and renders the chart.</p></div><div class=\"up-step\"><div class=\"up-mono up-step-num\">02</div><h3>It corrects itself</h3><p>When the data surprises it, the agent recovers and keeps going instead of getting stuck.</p></div><div class=\"up-step\"><div class=\"up-mono up-step-num\">03</div><h3>It gets better</h3><p>Suggested skills and per-user memory improve every conversation that follows.</p></div></div>\\n</section>\\n\\n<section class=\"up-dark\">\\n  <div class=\"up-dark-inner\">\\n    <div class=\"up-label up-label-light\"><span>03 / What changes</span></div>\\n    <h2>What changes with <em>Upsolve Harness 2.0</em></h2>\\n    <div class=\"up-compare\">\\n      <div class=\"up-compare-box\"><div class=\"up-mono up-compare-k\">Without Upsolve Harness 2.0</div><p>Hardcoded workflows stall when the data surprises them, and every user gets the same generic output.</p></div>\\n      <div class=\"up-compare-box on\"><div class=\"up-mono up-compare-k\">With Upsolve Harness 2.0</div><p>A tool-and-skill harness that recovers from bad states, runs your analyses and remembers each user.</p></div>\\n    </div>\\n  </div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>04 / What you get</span></div>\\n  <h2>Everything that ships with Harness 2.0</h2>\\n  <div class=\"up-grid4\"><div class=\"up-card up-get\"><span class=\"up-tag up-tag-blue\">SPEED</span><h3>2x faster</h3><p>Tool calls and skills replace pre-hardcoded workflows.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-purple\">SKILLS</span><h3>Custom skills</h3><p>Encode your own analyses, like a spend driver skill that frames the comparison and breaks down the change.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-neutral\">LEARNING</span><h3>Suggestions</h3><p>The agent proposes new skills from real conversations for you to approve.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-neutral\">MEMORY</span><h3>Per-user memory</h3><p>Chart types, colours, time bucketing and more, remembered per user without changing accuracy.</p></div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>05 / Where it fits</span></div>\\n  <h2>One layer of a closed learning loop</h2>\\n  <p class=\"up-sub\">Upsolve builds the whole stack for data agents that stay accurate in production. Every conversation feeds the next improvement.</p>\\n  <div class=\"up-loop\"><div class=\"up-loop-cell up-c-blue\"><div class=\"up-mono up-loop-num\">01</div><div class=\"up-loop-name\">Ontology</div><div class=\"up-loop-desc\">Your data described clearly. Permissions enforced deterministically, not delegated to the agent.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-purple on\"><div class=\"up-mono up-loop-num\">02</div><div class=\"up-loop-name\">Agent harness</div><div class=\"up-loop-desc\">Snappy, reliable, accurate. Learns from real interactions and updates its skills and memory.</div><div class=up-loop-here>This feature</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-orange\"><div class=\"up-mono up-loop-num\">03</div><div class=\"up-loop-name\">Distribution</div><div class=\"up-loop-desc\">Your product, your Slack channels, Claude. Go where your users already are.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-red\"><div class=\"up-mono up-loop-num\">04</div><div class=\"up-loop-name\">Improvement loop</div><div class=\"up-loop-desc\">Live evals on real usage find the gaps, then you harden the context to close them.</div></div><div class=\"up-loop-back up-mono\" aria-hidden=\"true\">&#8617; Improvement loop feeds back into the ontology</div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>06 / The Complete Agent Stack</span></div>\\n  <h2>One of fourteen features in The Complete Agent Stack</h2>\\n  <div class=\"up-series\"><a class=\"up-series-item\" href=\"__SITE__/features/data-models\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 01 &middot; Ontology</span><span class=\"up-series-name\">Data Models</span></a><a class=\"up-series-item\" href=\"__SITE__/features/row-level-security\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 02 &middot; Ontology</span><span class=\"up-series-name\">Row-Level Security</span></a><a class=\"up-series-item\" href=\"__SITE__/features/mcp-connections\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 03 &middot; Agent harness</span><span class=\"up-series-name\">MCP Connections</span></a><a class=\"up-series-item current\" href=\"__SITE__/features/harness-2\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 04 &middot; Agent harness</span><span class=\"up-series-name\">Harness 2.0</span></a><a class=\"up-series-item\" href=\"__SITE__/features/bi-canvases\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 05 &middot; Distribution</span><span class=\"up-series-name\">BI Canvases</span></a><a class=\"up-series-item\" href=\"__SITE__/features/observability\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 06 &middot; Improvement loop</span><span class=\"up-series-name\">Observability</span></a><a class=\"up-series-item\" href=\"__SITE__/features/data-plane\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 07 &middot; Ontology</span><span class=\"up-series-name\">Data Plane</span></a><a class=\"up-series-item\" href=\"__SITE__/features/mcp-for-claude\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 08 &middot; Distribution</span><span class=\"up-series-name\">MCP for Claude</span></a><a class=\"up-series-item\" href=\"__SITE__/features/demo-projects\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 09 &middot; Distribution</span><span class=\"up-series-name\">Demo Projects</span></a><a class=\"up-series-item\" href=\"__SITE__/features/golden-questions\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 10 &middot; Improvement loop</span><span class=\"up-series-name\">Golden Questions</span></a><a class=\"up-series-item\" href=\"__SITE__/features/workspaces\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 11 &middot; Ontology</span><span class=\"up-series-name\">Workspaces</span></a><a class=\"up-series-item\" href=\"__SITE__/features/html-apps\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 12 &middot; Distribution</span><span class=\"up-series-name\">Branded HTML Apps</span></a><a class=\"up-series-item\" href=\"__SITE__/features/builder-agent\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 13 &middot; Improvement loop</span><span class=\"up-series-name\">Builder Agent</span></a><a class=\"up-series-item\" href=\"__SITE__/features/self-serve-onboarding\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 14 &middot; Ontology</span><span class=\"up-series-name\">Self-Serve Onboarding</span></a></div>\\n  <a class=\"up-link up-mono\" href=\"__SITE__/launch-month\" target=\"_top\">See all fourteen features &rarr;</a>\\n</section>\\n\\n<section class=\"up-section up-faq\">\\n  <div class=\"up-label up-label-blue\"><span>07 / FAQ</span></div>\\n  <h2>Common questions</h2>\\n  <div class=\"up-faq-list\"><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">01</span><span class=\"up-faq-t\">What skills come built in?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>Generate SQL and generate chart skills ship by default and improve over time. You add custom skills for your own analyses.</p></div></div><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">02</span><span class=\"up-faq-t\">Do suggestions change the agent automatically?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>No. Suggestions appear for a builder to review and add to the agent\\'s skills.</p></div></div><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">03</span><span class=\"up-faq-t\">Where can I deploy the new harness?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>Embedded in your product, in Slack, in Claude through MCP, or inside your own agent harness.</p></div></div></div>\\n  <p class=\"up-faq-more\">Can\\'t find your answer? <a href=\"__DEMO__\" target=\"_blank\" rel=\"noopener\">Get in touch.</a></p>\\n</section>\\n<script type=\"application/ld+json\">{\"@context\": \"https://schema.org\", \"@type\": \"FAQPage\", \"mainEntity\": [{\"@type\": \"Question\", \"name\": \"What skills come built in?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Generate SQL and generate chart skills ship by default and improve over time. You add custom skills for your own analyses.\"}}, {\"@type\": \"Question\", \"name\": \"Do suggestions change the agent automatically?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"No. Suggestions appear for a builder to review and add to the agent\\'s skills.\"}}, {\"@type\": \"Question\", \"name\": \"Where can I deploy the new harness?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Embedded in your product, in Slack, in Claude through MCP, or inside your own agent harness.\"}}]}</script>',\"bi-canvases\":'<section class=\"up-hero\">\\n  <div class=\"up-hero-copy\">\\n    <div class=\"up-eyebrow\"><span>Feature &middot; Upsolve BI Canvases</span></div>\\n    <h1>Turn agent answers into <em>dashboards your team shares.</em></h1>\\n    <p class=\"up-lede\">Favourite any chart your agent makes, drop it on a drag-and-drop canvas and share it with your org. Teammates can fork the conversation behind any chart and keep digging, with live views that respect each viewer\\'s permissions.</p>\\n    <div class=\"up-tags\"><span class=\"up-tag up-tag-neutral\">Favourites</span><span class=\"up-tag up-tag-blue\">Drag-and-drop</span><span class=\"up-tag up-tag-purple\">Forkable chats</span></div>\\n    <div class=\"up-ctas\">\\n      <a class=\"up-btn up-btn-dark\" href=\"__START__\" target=\"_blank\" rel=\"noopener\">Start free in Upsolve</a>\\n      <a class=\"up-btn up-btn-ghost\" href=\"__DEMO__\" target=\"_blank\" rel=\"noopener\">Book a demo</a>\\n    </div>\\n    <a class=\"up-launch-note up-mono\" href=\"__SITE__/launch-month\" target=\"_top\"><span class=\"up-dot\"></span>Feature 05 of 14 &middot; The Complete Agent Stack &rarr;</a>\\n  </div>\\n  <div class=\"up-hero-visual\">\\n    <div class=\"up-window\">\\n      <div class=\"up-window-bar\"><span class=\"up-mono\">CANVAS \\xb7 TRENDS</span><span class=\"up-chip up-mono\"><span class=\"up-dot\"></span>SHARED</span></div>\\n      <!-- TODO: replace with the Framer-hosted gallery image, or a YouTube embed of the feature video -->\\n      <img src=\"__IMG_bi-canvases__\" alt=\"Bar chart of total spend over the last 12 months, created by the Upsolve agent and saved to an end user&#x27;s favourites\" loading=\"eager\">\\n    </div>\\n  </div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>01 / The problem</span></div>\\n  <h2>Great chart. Gone by tomorrow.</h2>\\n  <div class=\"up-grid3\"><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">01</div><p>Chat answers get buried in history and can\\'t be revisited or reused.</p></div><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">02</div><p>Screenshots of charts lose the question and the context behind them.</p></div><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">03</div><p>Teams can\\'t build on each other\\'s analysis without starting over.</p></div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>02 / How it works</span></div>\\n  <h2>From setup to production in three steps</h2>\\n  <div class=\"up-steps\"><div class=\"up-step\"><div class=\"up-mono up-step-num\">01</div><h3>Favourite</h3><p>Save any chart. It keeps the full conversation, so you can reopen it and continue.</p></div><div class=\"up-step\"><div class=\"up-mono up-step-num\">02</div><h3>Arrange</h3><p>Drag favourites onto a canvas, resize and position them, and save versions.</p></div><div class=\"up-step\"><div class=\"up-mono up-step-num\">03</div><h3>Share and fork</h3><p>Share with your organisation or publish a read-only snapshot. Teammates fork the chat behind any chart.</p></div></div>\\n</section>\\n\\n<section class=\"up-dark\">\\n  <div class=\"up-dark-inner\">\\n    <div class=\"up-label up-label-light\"><span>03 / What changes</span></div>\\n    <h2>What changes with <em>Upsolve BI Canvases</em></h2>\\n    <div class=\"up-compare\">\\n      <div class=\"up-compare-box\"><div class=\"up-mono up-compare-k\">Without Upsolve BI Canvases</div><p>Great charts get buried in chat history, and screenshots lose the question behind them.</p></div>\\n      <div class=\"up-compare-box on\"><div class=\"up-mono up-compare-k\">With Upsolve BI Canvases</div><p>Charts are saved with their conversation, arranged on canvases, shared, and forked by teammates.</p></div>\\n    </div>\\n  </div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>04 / What you get</span></div>\\n  <h2>Everything that ships with BI Canvases</h2>\\n  <div class=\"up-grid4\"><div class=\"up-card up-get\"><span class=\"up-tag up-tag-blue\">SAVE</span><h3>Favourites with history</h3><p>Every saved chart links back to the conversation that made it.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-purple\">ARRANGE</span><h3>Drag-and-drop canvases</h3><p>Build a board from charts created over weeks of analysis.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-neutral\">FORK</span><h3>Forkable conversations</h3><p>Pick up a teammate\\'s analysis and drill further in your own thread.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-neutral\">PERMISSIONS</span><h3>Snapshot or live</h3><p>Snapshots show what the creator saw. Live views re-run under each viewer\\'s permissions.</p></div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>05 / Where it fits</span></div>\\n  <h2>One layer of a closed learning loop</h2>\\n  <p class=\"up-sub\">Upsolve builds the whole stack for data agents that stay accurate in production. Every conversation feeds the next improvement.</p>\\n  <div class=\"up-loop\"><div class=\"up-loop-cell up-c-blue\"><div class=\"up-mono up-loop-num\">01</div><div class=\"up-loop-name\">Ontology</div><div class=\"up-loop-desc\">Your data described clearly. Permissions enforced deterministically, not delegated to the agent.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-purple\"><div class=\"up-mono up-loop-num\">02</div><div class=\"up-loop-name\">Agent harness</div><div class=\"up-loop-desc\">Snappy, reliable, accurate. Learns from real interactions and updates its skills and memory.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-orange on\"><div class=\"up-mono up-loop-num\">03</div><div class=\"up-loop-name\">Distribution</div><div class=\"up-loop-desc\">Your product, your Slack channels, Claude. Go where your users already are.</div><div class=up-loop-here>This feature</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-red\"><div class=\"up-mono up-loop-num\">04</div><div class=\"up-loop-name\">Improvement loop</div><div class=\"up-loop-desc\">Live evals on real usage find the gaps, then you harden the context to close them.</div></div><div class=\"up-loop-back up-mono\" aria-hidden=\"true\">&#8617; Improvement loop feeds back into the ontology</div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>06 / The Complete Agent Stack</span></div>\\n  <h2>One of fourteen features in The Complete Agent Stack</h2>\\n  <div class=\"up-series\"><a class=\"up-series-item\" href=\"__SITE__/features/data-models\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 01 &middot; Ontology</span><span class=\"up-series-name\">Data Models</span></a><a class=\"up-series-item\" href=\"__SITE__/features/row-level-security\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 02 &middot; Ontology</span><span class=\"up-series-name\">Row-Level Security</span></a><a class=\"up-series-item\" href=\"__SITE__/features/mcp-connections\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 03 &middot; Agent harness</span><span class=\"up-series-name\">MCP Connections</span></a><a class=\"up-series-item\" href=\"__SITE__/features/harness-2\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 04 &middot; Agent harness</span><span class=\"up-series-name\">Harness 2.0</span></a><a class=\"up-series-item current\" href=\"__SITE__/features/bi-canvases\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 05 &middot; Distribution</span><span class=\"up-series-name\">BI Canvases</span></a><a class=\"up-series-item\" href=\"__SITE__/features/observability\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 06 &middot; Improvement loop</span><span class=\"up-series-name\">Observability</span></a><a class=\"up-series-item\" href=\"__SITE__/features/data-plane\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 07 &middot; Ontology</span><span class=\"up-series-name\">Data Plane</span></a><a class=\"up-series-item\" href=\"__SITE__/features/mcp-for-claude\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 08 &middot; Distribution</span><span class=\"up-series-name\">MCP for Claude</span></a><a class=\"up-series-item\" href=\"__SITE__/features/demo-projects\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 09 &middot; Distribution</span><span class=\"up-series-name\">Demo Projects</span></a><a class=\"up-series-item\" href=\"__SITE__/features/golden-questions\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 10 &middot; Improvement loop</span><span class=\"up-series-name\">Golden Questions</span></a><a class=\"up-series-item\" href=\"__SITE__/features/workspaces\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 11 &middot; Ontology</span><span class=\"up-series-name\">Workspaces</span></a><a class=\"up-series-item\" href=\"__SITE__/features/html-apps\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 12 &middot; Distribution</span><span class=\"up-series-name\">Branded HTML Apps</span></a><a class=\"up-series-item\" href=\"__SITE__/features/builder-agent\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 13 &middot; Improvement loop</span><span class=\"up-series-name\">Builder Agent</span></a><a class=\"up-series-item\" href=\"__SITE__/features/self-serve-onboarding\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 14 &middot; Ontology</span><span class=\"up-series-name\">Self-Serve Onboarding</span></a></div>\\n  <a class=\"up-link up-mono\" href=\"__SITE__/launch-month\" target=\"_top\">See all fourteen features &rarr;</a>\\n</section>\\n\\n<section class=\"up-section up-faq\">\\n  <div class=\"up-label up-label-blue\"><span>07 / FAQ</span></div>\\n  <h2>Common questions</h2>\\n  <div class=\"up-faq-list\"><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">01</span><span class=\"up-faq-t\">Can my customers use canvases when Upsolve is embedded?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>Yes. Canvases work inside the embedded iframe, so your end users can save and share their own dashboards.</p></div></div><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">02</span><span class=\"up-faq-t\">What does a public link expose?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>A read-only snapshot of the data at the time it was created. It never queries your database live.</p></div></div><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">03</span><span class=\"up-faq-t\">Who sees the latest data on a shared canvas?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>Anyone who turns on the live view, filtered to the data their own permissions allow.</p></div></div></div>\\n  <p class=\"up-faq-more\">Can\\'t find your answer? <a href=\"__DEMO__\" target=\"_blank\" rel=\"noopener\">Get in touch.</a></p>\\n</section>\\n<script type=\"application/ld+json\">{\"@context\": \"https://schema.org\", \"@type\": \"FAQPage\", \"mainEntity\": [{\"@type\": \"Question\", \"name\": \"Can my customers use canvases when Upsolve is embedded?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Yes. Canvases work inside the embedded iframe, so your end users can save and share their own dashboards.\"}}, {\"@type\": \"Question\", \"name\": \"What does a public link expose?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"A read-only snapshot of the data at the time it was created. It never queries your database live.\"}}, {\"@type\": \"Question\", \"name\": \"Who sees the latest data on a shared canvas?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Anyone who turns on the live view, filtered to the data their own permissions allow.\"}}]}</script>',observability:'<section class=\"up-hero\">\\n  <div class=\"up-hero-copy\">\\n    <div class=\"up-eyebrow\"><span>Feature &middot; Upsolve Observability</span></div>\\n    <h1>See every step your data agent took, <em>and fix it.</em></h1>\\n    <p class=\"up-lede\">Every conversation, trace, SQL query and skill call your agent makes, in one place. Live LLM-as-judge evals flag wrong answers, lazy responses, empty results and frustrated users, so you can fix the context before trust breaks.</p>\\n    <div class=\"up-tags\"><span class=\"up-tag up-tag-neutral\">Live evals</span><span class=\"up-tag up-tag-blue\">Full traces</span><span class=\"up-tag up-tag-purple\">Cost per trace</span></div>\\n    <div class=\"up-ctas\">\\n      <a class=\"up-btn up-btn-dark\" href=\"__START__\" target=\"_blank\" rel=\"noopener\">Start free in Upsolve</a>\\n      <a class=\"up-btn up-btn-ghost\" href=\"__DEMO__\" target=\"_blank\" rel=\"noopener\">Book a demo</a>\\n    </div>\\n    <a class=\"up-launch-note up-mono\" href=\"__SITE__/launch-month\" target=\"_top\"><span class=\"up-dot\"></span>Feature 06 of 14 &middot; The Complete Agent Stack &rarr;</a>\\n  </div>\\n  <div class=\"up-hero-visual\">\\n    <div class=\"up-window\">\\n      <div class=\"up-window-bar\"><span class=\"up-mono\">AGENT CHAT HISTORY \\xb7 EVALS</span><span class=\"up-chip up-mono\"><span class=\"up-dot\"></span>1 FLAGGED</span></div>\\n      <!-- TODO: replace with the Framer-hosted gallery image, or a YouTube embed of the feature video -->\\n      <img src=\"__IMG_observability__\" alt=\"Upsolve agent chat history listing each question with its eval result, charts, errors, cost and user\" loading=\"eager\">\\n    </div>\\n  </div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>01 / The problem</span></div>\\n  <h2>Data agents don\\'t fail loudly. They fail quietly.</h2>\\n  <div class=\"up-grid3\"><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">01</div><p>A slightly wrong number looks exactly like a right one.</p></div><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">02</div><p>Users who get a bad answer ask again, then stop using the agent.</p></div><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">03</div><p>Without traces, builders can\\'t tell whether the problem is the data, the context or the question.</p></div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>02 / How it works</span></div>\\n  <h2>From setup to production in three steps</h2>\\n  <div class=\"up-steps\"><div class=\"up-step\"><div class=\"up-mono up-step-num\">01</div><h3>See every session</h3><p>The agent chat history shows every user, question, eval result and cost.</p></div><div class=\"up-step\"><div class=\"up-mono up-step-num\">02</div><h3>Trace every step</h3><p>Open any session to see RAG retrieval, the skill used, the SQL, validation and the chart.</p></div><div class=\"up-step\"><div class=\"up-mono up-step-num\">03</div><h3>Close the loop</h3><p>When an eval flags a problem, fix the prompt, skill or data model and watch the next conversations improve.</p></div></div>\\n</section>\\n\\n<section class=\"up-dark\">\\n  <div class=\"up-dark-inner\">\\n    <div class=\"up-label up-label-light\"><span>03 / What changes</span></div>\\n    <h2>What changes with <em>Upsolve Observability</em></h2>\\n    <div class=\"up-compare\">\\n      <div class=\"up-compare-box\"><div class=\"up-mono up-compare-k\">Without Upsolve Observability</div><p>Wrong numbers and frustrated users go unnoticed until someone stops trusting the agent.</p></div>\\n      <div class=\"up-compare-box on\"><div class=\"up-mono up-compare-k\">With Upsolve Observability</div><p>Every session is traced and graded on real usage, so you see the failure and the fix in one place.</p></div>\\n    </div>\\n  </div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>04 / What you get</span></div>\\n  <h2>Everything that ships with Observability</h2>\\n  <div class=\"up-grid4\"><div class=\"up-card up-get\"><span class=\"up-tag up-tag-blue\">EVALS</span><h3>Live evals on real usage</h3><p>Answer correctness, agent laziness, null or empty results, chart failures and user frustration.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-purple\">TRACES</span><h3>Full step-by-step traces</h3><p>The exact SQL, RAG sources and tool calls behind every answer.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-neutral\">COST</span><h3>Cost per trace</h3><p>See spend, charts generated and errors for each individual trace.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-neutral\">SURFACES</span><h3>One view across surfaces</h3><p>Embedded, Slack and Claude conversations all land in the same history.</p></div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>05 / Where it fits</span></div>\\n  <h2>One layer of a closed learning loop</h2>\\n  <p class=\"up-sub\">Upsolve builds the whole stack for data agents that stay accurate in production. Every conversation feeds the next improvement.</p>\\n  <div class=\"up-loop\"><div class=\"up-loop-cell up-c-blue\"><div class=\"up-mono up-loop-num\">01</div><div class=\"up-loop-name\">Ontology</div><div class=\"up-loop-desc\">Your data described clearly. Permissions enforced deterministically, not delegated to the agent.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-purple\"><div class=\"up-mono up-loop-num\">02</div><div class=\"up-loop-name\">Agent harness</div><div class=\"up-loop-desc\">Snappy, reliable, accurate. Learns from real interactions and updates its skills and memory.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-orange\"><div class=\"up-mono up-loop-num\">03</div><div class=\"up-loop-name\">Distribution</div><div class=\"up-loop-desc\">Your product, your Slack channels, Claude. Go where your users already are.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-red on\"><div class=\"up-mono up-loop-num\">04</div><div class=\"up-loop-name\">Improvement loop</div><div class=\"up-loop-desc\">Live evals on real usage find the gaps, then you harden the context to close them.</div><div class=up-loop-here>This feature</div></div><div class=\"up-loop-back up-mono\" aria-hidden=\"true\">&#8617; Improvement loop feeds back into the ontology</div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>06 / The Complete Agent Stack</span></div>\\n  <h2>One of fourteen features in The Complete Agent Stack</h2>\\n  <div class=\"up-series\"><a class=\"up-series-item\" href=\"__SITE__/features/data-models\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 01 &middot; Ontology</span><span class=\"up-series-name\">Data Models</span></a><a class=\"up-series-item\" href=\"__SITE__/features/row-level-security\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 02 &middot; Ontology</span><span class=\"up-series-name\">Row-Level Security</span></a><a class=\"up-series-item\" href=\"__SITE__/features/mcp-connections\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 03 &middot; Agent harness</span><span class=\"up-series-name\">MCP Connections</span></a><a class=\"up-series-item\" href=\"__SITE__/features/harness-2\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 04 &middot; Agent harness</span><span class=\"up-series-name\">Harness 2.0</span></a><a class=\"up-series-item\" href=\"__SITE__/features/bi-canvases\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 05 &middot; Distribution</span><span class=\"up-series-name\">BI Canvases</span></a><a class=\"up-series-item current\" href=\"__SITE__/features/observability\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 06 &middot; Improvement loop</span><span class=\"up-series-name\">Observability</span></a><a class=\"up-series-item\" href=\"__SITE__/features/data-plane\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 07 &middot; Ontology</span><span class=\"up-series-name\">Data Plane</span></a><a class=\"up-series-item\" href=\"__SITE__/features/mcp-for-claude\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 08 &middot; Distribution</span><span class=\"up-series-name\">MCP for Claude</span></a><a class=\"up-series-item\" href=\"__SITE__/features/demo-projects\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 09 &middot; Distribution</span><span class=\"up-series-name\">Demo Projects</span></a><a class=\"up-series-item\" href=\"__SITE__/features/golden-questions\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 10 &middot; Improvement loop</span><span class=\"up-series-name\">Golden Questions</span></a><a class=\"up-series-item\" href=\"__SITE__/features/workspaces\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 11 &middot; Ontology</span><span class=\"up-series-name\">Workspaces</span></a><a class=\"up-series-item\" href=\"__SITE__/features/html-apps\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 12 &middot; Distribution</span><span class=\"up-series-name\">Branded HTML Apps</span></a><a class=\"up-series-item\" href=\"__SITE__/features/builder-agent\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 13 &middot; Improvement loop</span><span class=\"up-series-name\">Builder Agent</span></a><a class=\"up-series-item\" href=\"__SITE__/features/self-serve-onboarding\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 14 &middot; Ontology</span><span class=\"up-series-name\">Self-Serve Onboarding</span></a></div>\\n  <a class=\"up-link up-mono\" href=\"__SITE__/launch-month\" target=\"_top\">See all fourteen features &rarr;</a>\\n</section>\\n\\n<section class=\"up-section up-faq\">\\n  <div class=\"up-label up-label-blue\"><span>07 / FAQ</span></div>\\n  <h2>Common questions</h2>\\n  <div class=\"up-faq-list\"><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">01</span><span class=\"up-faq-t\">What does the user frustration detector look for?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>Signals like a user repeating the same request because they didn\\'t get what they expected.</p></div></div><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">02</span><span class=\"up-faq-t\">Are evals run on test sets or real usage?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>On real conversations as they happen, so you see how the agent performs for actual users.</p></div></div><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">03</span><span class=\"up-faq-t\">Can I see conversations from Claude and Slack too?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>Yes. Every deployment surface writes to the same agent chat history.</p></div></div></div>\\n  <p class=\"up-faq-more\">Can\\'t find your answer? <a href=\"__DEMO__\" target=\"_blank\" rel=\"noopener\">Get in touch.</a></p>\\n</section>\\n<script type=\"application/ld+json\">{\"@context\": \"https://schema.org\", \"@type\": \"FAQPage\", \"mainEntity\": [{\"@type\": \"Question\", \"name\": \"What does the user frustration detector look for?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Signals like a user repeating the same request because they didn\\'t get what they expected.\"}}, {\"@type\": \"Question\", \"name\": \"Are evals run on test sets or real usage?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"On real conversations as they happen, so you see how the agent performs for actual users.\"}}, {\"@type\": \"Question\", \"name\": \"Can I see conversations from Claude and Slack too?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Yes. Every deployment surface writes to the same agent chat history.\"}}]}</script>',\"data-plane\":'<section class=\"up-hero\">\\n  <div class=\"up-hero-copy\">\\n    <div class=\"up-eyebrow\"><span>Feature &middot; Upsolve Data Plane</span></div>\\n    <h1>Stripe, PostHog and HubSpot. <em>One agent. Real SQL.</em></h1>\\n    <p class=\"up-lede\">Connect hundreds of sources into one Upsolve data model, no warehouse required. Your agent writes real SQL across Stripe, PostHog, HubSpot, GitHub and your warehouse, with row-level security, instead of stitching MCP calls together.</p>\\n    <div class=\"up-tags\"><span class=\"up-tag up-tag-neutral\">Hundreds of sources</span><span class=\"up-tag up-tag-blue\">No warehouse needed</span><span class=\"up-tag up-tag-purple\">Cross-source SQL</span></div>\\n    <div class=\"up-ctas\">\\n      <a class=\"up-btn up-btn-dark\" href=\"__START__\" target=\"_blank\" rel=\"noopener\">Start free in Upsolve</a>\\n      <a class=\"up-btn up-btn-ghost\" href=\"__DEMO__\" target=\"_blank\" rel=\"noopener\">Book a demo</a>\\n    </div>\\n    <a class=\"up-launch-note up-mono\" href=\"__SITE__/launch-month\" target=\"_top\"><span class=\"up-dot\"></span>Feature 07 of 14 &middot; The Complete Agent Stack &rarr;</a>\\n  </div>\\n  <div class=\"up-hero-visual\">\\n    <div class=\"up-window\">\\n      <div class=\"up-window-bar\"><span class=\"up-mono\">DATA PLANE \\xb7 NEW DATA SOURCE</span><span class=\"up-chip up-mono\"><span class=\"up-dot\"></span>QUERYABLE</span></div>\\n      <!-- TODO: replace with the Framer-hosted gallery image, or a YouTube embed of the feature video -->\\n      <img src=\"__IMG_data-plane__\" alt=\"Upsolve Data Plane catalog for adding a new data source, showing connectors such as Redshift, BigQuery and ClickHouse\" loading=\"eager\">\\n    </div>\\n  </div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>01 / The problem</span></div>\\n  <h2>Your agent is matching Stripe and PostHog records in its head.</h2>\\n  <div class=\"up-grid3\"><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">01</div><p>With one MCP per source, the agent combines results inside its context window, where mistakes happen.</p></div><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">02</div><p>You\\'re limited to whatever each provider chose to expose through its MCP server.</p></div><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">03</div><p>MCP access is all or nothing per source, with no row-level security.</p></div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>02 / How it works</span></div>\\n  <h2>From setup to production in three steps</h2>\\n  <div class=\"up-steps\"><div class=\"up-step\"><div class=\"up-mono up-step-num\">01</div><h3>Connect sources</h3><p>Pick from hundreds of connectors: Stripe, PostHog, HubSpot, GitHub, Google and Facebook Ads, Sheets, CSVs, BigQuery and ClickHouse.</p></div><div class=\"up-step\"><div class=\"up-mono up-step-num\">02</div><h3>Model them together</h3><p>Add the tables you need to one data model, then annotate and describe them.</p></div><div class=\"up-step\"><div class=\"up-mono up-step-num\">03</div><h3>Query with real SQL</h3><p>The agent writes SQL across sources for deep, multi-year analysis you can verify.</p></div></div>\\n</section>\\n\\n<section class=\"up-dark\">\\n  <div class=\"up-dark-inner\">\\n    <div class=\"up-label up-label-light\"><span>03 / What changes</span></div>\\n    <h2>What changes with <em>Upsolve Data Plane</em></h2>\\n    <div class=\"up-compare\">\\n      <div class=\"up-compare-box\"><div class=\"up-mono up-compare-k\">Without Upsolve Data Plane</div><p>One MCP per source, with the agent matching records in its context window. That\\'s where hallucinations start.</p></div>\\n      <div class=\"up-compare-box on\"><div class=\"up-mono up-compare-k\">With Upsolve Data Plane</div><p>Sources land in one governed data model, and the agent writes real SQL across them.</p></div>\\n    </div>\\n  </div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>04 / What you get</span></div>\\n  <h2>Everything that ships with Data Plane</h2>\\n  <div class=\"up-grid4\"><div class=\"up-card up-get\"><span class=\"up-tag up-tag-blue\">CONNECT</span><h3>Hundreds of connectors</h3><p>Get an agent live on the tools you already use, before you invest in a warehouse.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-purple\">QUERY</span><h3>Cross-source SQL</h3><p>Proper queries across sources, not in-memory guesswork.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-neutral\">CHOOSE</span><h3>Your choice of tables</h3><p>Expose exactly the tables and fields you want, not just what an MCP server offers.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-neutral\">GOVERNED</span><h3>Governed by default</h3><p>The same row-level security rules apply to every connected source.</p></div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>05 / Where it fits</span></div>\\n  <h2>One layer of a closed learning loop</h2>\\n  <p class=\"up-sub\">Upsolve builds the whole stack for data agents that stay accurate in production. Every conversation feeds the next improvement.</p>\\n  <div class=\"up-loop\"><div class=\"up-loop-cell up-c-blue on\"><div class=\"up-mono up-loop-num\">01</div><div class=\"up-loop-name\">Ontology</div><div class=\"up-loop-desc\">Your data described clearly. Permissions enforced deterministically, not delegated to the agent.</div><div class=up-loop-here>This feature</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-purple\"><div class=\"up-mono up-loop-num\">02</div><div class=\"up-loop-name\">Agent harness</div><div class=\"up-loop-desc\">Snappy, reliable, accurate. Learns from real interactions and updates its skills and memory.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-orange\"><div class=\"up-mono up-loop-num\">03</div><div class=\"up-loop-name\">Distribution</div><div class=\"up-loop-desc\">Your product, your Slack channels, Claude. Go where your users already are.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-red\"><div class=\"up-mono up-loop-num\">04</div><div class=\"up-loop-name\">Improvement loop</div><div class=\"up-loop-desc\">Live evals on real usage find the gaps, then you harden the context to close them.</div></div><div class=\"up-loop-back up-mono\" aria-hidden=\"true\">&#8617; Improvement loop feeds back into the ontology</div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>06 / The Complete Agent Stack</span></div>\\n  <h2>One of fourteen features in The Complete Agent Stack</h2>\\n  <div class=\"up-series\"><a class=\"up-series-item\" href=\"__SITE__/features/data-models\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 01 &middot; Ontology</span><span class=\"up-series-name\">Data Models</span></a><a class=\"up-series-item\" href=\"__SITE__/features/row-level-security\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 02 &middot; Ontology</span><span class=\"up-series-name\">Row-Level Security</span></a><a class=\"up-series-item\" href=\"__SITE__/features/mcp-connections\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 03 &middot; Agent harness</span><span class=\"up-series-name\">MCP Connections</span></a><a class=\"up-series-item\" href=\"__SITE__/features/harness-2\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 04 &middot; Agent harness</span><span class=\"up-series-name\">Harness 2.0</span></a><a class=\"up-series-item\" href=\"__SITE__/features/bi-canvases\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 05 &middot; Distribution</span><span class=\"up-series-name\">BI Canvases</span></a><a class=\"up-series-item\" href=\"__SITE__/features/observability\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 06 &middot; Improvement loop</span><span class=\"up-series-name\">Observability</span></a><a class=\"up-series-item current\" href=\"__SITE__/features/data-plane\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 07 &middot; Ontology</span><span class=\"up-series-name\">Data Plane</span></a><a class=\"up-series-item\" href=\"__SITE__/features/mcp-for-claude\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 08 &middot; Distribution</span><span class=\"up-series-name\">MCP for Claude</span></a><a class=\"up-series-item\" href=\"__SITE__/features/demo-projects\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 09 &middot; Distribution</span><span class=\"up-series-name\">Demo Projects</span></a><a class=\"up-series-item\" href=\"__SITE__/features/golden-questions\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 10 &middot; Improvement loop</span><span class=\"up-series-name\">Golden Questions</span></a><a class=\"up-series-item\" href=\"__SITE__/features/workspaces\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 11 &middot; Ontology</span><span class=\"up-series-name\">Workspaces</span></a><a class=\"up-series-item\" href=\"__SITE__/features/html-apps\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 12 &middot; Distribution</span><span class=\"up-series-name\">Branded HTML Apps</span></a><a class=\"up-series-item\" href=\"__SITE__/features/builder-agent\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 13 &middot; Improvement loop</span><span class=\"up-series-name\">Builder Agent</span></a><a class=\"up-series-item\" href=\"__SITE__/features/self-serve-onboarding\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 14 &middot; Ontology</span><span class=\"up-series-name\">Self-Serve Onboarding</span></a></div>\\n  <a class=\"up-link up-mono\" href=\"__SITE__/launch-month\" target=\"_top\">See all fourteen features &rarr;</a>\\n</section>\\n\\n<section class=\"up-section up-faq\">\\n  <div class=\"up-label up-label-blue\"><span>07 / FAQ</span></div>\\n  <h2>Common questions</h2>\\n  <div class=\"up-faq-list\"><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">01</span><span class=\"up-faq-t\">Do I need a data warehouse?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>No. The Data Plane lets you start with SaaS sources directly. It also works alongside BigQuery and ClickHouse.</p></div></div><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">02</span><span class=\"up-faq-t\">When should I use MCP instead?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>Use MCP for actions and supporting context, like saving to Notion. Use the Data Plane for analytics you need to trust.</p></div></div><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">03</span><span class=\"up-faq-t\">Does row-level security work on these sources?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>Yes. Data plane tables sit in your data model, so global and custom rules apply.</p></div></div></div>\\n  <p class=\"up-faq-more\">Can\\'t find your answer? <a href=\"__DEMO__\" target=\"_blank\" rel=\"noopener\">Get in touch.</a></p>\\n</section>\\n<script type=\"application/ld+json\">{\"@context\": \"https://schema.org\", \"@type\": \"FAQPage\", \"mainEntity\": [{\"@type\": \"Question\", \"name\": \"Do I need a data warehouse?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"No. The Data Plane lets you start with SaaS sources directly. It also works alongside BigQuery and ClickHouse.\"}}, {\"@type\": \"Question\", \"name\": \"When should I use MCP instead?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Use MCP for actions and supporting context, like saving to Notion. Use the Data Plane for analytics you need to trust.\"}}, {\"@type\": \"Question\", \"name\": \"Does row-level security work on these sources?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Yes. Data plane tables sit in your data model, so global and custom rules apply.\"}}]}</script>',\"mcp-for-claude\":'<section class=\"up-hero\">\\n  <div class=\"up-hero-copy\">\\n    <div class=\"up-eyebrow\"><span>Feature &middot; Upsolve MCP for Claude</span></div>\\n    <h1>Your governed data agent, <em>right inside Claude.</em></h1>\\n    <p class=\"up-lede\">Connect your Upsolve agent to Claude with one OAuth sign-in. Ask questions in Claude and get charts and analysis from the same governed context, permissions and observability as your product and Slack deployments.</p>\\n    <div class=\"up-tags\"><span class=\"up-tag up-tag-neutral\">One OAuth click</span><span class=\"up-tag up-tag-blue\">Charts in Claude</span><span class=\"up-tag up-tag-purple\">Same governance</span></div>\\n    <div class=\"up-ctas\">\\n      <a class=\"up-btn up-btn-dark\" href=\"__START__\" target=\"_blank\" rel=\"noopener\">Start free in Upsolve</a>\\n      <a class=\"up-btn up-btn-ghost\" href=\"__DEMO__\" target=\"_blank\" rel=\"noopener\">Book a demo</a>\\n    </div>\\n    <a class=\"up-launch-note up-mono\" href=\"__SITE__/launch-month\" target=\"_top\"><span class=\"up-dot\"></span>Feature 08 of 14 &middot; The Complete Agent Stack &rarr;</a>\\n  </div>\\n  <div class=\"up-hero-visual\">\\n    <div class=\"up-window\">\\n      <div class=\"up-window-bar\"><span class=\"up-mono\">CLAUDE \\xb7 ANALYZE DATA</span><span class=\"up-chip up-mono\"><span class=\"up-dot\"></span>VIA UPSOLVE MCP</span></div>\\n      <!-- TODO: replace with the Framer-hosted gallery image, or a YouTube embed of the feature video -->\\n      <img src=\"__IMG_mcp-for-claude__\" alt=\"Claude conversation showing an Upsolve chart of purchase order value by month and status over six months\" loading=\"eager\">\\n    </div>\\n  </div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>01 / The problem</span></div>\\n  <h2>Your team works in Claude. Your data agent should be there too.</h2>\\n  <div class=\"up-grid3\"><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">01</div><p>Pasting exports into a chat assistant means ungoverned numbers and no permissions.</p></div><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">02</div><p>A second, separate agent for Claude means a second set of definitions to maintain.</p></div><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">03</div><p>Admins lose sight of what people are asking and what answers they get.</p></div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>02 / How it works</span></div>\\n  <h2>From setup to production in three steps</h2>\\n  <div class=\"up-steps\"><div class=\"up-step\"><div class=\"up-mono up-step-num\">01</div><h3>Pick your agent</h3><p>In organisation settings, choose which Upsolve agent the MCP server exposes.</p></div><div class=\"up-step\"><div class=\"up-mono up-step-num\">02</div><h3>Connect in Claude</h3><p>Find the Upsolve AI connector in Claude, sign in through OAuth and allow the Analyze Data tool.</p></div><div class=\"up-step\"><div class=\"up-mono up-step-num\">03</div><h3>Ask away</h3><p>Ask a question in Claude and get Upsolve\\'s analysis with a chart rendered right in the conversation.</p></div></div>\\n</section>\\n\\n<section class=\"up-dark\">\\n  <div class=\"up-dark-inner\">\\n    <div class=\"up-label up-label-light\"><span>03 / What changes</span></div>\\n    <h2>What changes with <em>Upsolve MCP for Claude</em></h2>\\n    <div class=\"up-compare\">\\n      <div class=\"up-compare-box\"><div class=\"up-mono up-compare-k\">Without Upsolve MCP for Claude</div><p>People paste exports into a chat assistant, with no definitions, permissions or audit trail.</p></div>\\n      <div class=\"up-compare-box on\"><div class=\"up-mono up-compare-k\">With Upsolve MCP for Claude</div><p>The same Upsolve agent, context and permissions answer in Claude, and every call is logged.</p></div>\\n    </div>\\n  </div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>04 / What you get</span></div>\\n  <h2>Everything that ships with MCP for Claude</h2>\\n  <div class=\"up-grid4\"><div class=\"up-card up-get\"><span class=\"up-tag up-tag-blue\">TOOL</span><h3>One tool, full power</h3><p>Analyze Data runs the same analysis Upsolve runs everywhere else.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-purple\">CHARTS</span><h3>Charts in Claude</h3><p>Visualisations render directly in the Claude conversation.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-neutral\">GOVERNANCE</span><h3>Same governance</h3><p>The same data model, row-level security and agent configuration as every other surface.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-neutral\">VISIBILITY</span><h3>Full observability</h3><p>Every Claude call appears in the agent\\'s chat history for admins.</p></div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>05 / Where it fits</span></div>\\n  <h2>One layer of a closed learning loop</h2>\\n  <p class=\"up-sub\">Upsolve builds the whole stack for data agents that stay accurate in production. Every conversation feeds the next improvement.</p>\\n  <div class=\"up-loop\"><div class=\"up-loop-cell up-c-blue\"><div class=\"up-mono up-loop-num\">01</div><div class=\"up-loop-name\">Ontology</div><div class=\"up-loop-desc\">Your data described clearly. Permissions enforced deterministically, not delegated to the agent.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-purple\"><div class=\"up-mono up-loop-num\">02</div><div class=\"up-loop-name\">Agent harness</div><div class=\"up-loop-desc\">Snappy, reliable, accurate. Learns from real interactions and updates its skills and memory.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-orange on\"><div class=\"up-mono up-loop-num\">03</div><div class=\"up-loop-name\">Distribution</div><div class=\"up-loop-desc\">Your product, your Slack channels, Claude. Go where your users already are.</div><div class=up-loop-here>This feature</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-red\"><div class=\"up-mono up-loop-num\">04</div><div class=\"up-loop-name\">Improvement loop</div><div class=\"up-loop-desc\">Live evals on real usage find the gaps, then you harden the context to close them.</div></div><div class=\"up-loop-back up-mono\" aria-hidden=\"true\">&#8617; Improvement loop feeds back into the ontology</div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>06 / The Complete Agent Stack</span></div>\\n  <h2>One of fourteen features in The Complete Agent Stack</h2>\\n  <div class=\"up-series\"><a class=\"up-series-item\" href=\"__SITE__/features/data-models\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 01 &middot; Ontology</span><span class=\"up-series-name\">Data Models</span></a><a class=\"up-series-item\" href=\"__SITE__/features/row-level-security\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 02 &middot; Ontology</span><span class=\"up-series-name\">Row-Level Security</span></a><a class=\"up-series-item\" href=\"__SITE__/features/mcp-connections\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 03 &middot; Agent harness</span><span class=\"up-series-name\">MCP Connections</span></a><a class=\"up-series-item\" href=\"__SITE__/features/harness-2\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 04 &middot; Agent harness</span><span class=\"up-series-name\">Harness 2.0</span></a><a class=\"up-series-item\" href=\"__SITE__/features/bi-canvases\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 05 &middot; Distribution</span><span class=\"up-series-name\">BI Canvases</span></a><a class=\"up-series-item\" href=\"__SITE__/features/observability\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 06 &middot; Improvement loop</span><span class=\"up-series-name\">Observability</span></a><a class=\"up-series-item\" href=\"__SITE__/features/data-plane\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 07 &middot; Ontology</span><span class=\"up-series-name\">Data Plane</span></a><a class=\"up-series-item current\" href=\"__SITE__/features/mcp-for-claude\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 08 &middot; Distribution</span><span class=\"up-series-name\">MCP for Claude</span></a><a class=\"up-series-item\" href=\"__SITE__/features/demo-projects\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 09 &middot; Distribution</span><span class=\"up-series-name\">Demo Projects</span></a><a class=\"up-series-item\" href=\"__SITE__/features/golden-questions\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 10 &middot; Improvement loop</span><span class=\"up-series-name\">Golden Questions</span></a><a class=\"up-series-item\" href=\"__SITE__/features/workspaces\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 11 &middot; Ontology</span><span class=\"up-series-name\">Workspaces</span></a><a class=\"up-series-item\" href=\"__SITE__/features/html-apps\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 12 &middot; Distribution</span><span class=\"up-series-name\">Branded HTML Apps</span></a><a class=\"up-series-item\" href=\"__SITE__/features/builder-agent\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 13 &middot; Improvement loop</span><span class=\"up-series-name\">Builder Agent</span></a><a class=\"up-series-item\" href=\"__SITE__/features/self-serve-onboarding\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 14 &middot; Ontology</span><span class=\"up-series-name\">Self-Serve Onboarding</span></a></div>\\n  <a class=\"up-link up-mono\" href=\"__SITE__/launch-month\" target=\"_top\">See all fourteen features &rarr;</a>\\n</section>\\n\\n<section class=\"up-section up-faq\">\\n  <div class=\"up-label up-label-blue\"><span>07 / FAQ</span></div>\\n  <h2>Common questions</h2>\\n  <div class=\"up-faq-list\"><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">01</span><span class=\"up-faq-t\">Which agent does Claude connect to?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>The one you pick in organisation settings under MCP agent. You can switch it at any time.</p></div></div><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">02</span><span class=\"up-faq-t\">Can my customers use this with their own agents?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>Yes. Upsolve can also be deployed as an MCP server for your end users\\' own agents.</p></div></div><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">03</span><span class=\"up-faq-t\">Do I need to write any code?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>No. Setup is a settings change in Upsolve and an OAuth connection in Claude.</p></div></div></div>\\n  <p class=\"up-faq-more\">Can\\'t find your answer? <a href=\"__DEMO__\" target=\"_blank\" rel=\"noopener\">Get in touch.</a></p>\\n</section>\\n<script type=\"application/ld+json\">{\"@context\": \"https://schema.org\", \"@type\": \"FAQPage\", \"mainEntity\": [{\"@type\": \"Question\", \"name\": \"Which agent does Claude connect to?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"The one you pick in organisation settings under MCP agent. You can switch it at any time.\"}}, {\"@type\": \"Question\", \"name\": \"Can my customers use this with their own agents?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Yes. Upsolve can also be deployed as an MCP server for your end users\\' own agents.\"}}, {\"@type\": \"Question\", \"name\": \"Do I need to write any code?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"No. Setup is a settings change in Upsolve and an OAuth connection in Claude.\"}}]}</script>',\"demo-projects\":'<section class=\"up-hero\">\\n  <div class=\"up-hero-copy\">\\n    <div class=\"up-eyebrow\"><span>Feature &middot; Upsolve Demo Projects</span></div>\\n    <h1>A working data agent <em>from your first minute.</em></h1>\\n    <p class=\"up-lede\">Spin up a sample project and Upsolve sets up the connection, data model, security rules, agent, charts and dashboard for you. Explore the whole platform before you connect your own data.</p>\\n    <div class=\"up-tags\"><span class=\"up-tag up-tag-neutral\">One click</span><span class=\"up-tag up-tag-blue\">Fully configured</span><span class=\"up-tag up-tag-purple\">Sample data included</span></div>\\n    <div class=\"up-ctas\">\\n      <a class=\"up-btn up-btn-dark\" href=\"__START__\" target=\"_blank\" rel=\"noopener\">Start free in Upsolve</a>\\n      <a class=\"up-btn up-btn-ghost\" href=\"__DEMO__\" target=\"_blank\" rel=\"noopener\">Book a demo</a>\\n    </div>\\n    <a class=\"up-launch-note up-mono\" href=\"__SITE__/launch-month\" target=\"_top\"><span class=\"up-dot\"></span>Feature 09 of 14 &middot; The Complete Agent Stack &rarr;</a>\\n  </div>\\n  <div class=\"up-hero-visual\">\\n    <div class=\"up-window\">\\n      <div class=\"up-window-bar\"><span class=\"up-mono\">SAMPLE PROJECT \\xb7 OLYMPICS DATA</span><span class=\"up-chip up-mono\"><span class=\"up-dot\"></span>READY</span></div>\\n      <!-- TODO: replace with the Framer-hosted gallery image, or a YouTube embed of the feature video -->\\n      <img src=\"__IMG_demo-projects__\" alt=\"Upsolve sample project agent answering a question about top athletes at the 2004 Summer Olympics with a bar chart\" loading=\"eager\">\\n    </div>\\n  </div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>01 / The problem</span></div>\\n  <h2>Trying a data agent platform usually starts with a week of setup.</h2>\\n  <div class=\"up-grid3\"><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">01</div><p>You have to connect data, model it and write prompts before you see a single answer.</p></div><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">02</div><p>An empty workspace doesn\\'t show what good looks like, so it\\'s hard to judge the product.</p></div><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">03</div><p>When your own setup misbehaves, there\\'s no working reference to compare it against.</p></div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>02 / How it works</span></div>\\n  <h2>From setup to production in three steps</h2>\\n  <div class=\"up-steps\"><div class=\"up-step\"><div class=\"up-mono up-step-num\">01</div><h3>Create a sample project</h3><p>Choose a sample project when you create a project. Upsolve sets up the connection, data model, security rules, agent and dashboards.</p></div><div class=\"up-step\"><div class=\"up-mono up-step-num\">02</div><h3>Ask it anything</h3><p>Ask what data you have access to, then ask analytical questions. Answers respect the sample row-level security, so the Japan user only sees Japan\\'s athletes.</p></div><div class=\"up-step\"><div class=\"up-mono up-step-num\">03</div><h3>Deploy it like your own</h3><p>Grab the iframe or a preview link, or connect it to Claude through the Upsolve MCP. Connect your own data from project settings when you\\'re ready.</p></div></div>\\n</section>\\n\\n<section class=\"up-dark\">\\n  <div class=\"up-dark-inner\">\\n    <div class=\"up-label up-label-light\"><span>03 / What changes</span></div>\\n    <h2>What changes with <em>Upsolve Demo Projects</em></h2>\\n    <div class=\"up-compare\">\\n      <div class=\"up-compare-box\"><div class=\"up-mono up-compare-k\">Without Upsolve Demo Projects</div><p>You connect data, build a model and write prompts for days before you see whether the agent can answer anything.</p></div>\\n      <div class=\"up-compare-box on\"><div class=\"up-mono up-compare-k\">With Upsolve Demo Projects</div><p>A complete sample workspace answers questions, enforces permissions and renders dashboards the moment it\\'s created.</p></div>\\n    </div>\\n  </div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>04 / What you get</span></div>\\n  <h2>Everything that ships with Demo Projects</h2>\\n  <div class=\"up-grid4\"><div class=\"up-card up-get\"><span class=\"up-tag up-tag-blue\">STACK</span><h3>Full stack, pre-built</h3><p>Connection, data model, data security rules, agent, skills, memory and suggestions, all configured.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-purple\">SECURITY</span><h3>Row-level security included</h3><p>Query as a sample user and see tenancy working from day zero.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-neutral\">DASHBOARDS</span><h3>Charts, canvases and an app</h3><p>Favourite charts, build canvases, and open a pre-built Olympics dashboard application.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-neutral\">REFERENCE</span><h3>A reference for production</h3><p>Cross-check your own project\\'s setup against a workspace that\\'s known to work.</p></div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>05 / Where it fits</span></div>\\n  <h2>One layer of a closed learning loop</h2>\\n  <p class=\"up-sub\">Upsolve builds the whole stack for data agents that stay accurate in production. Every conversation feeds the next improvement.</p>\\n  <div class=\"up-loop\"><div class=\"up-loop-cell up-c-blue\"><div class=\"up-mono up-loop-num\">01</div><div class=\"up-loop-name\">Ontology</div><div class=\"up-loop-desc\">Your data described clearly. Permissions enforced deterministically, not delegated to the agent.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-purple\"><div class=\"up-mono up-loop-num\">02</div><div class=\"up-loop-name\">Agent harness</div><div class=\"up-loop-desc\">Snappy, reliable, accurate. Learns from real interactions and updates its skills and memory.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-orange on\"><div class=\"up-mono up-loop-num\">03</div><div class=\"up-loop-name\">Distribution</div><div class=\"up-loop-desc\">Your product, your Slack channels, Claude. Go where your users already are.</div><div class=up-loop-here>This feature</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-red\"><div class=\"up-mono up-loop-num\">04</div><div class=\"up-loop-name\">Improvement loop</div><div class=\"up-loop-desc\">Live evals on real usage find the gaps, then you harden the context to close them.</div></div><div class=\"up-loop-back up-mono\" aria-hidden=\"true\">&#8617; Improvement loop feeds back into the ontology</div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>06 / The Complete Agent Stack</span></div>\\n  <h2>One of fourteen features in The Complete Agent Stack</h2>\\n  <div class=\"up-series\"><a class=\"up-series-item\" href=\"__SITE__/features/data-models\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 01 &middot; Ontology</span><span class=\"up-series-name\">Data Models</span></a><a class=\"up-series-item\" href=\"__SITE__/features/row-level-security\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 02 &middot; Ontology</span><span class=\"up-series-name\">Row-Level Security</span></a><a class=\"up-series-item\" href=\"__SITE__/features/mcp-connections\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 03 &middot; Agent harness</span><span class=\"up-series-name\">MCP Connections</span></a><a class=\"up-series-item\" href=\"__SITE__/features/harness-2\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 04 &middot; Agent harness</span><span class=\"up-series-name\">Harness 2.0</span></a><a class=\"up-series-item\" href=\"__SITE__/features/bi-canvases\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 05 &middot; Distribution</span><span class=\"up-series-name\">BI Canvases</span></a><a class=\"up-series-item\" href=\"__SITE__/features/observability\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 06 &middot; Improvement loop</span><span class=\"up-series-name\">Observability</span></a><a class=\"up-series-item\" href=\"__SITE__/features/data-plane\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 07 &middot; Ontology</span><span class=\"up-series-name\">Data Plane</span></a><a class=\"up-series-item\" href=\"__SITE__/features/mcp-for-claude\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 08 &middot; Distribution</span><span class=\"up-series-name\">MCP for Claude</span></a><a class=\"up-series-item current\" href=\"__SITE__/features/demo-projects\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 09 &middot; Distribution</span><span class=\"up-series-name\">Demo Projects</span></a><a class=\"up-series-item\" href=\"__SITE__/features/golden-questions\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 10 &middot; Improvement loop</span><span class=\"up-series-name\">Golden Questions</span></a><a class=\"up-series-item\" href=\"__SITE__/features/workspaces\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 11 &middot; Ontology</span><span class=\"up-series-name\">Workspaces</span></a><a class=\"up-series-item\" href=\"__SITE__/features/html-apps\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 12 &middot; Distribution</span><span class=\"up-series-name\">Branded HTML Apps</span></a><a class=\"up-series-item\" href=\"__SITE__/features/builder-agent\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 13 &middot; Improvement loop</span><span class=\"up-series-name\">Builder Agent</span></a><a class=\"up-series-item\" href=\"__SITE__/features/self-serve-onboarding\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 14 &middot; Ontology</span><span class=\"up-series-name\">Self-Serve Onboarding</span></a></div>\\n  <a class=\"up-link up-mono\" href=\"__SITE__/launch-month\" target=\"_top\">See all fourteen features &rarr;</a>\\n</section>\\n\\n<section class=\"up-section up-faq\">\\n  <div class=\"up-label up-label-blue\"><span>07 / FAQ</span></div>\\n  <h2>Common questions</h2>\\n  <div class=\"up-faq-list\"><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">01</span><span class=\"up-faq-t\">What data is in the sample project?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>Olympics data plus geography and economic industry data, so you can try analytical questions straight away.</p></div></div><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">02</span><span class=\"up-faq-t\">Can I connect my own data afterwards?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>Yes. Go to project settings, open Connections, pick your data source and wire it through the data model and agent.</p></div></div><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">03</span><span class=\"up-faq-t\">Can I use the sample agent in Claude?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>Yes. In organisation settings, point the MCP agent at your sample project and ask it questions from Claude.</p></div></div></div>\\n  <p class=\"up-faq-more\">Can\\'t find your answer? <a href=\"__DEMO__\" target=\"_blank\" rel=\"noopener\">Get in touch.</a></p>\\n</section>\\n<script type=\"application/ld+json\">{\"@context\": \"https://schema.org\", \"@type\": \"FAQPage\", \"mainEntity\": [{\"@type\": \"Question\", \"name\": \"What data is in the sample project?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Olympics data plus geography and economic industry data, so you can try analytical questions straight away.\"}}, {\"@type\": \"Question\", \"name\": \"Can I connect my own data afterwards?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Yes. Go to project settings, open Connections, pick your data source and wire it through the data model and agent.\"}}, {\"@type\": \"Question\", \"name\": \"Can I use the sample agent in Claude?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Yes. In organisation settings, point the MCP agent at your sample project and ask it questions from Claude.\"}}]}</script>',\"golden-questions\":'<section class=\"up-hero\">\\n  <div class=\"up-hero-copy\">\\n    <div class=\"up-eyebrow\"><span>Feature &middot; Upsolve Golden Questions</span></div>\\n    <h1>Teach your agent the right answer, <em>and know when it\\'s unsure.</em></h1>\\n    <p class=\"up-lede\">Save the questions your agent must get right, with the SQL you trust. Upsolve uses them as test cases and references, and scores every answer\\'s confidence before it reaches a user.</p>\\n    <div class=\"up-tags\"><span class=\"up-tag up-tag-neutral\">Test cases</span><span class=\"up-tag up-tag-blue\">Confidence score</span><span class=\"up-tag up-tag-purple\">Answer threshold</span></div>\\n    <div class=\"up-ctas\">\\n      <a class=\"up-btn up-btn-dark\" href=\"__START__\" target=\"_blank\" rel=\"noopener\">Start free in Upsolve</a>\\n      <a class=\"up-btn up-btn-ghost\" href=\"__DEMO__\" target=\"_blank\" rel=\"noopener\">Book a demo</a>\\n    </div>\\n    <a class=\"up-launch-note up-mono\" href=\"__SITE__/launch-month\" target=\"_top\"><span class=\"up-dot\"></span>Feature 10 of 14 &middot; The Complete Agent Stack &rarr;</a>\\n  </div>\\n  <div class=\"up-hero-visual\">\\n    <div class=\"up-window\">\\n      <div class=\"up-window-bar\"><span class=\"up-mono\">SAVE AS GOLDEN QUESTION</span><span class=\"up-chip up-mono\"><span class=\"up-dot\"></span>VERIFIED</span></div>\\n      <!-- TODO: replace with the Framer-hosted gallery image, or a YouTube embed of the feature video -->\\n      <img src=\"__IMG_golden-questions__\" alt=\"Upsolve Save as Golden Question dialog with the question about the worst vendors and its expected SQL\" loading=\"eager\">\\n    </div>\\n  </div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>01 / The problem</span></div>\\n  <h2>Your agent answers the same question differently every time.</h2>\\n  <div class=\"up-grid3\"><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">01</div><p>Words like \"worst vendor\" mean something specific at your company, and the agent has to guess.</p></div><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">02</div><p>Good answers from real users disappear into chat history instead of teaching the agent.</p></div><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">03</div><p>Every answer reaches the user looking equally sure, even when the agent reasoned its way to a guess.</p></div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>02 / How it works</span></div>\\n  <h2>From setup to production in three steps</h2>\\n  <div class=\"up-steps\"><div class=\"up-step\"><div class=\"up-mono up-step-num\">01</div><h3>Find a good answer</h3><p>Open a past conversation in observability and check the question, the SQL and the chart.</p></div><div class=\"up-step\"><div class=\"up-mono up-step-num\">02</div><h3>Save it as a golden question</h3><p>Keep the SQL as it is, or edit it first. For example, rank the worst vendors by spend only, not by order count.</p></div><div class=\"up-step\"><div class=\"up-mono up-step-num\">03</div><h3>Set a confidence threshold</h3><p>Every answer gets a confidence score. Raise the threshold and low-confidence answers are held back from end users.</p></div></div>\\n</section>\\n\\n<section class=\"up-dark\">\\n  <div class=\"up-dark-inner\">\\n    <div class=\"up-label up-label-light\"><span>03 / What changes</span></div>\\n    <h2>What changes with <em>Upsolve Golden Questions</em></h2>\\n    <div class=\"up-compare\">\\n      <div class=\"up-compare-box\"><div class=\"up-mono up-compare-k\">Without Upsolve Golden Questions</div><p>A vague question gets a plausible answer, and nobody can tell a verified number from a guess.</p></div>\\n      <div class=\"up-compare-box on\"><div class=\"up-mono up-compare-k\">With Upsolve Golden Questions</div><p>Verified questions guide the agent, and each answer carries a confidence score that can stop weak answers reaching users.</p></div>\\n    </div>\\n  </div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>04 / What you get</span></div>\\n  <h2>Everything that ships with Golden Questions</h2>\\n  <div class=\"up-grid4\"><div class=\"up-card up-get\"><span class=\"up-tag up-tag-blue\">REPOSITORY</span><h3>Golden question repository</h3><p>A growing library of questions your agent should answer consistently correctly.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-purple\">TESTS</span><h3>Test cases for your agent</h3><p>Check the agent still gets your golden questions right after every change.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-neutral\">CONFIDENCE</span><h3>Confidence score</h3><p>Based on matching golden questions, whether the fetched schemas and columns fit the question, and whether a good chart was produced.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-neutral\">FILTER</span><h3>Answer filtering</h3><p>All answers go through by default. Sensitive teams can set a high threshold so users only see high-quality results.</p></div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>05 / Where it fits</span></div>\\n  <h2>One layer of a closed learning loop</h2>\\n  <p class=\"up-sub\">Upsolve builds the whole stack for data agents that stay accurate in production. Every conversation feeds the next improvement.</p>\\n  <div class=\"up-loop\"><div class=\"up-loop-cell up-c-blue\"><div class=\"up-mono up-loop-num\">01</div><div class=\"up-loop-name\">Ontology</div><div class=\"up-loop-desc\">Your data described clearly. Permissions enforced deterministically, not delegated to the agent.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-purple\"><div class=\"up-mono up-loop-num\">02</div><div class=\"up-loop-name\">Agent harness</div><div class=\"up-loop-desc\">Snappy, reliable, accurate. Learns from real interactions and updates its skills and memory.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-orange\"><div class=\"up-mono up-loop-num\">03</div><div class=\"up-loop-name\">Distribution</div><div class=\"up-loop-desc\">Your product, your Slack channels, Claude. Go where your users already are.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-red on\"><div class=\"up-mono up-loop-num\">04</div><div class=\"up-loop-name\">Improvement loop</div><div class=\"up-loop-desc\">Live evals on real usage find the gaps, then you harden the context to close them.</div><div class=up-loop-here>This feature</div></div><div class=\"up-loop-back up-mono\" aria-hidden=\"true\">&#8617; Improvement loop feeds back into the ontology</div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>06 / The Complete Agent Stack</span></div>\\n  <h2>One of fourteen features in The Complete Agent Stack</h2>\\n  <div class=\"up-series\"><a class=\"up-series-item\" href=\"__SITE__/features/data-models\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 01 &middot; Ontology</span><span class=\"up-series-name\">Data Models</span></a><a class=\"up-series-item\" href=\"__SITE__/features/row-level-security\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 02 &middot; Ontology</span><span class=\"up-series-name\">Row-Level Security</span></a><a class=\"up-series-item\" href=\"__SITE__/features/mcp-connections\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 03 &middot; Agent harness</span><span class=\"up-series-name\">MCP Connections</span></a><a class=\"up-series-item\" href=\"__SITE__/features/harness-2\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 04 &middot; Agent harness</span><span class=\"up-series-name\">Harness 2.0</span></a><a class=\"up-series-item\" href=\"__SITE__/features/bi-canvases\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 05 &middot; Distribution</span><span class=\"up-series-name\">BI Canvases</span></a><a class=\"up-series-item\" href=\"__SITE__/features/observability\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 06 &middot; Improvement loop</span><span class=\"up-series-name\">Observability</span></a><a class=\"up-series-item\" href=\"__SITE__/features/data-plane\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 07 &middot; Ontology</span><span class=\"up-series-name\">Data Plane</span></a><a class=\"up-series-item\" href=\"__SITE__/features/mcp-for-claude\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 08 &middot; Distribution</span><span class=\"up-series-name\">MCP for Claude</span></a><a class=\"up-series-item\" href=\"__SITE__/features/demo-projects\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 09 &middot; Distribution</span><span class=\"up-series-name\">Demo Projects</span></a><a class=\"up-series-item current\" href=\"__SITE__/features/golden-questions\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 10 &middot; Improvement loop</span><span class=\"up-series-name\">Golden Questions</span></a><a class=\"up-series-item\" href=\"__SITE__/features/workspaces\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 11 &middot; Ontology</span><span class=\"up-series-name\">Workspaces</span></a><a class=\"up-series-item\" href=\"__SITE__/features/html-apps\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 12 &middot; Distribution</span><span class=\"up-series-name\">Branded HTML Apps</span></a><a class=\"up-series-item\" href=\"__SITE__/features/builder-agent\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 13 &middot; Improvement loop</span><span class=\"up-series-name\">Builder Agent</span></a><a class=\"up-series-item\" href=\"__SITE__/features/self-serve-onboarding\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 14 &middot; Ontology</span><span class=\"up-series-name\">Self-Serve Onboarding</span></a></div>\\n  <a class=\"up-link up-mono\" href=\"__SITE__/launch-month\" target=\"_top\">See all fourteen features &rarr;</a>\\n</section>\\n\\n<section class=\"up-section up-faq\">\\n  <div class=\"up-label up-label-blue\"><span>07 / FAQ</span></div>\\n  <h2>Common questions</h2>\\n  <div class=\"up-faq-list\"><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">01</span><span class=\"up-faq-t\">Where do golden questions come from?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>From real conversations. Open a chat in observability, review the SQL and save it, editing it first if needed.</p></div></div><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">02</span><span class=\"up-faq-t\">What goes into the confidence score?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>Whether the answer matched golden questions and how correct they were, whether the schemas and columns fetched fit the question, and whether a good chart was produced.</p></div></div><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">03</span><span class=\"up-faq-t\">Are low-confidence answers blocked by default?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>No. All answers go through by default. You choose a threshold if you want to filter weak answers out.</p></div></div></div>\\n  <p class=\"up-faq-more\">Can\\'t find your answer? <a href=\"__DEMO__\" target=\"_blank\" rel=\"noopener\">Get in touch.</a></p>\\n</section>\\n<script type=\"application/ld+json\">{\"@context\": \"https://schema.org\", \"@type\": \"FAQPage\", \"mainEntity\": [{\"@type\": \"Question\", \"name\": \"Where do golden questions come from?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"From real conversations. Open a chat in observability, review the SQL and save it, editing it first if needed.\"}}, {\"@type\": \"Question\", \"name\": \"What goes into the confidence score?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Whether the answer matched golden questions and how correct they were, whether the schemas and columns fetched fit the question, and whether a good chart was produced.\"}}, {\"@type\": \"Question\", \"name\": \"Are low-confidence answers blocked by default?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"No. All answers go through by default. You choose a threshold if you want to filter weak answers out.\"}}]}</script>',workspaces:'<section class=\"up-hero\">\\n  <div class=\"up-hero-copy\">\\n    <div class=\"up-eyebrow\"><span>Feature &middot; Upsolve Workspaces</span></div>\\n    <h1>Your whole agent, <em>in one versioned workspace.</em></h1>\\n    <p class=\"up-lede\">Data model, knowledge base, skills, golden questions, prompts, memory, chat history, playground and deploy, all under one pane of glass. Version them together and ship one release to your product.</p>\\n    <div class=\"up-tags\"><span class=\"up-tag up-tag-neutral\">Single pane of glass</span><span class=\"up-tag up-tag-blue\">Versioned as one</span><span class=\"up-tag up-tag-purple\">Live traces</span></div>\\n    <div class=\"up-ctas\">\\n      <a class=\"up-btn up-btn-dark\" href=\"__START__\" target=\"_blank\" rel=\"noopener\">Start free in Upsolve</a>\\n      <a class=\"up-btn up-btn-ghost\" href=\"__DEMO__\" target=\"_blank\" rel=\"noopener\">Book a demo</a>\\n    </div>\\n    <a class=\"up-launch-note up-mono\" href=\"__SITE__/launch-month\" target=\"_top\"><span class=\"up-dot\"></span>Feature 11 of 14 &middot; The Complete Agent Stack &rarr;</a>\\n  </div>\\n  <div class=\"up-hero-visual\">\\n    <div class=\"up-window\">\\n      <div class=\"up-window-bar\"><span class=\"up-mono\">WORKSPACE \\xb7 PROCUREMENT DATA</span><span class=\"up-chip up-mono\"><span class=\"up-dot\"></span>V16 PRODUCTION</span></div>\\n      <!-- TODO: replace with the Framer-hosted gallery image, or a YouTube embed of the feature video -->\\n      <img src=\"__IMG_workspaces__\" alt=\"Upsolve workspace playground answering a monthly PO spend question, with a live trace of each agent step\" loading=\"eager\">\\n    </div>\\n  </div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>01 / The problem</span></div>\\n  <h2>Agent context is scattered, so nobody can see it or ship it as one thing.</h2>\\n  <div class=\"up-grid3\"><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">01</div><p>The data model, prompts, skills and examples live in different places and drift apart.</p></div><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">02</div><p>Changing one piece means guessing how it affects the rest of the agent.</p></div><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">03</div><p>Debugging means jumping between chat logs, traces and config to piece together what happened.</p></div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>02 / How it works</span></div>\\n  <h2>From setup to production in three steps</h2>\\n  <div class=\"up-steps\"><div class=\"up-step\"><div class=\"up-mono up-step-num\">01</div><h3>Build your context</h3><p>Data model, knowledge base, skills, assets like golden questions and charts, system prompts and per-user memory, each in its own section of the workspace.</p></div><div class=\"up-step\"><div class=\"up-mono up-step-num\">02</div><h3>Test in the playground</h3><p>Chat as yourself or as any user in your organisation, with a live trace of every step: golden examples, schema retrieval and chart validation.</p></div><div class=\"up-step\"><div class=\"up-mono up-step-num\">03</div><h3>Version and deploy</h3><p>The whole workspace is versioned as one release, with production and draft versions. Pick a version and deploy it into your product as an iframe.</p></div></div>\\n</section>\\n\\n<section class=\"up-dark\">\\n  <div class=\"up-dark-inner\">\\n    <div class=\"up-label up-label-light\"><span>03 / What changes</span></div>\\n    <h2>What changes with <em>Upsolve Workspaces</em></h2>\\n    <div class=\"up-compare\">\\n      <div class=\"up-compare-box\"><div class=\"up-mono up-compare-k\">Without Upsolve Workspaces</div><p>Context lives in a dozen places, and a change to one piece can quietly break another.</p></div>\\n      <div class=\"up-compare-box on\"><div class=\"up-mono up-compare-k\">With Upsolve Workspaces</div><p>Every piece of the agent sits in one workspace, is tested in one playground and ships as one version.</p></div>\\n    </div>\\n  </div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>04 / What you get</span></div>\\n  <h2>Everything that ships with Workspaces</h2>\\n  <div class=\"up-grid4\"><div class=\"up-card up-get\"><span class=\"up-tag up-tag-blue\">CONTEXT</span><h3>One pane of glass</h3><p>Context, monitoring, testing and deployment, all in one sidebar.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-purple\">VERSIONS</span><h3>Versioned as one</h3><p>The data model, knowledge base, skills and assets ship together as a single version.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-neutral\">HISTORY</span><h3>Chat history in context</h3><p>See who asked what, from which surface and at what cost, then open any session.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-neutral\">PLAYGROUND</span><h3>Playground with live traces</h3><p>Test as any user and watch each step of the answer as it happens.</p></div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>05 / Where it fits</span></div>\\n  <h2>One layer of a closed learning loop</h2>\\n  <p class=\"up-sub\">Upsolve builds the whole stack for data agents that stay accurate in production. Every conversation feeds the next improvement.</p>\\n  <div class=\"up-loop\"><div class=\"up-loop-cell up-c-blue on\"><div class=\"up-mono up-loop-num\">01</div><div class=\"up-loop-name\">Ontology</div><div class=\"up-loop-desc\">Your data described clearly. Permissions enforced deterministically, not delegated to the agent.</div><div class=up-loop-here>This feature</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-purple\"><div class=\"up-mono up-loop-num\">02</div><div class=\"up-loop-name\">Agent harness</div><div class=\"up-loop-desc\">Snappy, reliable, accurate. Learns from real interactions and updates its skills and memory.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-orange\"><div class=\"up-mono up-loop-num\">03</div><div class=\"up-loop-name\">Distribution</div><div class=\"up-loop-desc\">Your product, your Slack channels, Claude. Go where your users already are.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-red\"><div class=\"up-mono up-loop-num\">04</div><div class=\"up-loop-name\">Improvement loop</div><div class=\"up-loop-desc\">Live evals on real usage find the gaps, then you harden the context to close them.</div></div><div class=\"up-loop-back up-mono\" aria-hidden=\"true\">&#8617; Improvement loop feeds back into the ontology</div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>06 / The Complete Agent Stack</span></div>\\n  <h2>One of fourteen features in The Complete Agent Stack</h2>\\n  <div class=\"up-series\"><a class=\"up-series-item\" href=\"__SITE__/features/data-models\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 01 &middot; Ontology</span><span class=\"up-series-name\">Data Models</span></a><a class=\"up-series-item\" href=\"__SITE__/features/row-level-security\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 02 &middot; Ontology</span><span class=\"up-series-name\">Row-Level Security</span></a><a class=\"up-series-item\" href=\"__SITE__/features/mcp-connections\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 03 &middot; Agent harness</span><span class=\"up-series-name\">MCP Connections</span></a><a class=\"up-series-item\" href=\"__SITE__/features/harness-2\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 04 &middot; Agent harness</span><span class=\"up-series-name\">Harness 2.0</span></a><a class=\"up-series-item\" href=\"__SITE__/features/bi-canvases\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 05 &middot; Distribution</span><span class=\"up-series-name\">BI Canvases</span></a><a class=\"up-series-item\" href=\"__SITE__/features/observability\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 06 &middot; Improvement loop</span><span class=\"up-series-name\">Observability</span></a><a class=\"up-series-item\" href=\"__SITE__/features/data-plane\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 07 &middot; Ontology</span><span class=\"up-series-name\">Data Plane</span></a><a class=\"up-series-item\" href=\"__SITE__/features/mcp-for-claude\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 08 &middot; Distribution</span><span class=\"up-series-name\">MCP for Claude</span></a><a class=\"up-series-item\" href=\"__SITE__/features/demo-projects\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 09 &middot; Distribution</span><span class=\"up-series-name\">Demo Projects</span></a><a class=\"up-series-item\" href=\"__SITE__/features/golden-questions\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 10 &middot; Improvement loop</span><span class=\"up-series-name\">Golden Questions</span></a><a class=\"up-series-item current\" href=\"__SITE__/features/workspaces\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 11 &middot; Ontology</span><span class=\"up-series-name\">Workspaces</span></a><a class=\"up-series-item\" href=\"__SITE__/features/html-apps\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 12 &middot; Distribution</span><span class=\"up-series-name\">Branded HTML Apps</span></a><a class=\"up-series-item\" href=\"__SITE__/features/builder-agent\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 13 &middot; Improvement loop</span><span class=\"up-series-name\">Builder Agent</span></a><a class=\"up-series-item\" href=\"__SITE__/features/self-serve-onboarding\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 14 &middot; Ontology</span><span class=\"up-series-name\">Self-Serve Onboarding</span></a></div>\\n  <a class=\"up-link up-mono\" href=\"__SITE__/launch-month\" target=\"_top\">See all fourteen features &rarr;</a>\\n</section>\\n\\n<section class=\"up-section up-faq\">\\n  <div class=\"up-label up-label-blue\"><span>07 / FAQ</span></div>\\n  <h2>Common questions</h2>\\n  <div class=\"up-faq-list\"><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">01</span><span class=\"up-faq-t\">What\\'s inside a workspace?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>The data model, knowledge base, skills, assets such as golden questions and charts, system prompts, per-user memory, chat history, a playground and deployment.</p></div></div><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">02</span><span class=\"up-faq-t\">How does versioning work?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>The whole workspace is versioned as one. You keep production and draft versions and choose which one to deploy.</p></div></div><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">03</span><span class=\"up-faq-t\">Can I test as a specific user?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>Yes. In the playground you can chat as yourself or as any user in your organisation and see the live trace.</p></div></div></div>\\n  <p class=\"up-faq-more\">Can\\'t find your answer? <a href=\"__DEMO__\" target=\"_blank\" rel=\"noopener\">Get in touch.</a></p>\\n</section>\\n<script type=\"application/ld+json\">{\"@context\": \"https://schema.org\", \"@type\": \"FAQPage\", \"mainEntity\": [{\"@type\": \"Question\", \"name\": \"What\\'s inside a workspace?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"The data model, knowledge base, skills, assets such as golden questions and charts, system prompts, per-user memory, chat history, a playground and deployment.\"}}, {\"@type\": \"Question\", \"name\": \"How does versioning work?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"The whole workspace is versioned as one. You keep production and draft versions and choose which one to deploy.\"}}, {\"@type\": \"Question\", \"name\": \"Can I test as a specific user?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Yes. In the playground you can chat as yourself or as any user in your organisation and see the live trace.\"}}]}</script>',\"html-apps\":'<section class=\"up-hero\">\\n  <div class=\"up-hero-copy\">\\n    <div class=\"up-eyebrow\"><span>Feature &middot; Upsolve Branded HTML Apps</span></div>\\n    <h1>Turn any canvas into <em>a branded app in seconds.</em></h1>\\n    <p class=\"up-lede\">Click Make it an app, upload your logo and describe the look. An agent rebuilds your canvas as a polished HTML app you can share, embed or send as a public snapshot.</p>\\n    <div class=\"up-tags\"><span class=\"up-tag up-tag-neutral\">Your logo and style</span><span class=\"up-tag up-tag-blue\">Public or private</span><span class=\"up-tag up-tag-purple\">Snapshot or live</span></div>\\n    <div class=\"up-ctas\">\\n      <a class=\"up-btn up-btn-dark\" href=\"__START__\" target=\"_blank\" rel=\"noopener\">Start free in Upsolve</a>\\n      <a class=\"up-btn up-btn-ghost\" href=\"__DEMO__\" target=\"_blank\" rel=\"noopener\">Book a demo</a>\\n    </div>\\n    <a class=\"up-launch-note up-mono\" href=\"__SITE__/launch-month\" target=\"_top\"><span class=\"up-dot\"></span>Feature 12 of 14 &middot; The Complete Agent Stack &rarr;</a>\\n  </div>\\n  <div class=\"up-hero-visual\">\\n    <div class=\"up-window\">\\n      <div class=\"up-window-bar\"><span class=\"up-mono\">CANVAS \\xb7 MAKE IT AN APP</span><span class=\"up-chip up-mono\"><span class=\"up-dot\"></span>BRANDED</span></div>\\n      <!-- TODO: replace with the Framer-hosted gallery image, or a YouTube embed of the feature video -->\\n      <img src=\"__IMG_html-apps__\" alt=\"Branded HTML app generated from an Upsolve canvas, titled Global Spend Intelligence, with stat cards and charts\" loading=\"eager\">\\n    </div>\\n  </div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>01 / The problem</span></div>\\n  <h2>Dashboards look like the tool that made them, not like your company.</h2>\\n  <div class=\"up-grid3\"><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">01</div><p>Default charts on a canvas don\\'t match your product or your brand.</p></div><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">02</div><p>Turning an analysis into a polished report means a designer, a developer or a slide deck.</p></div><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">03</div><p>Sharing outside the team risks handing people live access to the underlying data.</p></div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>02 / How it works</span></div>\\n  <h2>From setup to production in three steps</h2>\\n  <div class=\"up-steps\"><div class=\"up-step\"><div class=\"up-mono up-step-num\">01</div><h3>Make it an app</h3><p>Open a canvas and click Make it an app. Upload a logo and describe the colours, layout and design you want.</p></div><div class=\"up-step\"><div class=\"up-mono up-step-num\">02</div><h3>Review and iterate</h3><p>The agent adds a title, stat cards and restyled charts. Keep prompting to change or remove anything.</p></div><div class=\"up-step\"><div class=\"up-mono up-step-num\">03</div><h3>Share it</h3><p>Share with your organisation or specific people, or create a public link and QR code for a snapshot.</p></div></div>\\n</section>\\n\\n<section class=\"up-dark\">\\n  <div class=\"up-dark-inner\">\\n    <div class=\"up-label up-label-light\"><span>03 / What changes</span></div>\\n    <h2>What changes with <em>Upsolve Branded HTML Apps</em></h2>\\n    <div class=\"up-compare\">\\n      <div class=\"up-compare-box\"><div class=\"up-mono up-compare-k\">Without Upsolve Branded HTML Apps</div><p>An analysis lives on a plain canvas, and a polished version means rebuilding it in slides or code.</p></div>\\n      <div class=\"up-compare-box on\"><div class=\"up-mono up-compare-k\">With Upsolve Branded HTML Apps</div><p>One prompt turns the canvas into a branded HTML app, ready to share as a snapshot or embed.</p></div>\\n    </div>\\n  </div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>04 / What you get</span></div>\\n  <h2>Everything that ships with Branded HTML Apps</h2>\\n  <div class=\"up-grid4\"><div class=\"up-card up-get\"><span class=\"up-tag up-tag-blue\">DESIGN</span><h3>Branded design</h3><p>Your logo and design direction, applied to the title, stat cards and every chart.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-purple\">INTERACTIVE</span><h3>Interactive charts</h3><p>Viewers can hover over values in the finished app.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-neutral\">SHARING</span><h3>Safe public links</h3><p>Public links are snapshots. Live data needs a passkey, so nobody gets live access by accident.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-neutral\">REFRESH</span><h3>Always refreshable</h3><p>Update the canvas, drill into any chart\\'s conversation, then regenerate the app with the latest numbers.</p></div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>05 / Where it fits</span></div>\\n  <h2>One layer of a closed learning loop</h2>\\n  <p class=\"up-sub\">Upsolve builds the whole stack for data agents that stay accurate in production. Every conversation feeds the next improvement.</p>\\n  <div class=\"up-loop\"><div class=\"up-loop-cell up-c-blue\"><div class=\"up-mono up-loop-num\">01</div><div class=\"up-loop-name\">Ontology</div><div class=\"up-loop-desc\">Your data described clearly. Permissions enforced deterministically, not delegated to the agent.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-purple\"><div class=\"up-mono up-loop-num\">02</div><div class=\"up-loop-name\">Agent harness</div><div class=\"up-loop-desc\">Snappy, reliable, accurate. Learns from real interactions and updates its skills and memory.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-orange on\"><div class=\"up-mono up-loop-num\">03</div><div class=\"up-loop-name\">Distribution</div><div class=\"up-loop-desc\">Your product, your Slack channels, Claude. Go where your users already are.</div><div class=up-loop-here>This feature</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-red\"><div class=\"up-mono up-loop-num\">04</div><div class=\"up-loop-name\">Improvement loop</div><div class=\"up-loop-desc\">Live evals on real usage find the gaps, then you harden the context to close them.</div></div><div class=\"up-loop-back up-mono\" aria-hidden=\"true\">&#8617; Improvement loop feeds back into the ontology</div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>06 / The Complete Agent Stack</span></div>\\n  <h2>One of fourteen features in The Complete Agent Stack</h2>\\n  <div class=\"up-series\"><a class=\"up-series-item\" href=\"__SITE__/features/data-models\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 01 &middot; Ontology</span><span class=\"up-series-name\">Data Models</span></a><a class=\"up-series-item\" href=\"__SITE__/features/row-level-security\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 02 &middot; Ontology</span><span class=\"up-series-name\">Row-Level Security</span></a><a class=\"up-series-item\" href=\"__SITE__/features/mcp-connections\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 03 &middot; Agent harness</span><span class=\"up-series-name\">MCP Connections</span></a><a class=\"up-series-item\" href=\"__SITE__/features/harness-2\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 04 &middot; Agent harness</span><span class=\"up-series-name\">Harness 2.0</span></a><a class=\"up-series-item\" href=\"__SITE__/features/bi-canvases\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 05 &middot; Distribution</span><span class=\"up-series-name\">BI Canvases</span></a><a class=\"up-series-item\" href=\"__SITE__/features/observability\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 06 &middot; Improvement loop</span><span class=\"up-series-name\">Observability</span></a><a class=\"up-series-item\" href=\"__SITE__/features/data-plane\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 07 &middot; Ontology</span><span class=\"up-series-name\">Data Plane</span></a><a class=\"up-series-item\" href=\"__SITE__/features/mcp-for-claude\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 08 &middot; Distribution</span><span class=\"up-series-name\">MCP for Claude</span></a><a class=\"up-series-item\" href=\"__SITE__/features/demo-projects\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 09 &middot; Distribution</span><span class=\"up-series-name\">Demo Projects</span></a><a class=\"up-series-item\" href=\"__SITE__/features/golden-questions\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 10 &middot; Improvement loop</span><span class=\"up-series-name\">Golden Questions</span></a><a class=\"up-series-item\" href=\"__SITE__/features/workspaces\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 11 &middot; Ontology</span><span class=\"up-series-name\">Workspaces</span></a><a class=\"up-series-item current\" href=\"__SITE__/features/html-apps\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 12 &middot; Distribution</span><span class=\"up-series-name\">Branded HTML Apps</span></a><a class=\"up-series-item\" href=\"__SITE__/features/builder-agent\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 13 &middot; Improvement loop</span><span class=\"up-series-name\">Builder Agent</span></a><a class=\"up-series-item\" href=\"__SITE__/features/self-serve-onboarding\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 14 &middot; Ontology</span><span class=\"up-series-name\">Self-Serve Onboarding</span></a></div>\\n  <a class=\"up-link up-mono\" href=\"__SITE__/launch-month\" target=\"_top\">See all fourteen features &rarr;</a>\\n</section>\\n\\n<section class=\"up-section up-faq\">\\n  <div class=\"up-label up-label-blue\"><span>07 / FAQ</span></div>\\n  <h2>Common questions</h2>\\n  <div class=\"up-faq-list\"><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">01</span><span class=\"up-faq-t\">Can I share an app publicly?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>Yes. Create a public link or QR code. Public links show a snapshot, and live links need a passkey.</p></div></div><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">02</span><span class=\"up-faq-t\">Can I change the design after it\\'s generated?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>Yes. Your original prompt stays in the side panel, so you can keep iterating on colours, layout and content.</p></div></div><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">03</span><span class=\"up-faq-t\">How do I update the numbers?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>Work on the canvas as usual, then regenerate the app to refresh it with the latest data.</p></div></div></div>\\n  <p class=\"up-faq-more\">Can\\'t find your answer? <a href=\"__DEMO__\" target=\"_blank\" rel=\"noopener\">Get in touch.</a></p>\\n</section>\\n<script type=\"application/ld+json\">{\"@context\": \"https://schema.org\", \"@type\": \"FAQPage\", \"mainEntity\": [{\"@type\": \"Question\", \"name\": \"Can I share an app publicly?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Yes. Create a public link or QR code. Public links show a snapshot, and live links need a passkey.\"}}, {\"@type\": \"Question\", \"name\": \"Can I change the design after it\\'s generated?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Yes. Your original prompt stays in the side panel, so you can keep iterating on colours, layout and content.\"}}, {\"@type\": \"Question\", \"name\": \"How do I update the numbers?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Work on the canvas as usual, then regenerate the app to refresh it with the latest data.\"}}]}</script>',\"builder-agent\":'<section class=\"up-hero\">\\n  <div class=\"up-hero-copy\">\\n    <div class=\"up-eyebrow\"><span>Feature &middot; Upsolve Builder Agent</span></div>\\n    <h1>An agent that improves <em>your data agent.</em></h1>\\n    <p class=\"up-lede\">The Builder Agent reads your workspace and your users\\' chat history, then proposes fixes to your data model, prompts and skills. Every change lands in a draft, so production stays untouched until you promote it.</p>\\n    <div class=\"up-tags\"><span class=\"up-tag up-tag-neutral\">Reads real usage</span><span class=\"up-tag up-tag-blue\">Finds data drift</span><span class=\"up-tag up-tag-purple\">Draft-first changes</span></div>\\n    <div class=\"up-ctas\">\\n      <a class=\"up-btn up-btn-dark\" href=\"__START__\" target=\"_blank\" rel=\"noopener\">Start free in Upsolve</a>\\n      <a class=\"up-btn up-btn-ghost\" href=\"__DEMO__\" target=\"_blank\" rel=\"noopener\">Book a demo</a>\\n    </div>\\n    <a class=\"up-launch-note up-mono\" href=\"__SITE__/launch-month\" target=\"_top\"><span class=\"up-dot\"></span>Feature 13 of 14 &middot; The Complete Agent Stack &rarr;</a>\\n  </div>\\n  <div class=\"up-hero-visual\">\\n    <div class=\"up-window\">\\n      <div class=\"up-window-bar\"><span class=\"up-mono\">BUILDER AGENT \\xb7 USAGE REVIEW</span><span class=\"up-chip up-mono\"><span class=\"up-dot\"></span>DRAFT</span></div>\\n      <!-- TODO: replace with the Framer-hosted gallery image, or a YouTube embed of the feature video -->\\n      <img src=\"__IMG_builder-agent__\" alt=\"Upsolve Builder Agent reviewing a month of usage and reporting four data model tables that no longer exist in the database\" loading=\"eager\">\\n    </div>\\n  </div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>01 / The problem</span></div>\\n  <h2>Data agents decay quietly after launch.</h2>\\n  <div class=\"up-grid3\"><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">01</div><p>Tables change under the hood and nobody updates the data model. That\\'s data drift.</p></div><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">02</div><p>Most tables ship without descriptions, so the agent guesses what columns mean.</p></div><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">03</div><p>The signals to fix it sit in chat history that nobody has time to read.</p></div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>02 / How it works</span></div>\\n  <h2>From setup to production in three steps</h2>\\n  <div class=\"up-steps\"><div class=\"up-step\"><div class=\"up-mono up-step-num\">01</div><h3>Ask the Builder Agent</h3><p>Ask it to describe your tables, or to review the last month of usage and suggest improvements.</p></div><div class=\"up-step\"><div class=\"up-mono up-step-num\">02</div><h3>Review its proposals</h3><p>It scans the database and chat history, then proposes descriptions, prompt rules, knowledge base files and skills. Approve each one, or let it run in auto mode.</p></div><div class=\"up-step\"><div class=\"up-mono up-step-num\">03</div><h3>Test and promote</h3><p>Everything lands in a draft. Try it in the playground, then promote the draft to a new version for your users.</p></div></div>\\n</section>\\n\\n<section class=\"up-dark\">\\n  <div class=\"up-dark-inner\">\\n    <div class=\"up-label up-label-light\"><span>03 / What changes</span></div>\\n    <h2>What changes with <em>Upsolve Builder Agent</em></h2>\\n    <div class=\"up-compare\">\\n      <div class=\"up-compare-box\"><div class=\"up-mono up-compare-k\">Without Upsolve Builder Agent</div><p>Someone has to notice the agent getting worse, dig through chats and fix the context by hand.</p></div>\\n      <div class=\"up-compare-box on\"><div class=\"up-mono up-compare-k\">With Upsolve Builder Agent</div><p>The Builder Agent reads real usage, proposes the fixes and stages them in a draft for you to approve.</p></div>\\n    </div>\\n  </div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>04 / What you get</span></div>\\n  <h2>Everything that ships with Builder Agent</h2>\\n  <div class=\"up-grid4\"><div class=\"up-card up-get\"><span class=\"up-tag up-tag-blue\">DESCRIBE</span><h3>Automatic descriptions</h3><p>Scans every table that isn\\'t described and writes table and column descriptions.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-purple\">DIAGNOSE</span><h3>Usage-driven fixes</h3><p>Finds problems like data model tables that no longer exist in the database, stale views and chart date errors.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-neutral\">EXTEND</span><h3>Knowledge and skills</h3><p>Writes knowledge base files and generates skills from what it learns about your data.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-neutral\">DRAFTS</span><h3>Safe by default</h3><p>Changes go to a draft with a full history, never straight to production.</p></div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>05 / Where it fits</span></div>\\n  <h2>One layer of a closed learning loop</h2>\\n  <p class=\"up-sub\">Upsolve builds the whole stack for data agents that stay accurate in production. Every conversation feeds the next improvement.</p>\\n  <div class=\"up-loop\"><div class=\"up-loop-cell up-c-blue\"><div class=\"up-mono up-loop-num\">01</div><div class=\"up-loop-name\">Ontology</div><div class=\"up-loop-desc\">Your data described clearly. Permissions enforced deterministically, not delegated to the agent.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-purple\"><div class=\"up-mono up-loop-num\">02</div><div class=\"up-loop-name\">Agent harness</div><div class=\"up-loop-desc\">Snappy, reliable, accurate. Learns from real interactions and updates its skills and memory.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-orange\"><div class=\"up-mono up-loop-num\">03</div><div class=\"up-loop-name\">Distribution</div><div class=\"up-loop-desc\">Your product, your Slack channels, Claude. Go where your users already are.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-red on\"><div class=\"up-mono up-loop-num\">04</div><div class=\"up-loop-name\">Improvement loop</div><div class=\"up-loop-desc\">Live evals on real usage find the gaps, then you harden the context to close them.</div><div class=up-loop-here>This feature</div></div><div class=\"up-loop-back up-mono\" aria-hidden=\"true\">&#8617; Improvement loop feeds back into the ontology</div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>06 / The Complete Agent Stack</span></div>\\n  <h2>One of fourteen features in The Complete Agent Stack</h2>\\n  <div class=\"up-series\"><a class=\"up-series-item\" href=\"__SITE__/features/data-models\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 01 &middot; Ontology</span><span class=\"up-series-name\">Data Models</span></a><a class=\"up-series-item\" href=\"__SITE__/features/row-level-security\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 02 &middot; Ontology</span><span class=\"up-series-name\">Row-Level Security</span></a><a class=\"up-series-item\" href=\"__SITE__/features/mcp-connections\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 03 &middot; Agent harness</span><span class=\"up-series-name\">MCP Connections</span></a><a class=\"up-series-item\" href=\"__SITE__/features/harness-2\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 04 &middot; Agent harness</span><span class=\"up-series-name\">Harness 2.0</span></a><a class=\"up-series-item\" href=\"__SITE__/features/bi-canvases\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 05 &middot; Distribution</span><span class=\"up-series-name\">BI Canvases</span></a><a class=\"up-series-item\" href=\"__SITE__/features/observability\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 06 &middot; Improvement loop</span><span class=\"up-series-name\">Observability</span></a><a class=\"up-series-item\" href=\"__SITE__/features/data-plane\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 07 &middot; Ontology</span><span class=\"up-series-name\">Data Plane</span></a><a class=\"up-series-item\" href=\"__SITE__/features/mcp-for-claude\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 08 &middot; Distribution</span><span class=\"up-series-name\">MCP for Claude</span></a><a class=\"up-series-item\" href=\"__SITE__/features/demo-projects\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 09 &middot; Distribution</span><span class=\"up-series-name\">Demo Projects</span></a><a class=\"up-series-item\" href=\"__SITE__/features/golden-questions\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 10 &middot; Improvement loop</span><span class=\"up-series-name\">Golden Questions</span></a><a class=\"up-series-item\" href=\"__SITE__/features/workspaces\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 11 &middot; Ontology</span><span class=\"up-series-name\">Workspaces</span></a><a class=\"up-series-item\" href=\"__SITE__/features/html-apps\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 12 &middot; Distribution</span><span class=\"up-series-name\">Branded HTML Apps</span></a><a class=\"up-series-item current\" href=\"__SITE__/features/builder-agent\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 13 &middot; Improvement loop</span><span class=\"up-series-name\">Builder Agent</span></a><a class=\"up-series-item\" href=\"__SITE__/features/self-serve-onboarding\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 14 &middot; Ontology</span><span class=\"up-series-name\">Self-Serve Onboarding</span></a></div>\\n  <a class=\"up-link up-mono\" href=\"__SITE__/launch-month\" target=\"_top\">See all fourteen features &rarr;</a>\\n</section>\\n\\n<section class=\"up-section up-faq\">\\n  <div class=\"up-label up-label-blue\"><span>07 / FAQ</span></div>\\n  <h2>Common questions</h2>\\n  <div class=\"up-faq-list\"><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">01</span><span class=\"up-faq-t\">Does the Builder Agent change production?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>No. Every change lands in a draft. You review it, test it in the playground and promote it when you\\'re happy.</p></div></div><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">02</span><span class=\"up-faq-t\">What can it change?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>Table and column descriptions, system and chart generation prompts, knowledge base files and skills.</p></div></div><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">03</span><span class=\"up-faq-t\">Can I give it business context?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>Yes. Upload files to the knowledge base so it works from your real business rules, not only from what it reads in the database.</p></div></div></div>\\n  <p class=\"up-faq-more\">Can\\'t find your answer? <a href=\"__DEMO__\" target=\"_blank\" rel=\"noopener\">Get in touch.</a></p>\\n</section>\\n<script type=\"application/ld+json\">{\"@context\": \"https://schema.org\", \"@type\": \"FAQPage\", \"mainEntity\": [{\"@type\": \"Question\", \"name\": \"Does the Builder Agent change production?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"No. Every change lands in a draft. You review it, test it in the playground and promote it when you\\'re happy.\"}}, {\"@type\": \"Question\", \"name\": \"What can it change?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Table and column descriptions, system and chart generation prompts, knowledge base files and skills.\"}}, {\"@type\": \"Question\", \"name\": \"Can I give it business context?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Yes. Upload files to the knowledge base so it works from your real business rules, not only from what it reads in the database.\"}}]}</script>',\"self-serve-onboarding\":'<section class=\"up-hero\">\\n  <div class=\"up-hero-copy\">\\n    <div class=\"up-eyebrow\"><span>Feature &middot; Upsolve Self-Serve Onboarding</span></div>\\n    <h1>Sign up free. <em>Get a working workspace in minutes.</em></h1>\\n    <p class=\"up-lede\">Start at upsolve.ai with 2,000 free AI credits and every pro feature. Dash, our setup agent, reads your data, MCPs and files and builds your first workspace for you.</p>\\n    <div class=\"up-tags\"><span class=\"up-tag up-tag-neutral\">2,000 free credits</span><span class=\"up-tag up-tag-blue\">All pro features</span><span class=\"up-tag up-tag-purple\">Setup in minutes</span></div>\\n    <div class=\"up-ctas\">\\n      <a class=\"up-btn up-btn-dark\" href=\"__START__\" target=\"_blank\" rel=\"noopener\">Start free in Upsolve</a>\\n      <a class=\"up-btn up-btn-ghost\" href=\"__DEMO__\" target=\"_blank\" rel=\"noopener\">Book a demo</a>\\n    </div>\\n    <a class=\"up-launch-note up-mono\" href=\"__SITE__/launch-month\" target=\"_top\"><span class=\"up-dot\"></span>Feature 14 of 14 &middot; The Complete Agent Stack &rarr;</a>\\n  </div>\\n  <div class=\"up-hero-visual\">\\n    <div class=\"up-window\">\\n      <div class=\"up-window-bar\"><span class=\"up-mono\">WORKSPACE PREPARATION \\xb7 DASH</span><span class=\"up-chip up-mono\"><span class=\"up-dot\"></span>READY TO REVIEW</span></div>\\n      <!-- TODO: replace with the Framer-hosted gallery image, or a YouTube embed of the feature video -->\\n      <img src=\"__IMG_self-serve-onboarding__\" alt=\"Upsolve workspace preparation screen where Dash, the setup agent, reports the workspace is ready to review\" loading=\"eager\">\\n    </div>\\n  </div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>01 / The problem</span></div>\\n  <h2>Most data agent tools make you talk to sales before you can try them.</h2>\\n  <div class=\"up-grid3\"><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">01</div><p>Trying the product means booking a demo and waiting for an account.</p></div><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">02</div><p>A new workspace starts empty, so the first day goes on boilerplate setup.</p></div><div class=\"up-card up-prob\"><div class=\"up-mono up-big-num\">03</div><p>Descriptions, prompts and skills take weeks to write before the agent is any good.</p></div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>02 / How it works</span></div>\\n  <h2>From setup to production in three steps</h2>\\n  <div class=\"up-steps\"><div class=\"up-step\"><div class=\"up-mono up-step-num\">01</div><h3>Sign up and create a project</h3><p>Click Get started on the free tier and create an account. Connect any of 300 sources, a database, a CSV or the sample data.</p></div><div class=\"up-step\"><div class=\"up-mono up-step-num\">02</div><h3>Let Dash set up your workspace</h3><p>Optionally connect MCP servers like Notion or HubSpot and upload files with your business rules. Dash scans every table, column, MCP and file, which takes from one to 30 minutes.</p></div><div class=\"up-step\"><div class=\"up-mono up-step-num\">03</div><h3>Review, publish and ask</h3><p>Dash writes table and column definitions, context files, skills and agent instructions into a draft. Review it, publish it, then start asking questions in the playground.</p></div></div>\\n</section>\\n\\n<section class=\"up-dark\">\\n  <div class=\"up-dark-inner\">\\n    <div class=\"up-label up-label-light\"><span>03 / What changes</span></div>\\n    <h2>What changes with <em>Upsolve Self-Serve Onboarding</em></h2>\\n    <div class=\"up-compare\">\\n      <div class=\"up-compare-box\"><div class=\"up-mono up-compare-k\">Without Upsolve Self-Serve Onboarding</div><p>You book a demo, wait for access, then spend days on setup before the agent answers well.</p></div>\\n      <div class=\"up-compare-box on\"><div class=\"up-mono up-compare-k\">With Upsolve Self-Serve Onboarding</div><p>You sign up yourself, and Dash builds a documented workspace with skills and instructions while you wait.</p></div>\\n    </div>\\n  </div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>04 / What you get</span></div>\\n  <h2>Everything that ships with Self-Serve Onboarding</h2>\\n  <div class=\"up-grid4\"><div class=\"up-card up-get\"><span class=\"up-tag up-tag-blue\">FREE</span><h3>Generous free tier</h3><p>2,000 one-time AI credits and all pro features, limited only by credits.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-purple\">SETUP</span><h3>Dash, the setup agent</h3><p>The same logic as the Builder Agent, used to build your first workspace from zero.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-neutral\">CONNECT</span><h3>Connect anything</h3><p>300 source systems and APIs through the Data Plane, direct database connections, CSV upload or sample data.</p></div><div class=\"up-card up-get\"><span class=\"up-tag up-tag-neutral\">SHARE</span><h3>Ready to share</h3><p>Favourite charts, build canvases, embed in your product or invite your team to collaborate.</p></div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>05 / Where it fits</span></div>\\n  <h2>One layer of a closed learning loop</h2>\\n  <p class=\"up-sub\">Upsolve builds the whole stack for data agents that stay accurate in production. Every conversation feeds the next improvement.</p>\\n  <div class=\"up-loop\"><div class=\"up-loop-cell up-c-blue on\"><div class=\"up-mono up-loop-num\">01</div><div class=\"up-loop-name\">Ontology</div><div class=\"up-loop-desc\">Your data described clearly. Permissions enforced deterministically, not delegated to the agent.</div><div class=up-loop-here>This feature</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-purple\"><div class=\"up-mono up-loop-num\">02</div><div class=\"up-loop-name\">Agent harness</div><div class=\"up-loop-desc\">Snappy, reliable, accurate. Learns from real interactions and updates its skills and memory.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-orange\"><div class=\"up-mono up-loop-num\">03</div><div class=\"up-loop-name\">Distribution</div><div class=\"up-loop-desc\">Your product, your Slack channels, Claude. Go where your users already are.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-red\"><div class=\"up-mono up-loop-num\">04</div><div class=\"up-loop-name\">Improvement loop</div><div class=\"up-loop-desc\">Live evals on real usage find the gaps, then you harden the context to close them.</div></div><div class=\"up-loop-back up-mono\" aria-hidden=\"true\">&#8617; Improvement loop feeds back into the ontology</div></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>06 / The Complete Agent Stack</span></div>\\n  <h2>One of fourteen features in The Complete Agent Stack</h2>\\n  <div class=\"up-series\"><a class=\"up-series-item\" href=\"__SITE__/features/data-models\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 01 &middot; Ontology</span><span class=\"up-series-name\">Data Models</span></a><a class=\"up-series-item\" href=\"__SITE__/features/row-level-security\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 02 &middot; Ontology</span><span class=\"up-series-name\">Row-Level Security</span></a><a class=\"up-series-item\" href=\"__SITE__/features/mcp-connections\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 03 &middot; Agent harness</span><span class=\"up-series-name\">MCP Connections</span></a><a class=\"up-series-item\" href=\"__SITE__/features/harness-2\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 04 &middot; Agent harness</span><span class=\"up-series-name\">Harness 2.0</span></a><a class=\"up-series-item\" href=\"__SITE__/features/bi-canvases\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 05 &middot; Distribution</span><span class=\"up-series-name\">BI Canvases</span></a><a class=\"up-series-item\" href=\"__SITE__/features/observability\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 06 &middot; Improvement loop</span><span class=\"up-series-name\">Observability</span></a><a class=\"up-series-item\" href=\"__SITE__/features/data-plane\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 07 &middot; Ontology</span><span class=\"up-series-name\">Data Plane</span></a><a class=\"up-series-item\" href=\"__SITE__/features/mcp-for-claude\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 08 &middot; Distribution</span><span class=\"up-series-name\">MCP for Claude</span></a><a class=\"up-series-item\" href=\"__SITE__/features/demo-projects\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 09 &middot; Distribution</span><span class=\"up-series-name\">Demo Projects</span></a><a class=\"up-series-item\" href=\"__SITE__/features/golden-questions\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 10 &middot; Improvement loop</span><span class=\"up-series-name\">Golden Questions</span></a><a class=\"up-series-item\" href=\"__SITE__/features/workspaces\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 11 &middot; Ontology</span><span class=\"up-series-name\">Workspaces</span></a><a class=\"up-series-item\" href=\"__SITE__/features/html-apps\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 12 &middot; Distribution</span><span class=\"up-series-name\">Branded HTML Apps</span></a><a class=\"up-series-item\" href=\"__SITE__/features/builder-agent\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 13 &middot; Improvement loop</span><span class=\"up-series-name\">Builder Agent</span></a><a class=\"up-series-item current\" href=\"__SITE__/features/self-serve-onboarding\" target=\"_top\"><span class=\"up-mono up-series-day\">Feature 14 &middot; Ontology</span><span class=\"up-series-name\">Self-Serve Onboarding</span></a></div>\\n  <a class=\"up-link up-mono\" href=\"__SITE__/launch-month\" target=\"_top\">See all fourteen features &rarr;</a>\\n</section>\\n\\n<section class=\"up-section up-faq\">\\n  <div class=\"up-label up-label-blue\"><span>07 / FAQ</span></div>\\n  <h2>Common questions</h2>\\n  <div class=\"up-faq-list\"><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">01</span><span class=\"up-faq-t\">What\\'s included in the free tier?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>All 14 features of The Complete Agent Stack and every pro feature, with 2,000 one-time AI credits.</p></div></div><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">02</span><span class=\"up-faq-t\">How long does setup take?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>Anywhere from one to 30 minutes, depending on how much data, MCPs and files Dash has to read. In the demo it took about three and a half minutes.</p></div></div><div class=\"up-faq-item\"><button class=\"up-faq-q\" aria-expanded=\"false\"><span class=\"up-mono up-faq-n\">03</span><span class=\"up-faq-t\">Do I need my own data to start?</span><span class=\"up-faq-plus\" aria-hidden=\"true\">+</span></button><div class=\"up-faq-a\"><p>No. You can start with the sample data, then connect your own sources whenever you\\'re ready.</p></div></div></div>\\n  <p class=\"up-faq-more\">Can\\'t find your answer? <a href=\"__DEMO__\" target=\"_blank\" rel=\"noopener\">Get in touch.</a></p>\\n</section>\\n<script type=\"application/ld+json\">{\"@context\": \"https://schema.org\", \"@type\": \"FAQPage\", \"mainEntity\": [{\"@type\": \"Question\", \"name\": \"What\\'s included in the free tier?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"All 14 features of The Complete Agent Stack and every pro feature, with 2,000 one-time AI credits.\"}}, {\"@type\": \"Question\", \"name\": \"How long does setup take?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Anywhere from one to 30 minutes, depending on how much data, MCPs and files Dash has to read. In the demo it took about three and a half minutes.\"}}, {\"@type\": \"Question\", \"name\": \"Do I need my own data to start?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"No. You can start with the sample data, then connect your own sources whenever you\\'re ready.\"}}]}</script>',\"launch-month\":'<section class=\"up-hub-intro\">\\n  <div class=\"up-hub-top\">\\n    <div class=\"up-hub-head\">\\n      <div class=\"up-eyebrow\"><span>The Complete Agent Stack &middot; 14 features</span></div>\\n      <h1 class=\"up-hub-title\">Fourteen features. <em>One agent stack that stays accurate.</em></h1>\\n      <p class=\"up-hub-lede\">Everything a data agent needs before people can rely on its answers, across four layers: ontology, agent harness, distribution and the improvement loop.</p>\\n    </div>\\n    <div class=\"up-hub-ctas\">\\n      <a class=\"up-btn up-btn-ghost up-btn-sm\" href=\"__START__\" target=\"_blank\" rel=\"noopener\">Start free</a>\\n      <a class=\"up-btn up-btn-dark up-btn-sm\" href=\"__DEMO__\" target=\"_blank\" rel=\"noopener\">Book a demo</a>\\n    </div>\\n  </div>\\n  <!-- TODO: YouTube embed of \"The Complete Agent Stack: 45-Second Tour\" playlist -->\\n</section>\\n\\n<section class=\"up-section up-hub-launches\">\\n  <div class=\"up-hub-bar\"><span>01 / The features</span><span>14 features &middot; four layers</span></div>\\n  <div class=\"up-hub-grid\"><a class=\"up-hub-card\" href=\"__SITE__/features/data-models\" target=\"_top\">\\n      <div class=\"up-hub-img\"><img src=\"__IMG_data-models__\" alt=\"\" loading=\"lazy\"></div>\\n      <div class=\"up-hub-body\"><span class=\"up-mono up-series-day\">Feature 01 &middot; Ontology</span>\\n      <h3>Upsolve Data Models</h3><p>One definition of ARR. Every agent answer uses it.</p><span class=\"up-mono up-hub-go\">Read more &rarr;</span></div></a><a class=\"up-hub-card\" href=\"__SITE__/features/row-level-security\" target=\"_top\">\\n      <div class=\"up-hub-img\"><img src=\"__IMG_row-level-security__\" alt=\"\" loading=\"lazy\"></div>\\n      <div class=\"up-hub-body\"><span class=\"up-mono up-series-day\">Feature 02 &middot; Ontology</span>\\n      <h3>Upsolve Row-Level Security</h3><p>Data permissions your AI agent can\\'t talk its way past.</p><span class=\"up-mono up-hub-go\">Read more &rarr;</span></div></a><a class=\"up-hub-card\" href=\"__SITE__/features/mcp-connections\" target=\"_top\">\\n      <div class=\"up-hub-img\"><img src=\"__IMG_mcp-connections__\" alt=\"\" loading=\"lazy\"></div>\\n      <div class=\"up-hub-body\"><span class=\"up-mono up-series-day\">Feature 03 &middot; Agent harness</span>\\n      <h3>Upsolve MCP Connections</h3><p>Plug Notion, Linear and more into your data agent.</p><span class=\"up-mono up-hub-go\">Read more &rarr;</span></div></a><a class=\"up-hub-card\" href=\"__SITE__/features/harness-2\" target=\"_top\">\\n      <div class=\"up-hub-img\"><img src=\"__IMG_harness-2__\" alt=\"\" loading=\"lazy\"></div>\\n      <div class=\"up-hub-body\"><span class=\"up-mono up-series-day\">Feature 04 &middot; Agent harness</span>\\n      <h3>Upsolve Harness 2.0</h3><p>A data agent that\\'s 2x faster and learns every user.</p><span class=\"up-mono up-hub-go\">Read more &rarr;</span></div></a><a class=\"up-hub-card\" href=\"__SITE__/features/bi-canvases\" target=\"_top\">\\n      <div class=\"up-hub-img\"><img src=\"__IMG_bi-canvases__\" alt=\"\" loading=\"lazy\"></div>\\n      <div class=\"up-hub-body\"><span class=\"up-mono up-series-day\">Feature 05 &middot; Distribution</span>\\n      <h3>Upsolve BI Canvases</h3><p>Turn agent answers into dashboards your team shares.</p><span class=\"up-mono up-hub-go\">Read more &rarr;</span></div></a><a class=\"up-hub-card\" href=\"__SITE__/features/observability\" target=\"_top\">\\n      <div class=\"up-hub-img\"><img src=\"__IMG_observability__\" alt=\"\" loading=\"lazy\"></div>\\n      <div class=\"up-hub-body\"><span class=\"up-mono up-series-day\">Feature 06 &middot; Improvement loop</span>\\n      <h3>Upsolve Observability</h3><p>See every step your data agent took, and fix it.</p><span class=\"up-mono up-hub-go\">Read more &rarr;</span></div></a><a class=\"up-hub-card\" href=\"__SITE__/features/data-plane\" target=\"_top\">\\n      <div class=\"up-hub-img\"><img src=\"__IMG_data-plane__\" alt=\"\" loading=\"lazy\"></div>\\n      <div class=\"up-hub-body\"><span class=\"up-mono up-series-day\">Feature 07 &middot; Ontology</span>\\n      <h3>Upsolve Data Plane</h3><p>Stripe, PostHog and HubSpot. One agent. Real SQL.</p><span class=\"up-mono up-hub-go\">Read more &rarr;</span></div></a><a class=\"up-hub-card\" href=\"__SITE__/features/mcp-for-claude\" target=\"_top\">\\n      <div class=\"up-hub-img\"><img src=\"__IMG_mcp-for-claude__\" alt=\"\" loading=\"lazy\"></div>\\n      <div class=\"up-hub-body\"><span class=\"up-mono up-series-day\">Feature 08 &middot; Distribution</span>\\n      <h3>Upsolve MCP for Claude</h3><p>Your governed data agent, right inside Claude.</p><span class=\"up-mono up-hub-go\">Read more &rarr;</span></div></a><a class=\"up-hub-card\" href=\"__SITE__/features/demo-projects\" target=\"_top\">\\n      <div class=\"up-hub-img\"><img src=\"__IMG_demo-projects__\" alt=\"\" loading=\"lazy\"></div>\\n      <div class=\"up-hub-body\"><span class=\"up-mono up-series-day\">Feature 09 &middot; Distribution</span>\\n      <h3>Upsolve Demo Projects</h3><p>A working data agent from your first minute.</p><span class=\"up-mono up-hub-go\">Read more &rarr;</span></div></a><a class=\"up-hub-card\" href=\"__SITE__/features/golden-questions\" target=\"_top\">\\n      <div class=\"up-hub-img\"><img src=\"__IMG_golden-questions__\" alt=\"\" loading=\"lazy\"></div>\\n      <div class=\"up-hub-body\"><span class=\"up-mono up-series-day\">Feature 10 &middot; Improvement loop</span>\\n      <h3>Upsolve Golden Questions</h3><p>Teach your agent the right answer, and know when it\\'s unsure.</p><span class=\"up-mono up-hub-go\">Read more &rarr;</span></div></a><a class=\"up-hub-card\" href=\"__SITE__/features/workspaces\" target=\"_top\">\\n      <div class=\"up-hub-img\"><img src=\"__IMG_workspaces__\" alt=\"\" loading=\"lazy\"></div>\\n      <div class=\"up-hub-body\"><span class=\"up-mono up-series-day\">Feature 11 &middot; Ontology</span>\\n      <h3>Upsolve Workspaces</h3><p>Your whole agent, in one versioned workspace.</p><span class=\"up-mono up-hub-go\">Read more &rarr;</span></div></a><a class=\"up-hub-card\" href=\"__SITE__/features/html-apps\" target=\"_top\">\\n      <div class=\"up-hub-img\"><img src=\"__IMG_html-apps__\" alt=\"\" loading=\"lazy\"></div>\\n      <div class=\"up-hub-body\"><span class=\"up-mono up-series-day\">Feature 12 &middot; Distribution</span>\\n      <h3>Upsolve Branded HTML Apps</h3><p>Turn any canvas into a branded app in seconds.</p><span class=\"up-mono up-hub-go\">Read more &rarr;</span></div></a><a class=\"up-hub-card\" href=\"__SITE__/features/builder-agent\" target=\"_top\">\\n      <div class=\"up-hub-img\"><img src=\"__IMG_builder-agent__\" alt=\"\" loading=\"lazy\"></div>\\n      <div class=\"up-hub-body\"><span class=\"up-mono up-series-day\">Feature 13 &middot; Improvement loop</span>\\n      <h3>Upsolve Builder Agent</h3><p>An agent that improves your data agent.</p><span class=\"up-mono up-hub-go\">Read more &rarr;</span></div></a><a class=\"up-hub-card\" href=\"__SITE__/features/self-serve-onboarding\" target=\"_top\">\\n      <div class=\"up-hub-img\"><img src=\"__IMG_self-serve-onboarding__\" alt=\"\" loading=\"lazy\"></div>\\n      <div class=\"up-hub-body\"><span class=\"up-mono up-series-day\">Feature 14 &middot; Ontology</span>\\n      <h3>Upsolve Self-Serve Onboarding</h3><p>Sign up free. Get a working workspace in minutes.</p><span class=\"up-mono up-hub-go\">Read more &rarr;</span></div></a></div>\\n</section>\\n\\n<section class=\"up-section\">\\n  <div class=\"up-label up-label-blue\"><span>02 / The stack</span></div>\\n  <h2>How the features fit together</h2>\\n  <p class=\"up-sub\">Each feature strengthens one layer. The improvement loop feeds back into the ontology, so the agent gets better with every conversation.</p>\\n  <div class=\"up-loop\"><div class=\"up-loop-cell up-c-blue\"><div class=\"up-mono up-loop-num\">01</div><div class=\"up-loop-name\">Ontology</div><div class=\"up-loop-desc\">Your data described clearly. Permissions enforced deterministically, not delegated to the agent.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-purple\"><div class=\"up-mono up-loop-num\">02</div><div class=\"up-loop-name\">Agent harness</div><div class=\"up-loop-desc\">Snappy, reliable, accurate. Learns from real interactions and updates its skills and memory.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-orange\"><div class=\"up-mono up-loop-num\">03</div><div class=\"up-loop-name\">Distribution</div><div class=\"up-loop-desc\">Your product, your Slack channels, Claude. Go where your users already are.</div></div><div class=\"up-loop-arrow\" aria-hidden=\"true\">&rarr;</div><div class=\"up-loop-cell up-c-red\"><div class=\"up-mono up-loop-num\">04</div><div class=\"up-loop-name\">Improvement loop</div><div class=\"up-loop-desc\">Live evals on real usage find the gaps, then you harden the context to close them.</div></div><div class=\"up-loop-back up-mono\" aria-hidden=\"true\">&#8617; Improvement loop feeds back into the ontology</div></div>\\n</section>'};const SLUGS=[\"data-models\",\"row-level-security\",\"mcp-connections\",\"harness-2\",\"bi-canvases\",\"observability\",\"data-plane\",\"mcp-for-claude\",\"demo-projects\",\"golden-questions\",\"workspaces\",\"html-apps\",\"builder-agent\",\"self-serve-onboarding\"];const DEFAULT_DEMO=\"https://calendly.com/kaling-aqk/upsolve-initial-exploration\";const DEFAULT_START=\"https://ai-hub.upsolve.ai/\";/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight auto\n * @framerIntrinsicWidth 1200\n */export default function UpsolveFeaturePage(props){const{page=\"data-models\",heroImage,demoUrl,startFreeUrl,siteUrl}=props;const ref=React.useRef(null);const html=React.useMemo(()=>{let h=BODIES[page]||BODIES[\"data-models\"];const esc=s=>String(s).replace(/\"/g,\"&quot;\");const isUrl=u=>typeof u===\"string\"&&/^https?:\\/\\//.test(u.trim());const base=isUrl(demoUrl)?demoUrl.trim():DEFAULT_DEMO;const demo=/utm_/.test(base)?base:base+(base.includes(\"?\")?\"&\":\"?\")+\"utm_source=website&utm_medium=feature_page&utm_campaign=agent_stack&utm_content=\"+page;h=h.split(\"__DEMO__\").join(esc(demo));// the old default (upsolve.ai homepage) may still be saved on existing instances, so treat it as unset\nconst legacyStart=/^https?:\\/\\/(www\\.)?upsolve\\.ai\\/?$/.test(String(startFreeUrl||\"\").trim());h=h.split(\"__START__\").join(esc(isUrl(startFreeUrl)&&!legacyStart?startFreeUrl.trim():DEFAULT_START));const site=(isUrl(siteUrl)?siteUrl.trim():\"https://upsolve.ai\").replace(/\\/+$/,\"\");h=h.split(\"__SITE__\").join(esc(site));for(const s of SLUGS){const key=\"img_\"+s.replace(/-/g,\"_\");const src=page===\"launch-month\"?props[key]?.src:s===page?heroImage?.src:undefined;const token=\"__IMG_\"+s+\"__\";if(src)h=h.split(token).join(esc(src));else h=h.replace(new RegExp('<img src=\"'+token+'\"[^>]*>',\"g\"),'<div class=\"up-img-empty\">Add image in the right panel</div>');}return h;},[page,heroImage,demoUrl,startFreeUrl,siteUrl,props]);React.useEffect(()=>{const root=ref.current;if(!root)return;const handler=ev=>{const btn=ev.target.closest(\".up-faq-q\");if(!btn||!root.contains(btn))return;const item=btn.closest(\".up-faq-item\");const open=item.classList.contains(\"open\");root.querySelectorAll(\".up-faq-item\").forEach(i=>{i.classList.remove(\"open\");i.querySelector(\".up-faq-q\")?.setAttribute(\"aria-expanded\",\"false\");});if(!open){item.classList.add(\"open\");btn.setAttribute(\"aria-expanded\",\"true\");}};root.addEventListener(\"click\",handler);return()=>root.removeEventListener(\"click\",handler);},[html]);return /*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"link\",{rel:\"stylesheet\",href:FONTS}),/*#__PURE__*/_jsx(\"style\",{dangerouslySetInnerHTML:{__html:CSS}}),/*#__PURE__*/_jsx(\"div\",{ref:ref,className:\"upsolve-feature-root\",style:{width:\"100%\"},dangerouslySetInnerHTML:{__html:html}})]});}addPropertyControls(UpsolveFeaturePage,{page:{type:ControlType.Enum,title:\"Page\",options:[\"data-models\",\"row-level-security\",\"mcp-connections\",\"harness-2\",\"bi-canvases\",\"observability\",\"data-plane\",\"mcp-for-claude\",\"demo-projects\",\"golden-questions\",\"workspaces\",\"html-apps\",\"builder-agent\",\"self-serve-onboarding\",\"launch-month\"],optionTitles:[\"01: Data Models\",\"02: Row-Level Security\",\"03: MCP Connections\",\"04: Harness 2.0\",\"05: BI Canvases\",\"06: Observability\",\"07: Data Plane\",\"08: MCP for Claude\",\"09: Demo Projects\",\"10: Golden Questions\",\"11: Workspaces\",\"12: Branded HTML Apps\",\"13: Builder Agent\",\"14: Self-Serve Onboarding\",\"Agent Stack hub\"],defaultValue:\"data-models\"},heroImage:{type:ControlType.ResponsiveImage,title:\"Hero image\",hidden:p=>p.page===\"launch-month\"},img_data_models:{type:ControlType.ResponsiveImage,title:\"Data Models\",hidden:p=>p.page!==\"launch-month\"},img_row_level_security:{type:ControlType.ResponsiveImage,title:\"Row-Level Security\",hidden:p=>p.page!==\"launch-month\"},img_mcp_connections:{type:ControlType.ResponsiveImage,title:\"MCP Connections\",hidden:p=>p.page!==\"launch-month\"},img_harness_2:{type:ControlType.ResponsiveImage,title:\"Harness 2.0\",hidden:p=>p.page!==\"launch-month\"},img_bi_canvases:{type:ControlType.ResponsiveImage,title:\"BI Canvases\",hidden:p=>p.page!==\"launch-month\"},img_observability:{type:ControlType.ResponsiveImage,title:\"Observability\",hidden:p=>p.page!==\"launch-month\"},img_data_plane:{type:ControlType.ResponsiveImage,title:\"Data Plane\",hidden:p=>p.page!==\"launch-month\"},img_mcp_for_claude:{type:ControlType.ResponsiveImage,title:\"MCP for Claude\",hidden:p=>p.page!==\"launch-month\"},img_demo_projects:{type:ControlType.ResponsiveImage,title:\"Demo Projects\",hidden:p=>p.page!==\"launch-month\"},img_golden_questions:{type:ControlType.ResponsiveImage,title:\"Golden Questions\",hidden:p=>p.page!==\"launch-month\"},img_workspaces:{type:ControlType.ResponsiveImage,title:\"Workspaces\",hidden:p=>p.page!==\"launch-month\"},img_html_apps:{type:ControlType.ResponsiveImage,title:\"Branded HTML Apps\",hidden:p=>p.page!==\"launch-month\"},img_builder_agent:{type:ControlType.ResponsiveImage,title:\"Builder Agent\",hidden:p=>p.page!==\"launch-month\"},img_self_serve_onboarding:{type:ControlType.ResponsiveImage,title:\"Self-Serve Onboarding\",hidden:p=>p.page!==\"launch-month\"},demoUrl:{type:ControlType.String,title:\"Demo link\",defaultValue:DEFAULT_DEMO},startFreeUrl:{type:ControlType.String,title:\"Start free link\",defaultValue:DEFAULT_START},siteUrl:{type:ControlType.String,title:\"Site URL\",defaultValue:\"https://upsolve.ai\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"UpsolveFeaturePage\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"auto\",\"framerSupportedLayoutWidth\":\"any\",\"framerIntrinsicWidth\":\"1200\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./UpsolveFeaturePage.map"],"mappings":"uMAMG,SAAwB,EAAmB,EAAM,CAAC,GAAK,CAAC,OAAK,cAAc,YAAU,UAAQ,eAAa,WAAS,EAAY,EAAIA,EAAa,IAAI,EAAQ,EAAKC,MAAkB,CAAC,IAAI,EAAE,EAAO,IAAO,EAAO,eAAqB,EAAI,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,EAAQ,EAAM,GAAG,OAAO,GAAI,UAAU,eAAe,KAAK,EAAE,KAAK,CAAC,EAAQ,EAAK,EAAM,CAAO,EAAE,EAAQ,KAAK,EAAE,EAAmB,EAAK,OAAO,KAAK,CAAI,EAAE,EAAK,GAAM,EAAK,SAAS,GAAG,EAAE,IAAI,KAAK,mFAAmF,EAAK,EAAE,EAAE,MAAM,UAAU,CAAC,CAAC,KAAK,EAAI,CAAI,CAAC,EACvkB,IAAM,EAAY,sCAAsC,KAAK,OAAO,GAAc,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC,CAAC,KAAK,EAAI,EAAM,CAAY,GAAG,CAAC,EAAY,EAAa,KAAK,EAAE,CAAa,CAAC,EAAE,IAAM,GAAM,EAAM,CAAO,EAAE,EAAQ,KAAK,EAAE,qBAAA,CAAsB,QAAQ,OAAO,EAAE,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC,CAAC,KAAK,EAAI,CAAI,CAAC,EAAE,IAAI,IAAM,KAAK,EAAM,CAAC,IAAM,EAAI,OAAO,EAAE,QAAQ,KAAK,GAAG,EAAQ,EAAI,IAAO,eAAe,EAAM,EAAI,EAAE,IAAI,IAAI,EAAK,GAAW,IAAI,IAAA,GAAgB,EAAM,SAAS,EAAE,KAAK,AAA4C,EAAzC,EAAM,EAAE,MAAM,CAAK,CAAC,CAAC,KAAK,EAAI,CAAG,CAAC,EAAS,EAAE,QAAY,OAAO,aAAa,EAAM,UAAU,GAAG,EAAE,8DAA8D,CAAE,CAAC,OAAO,CAAE,EAAE,CAAC,EAAK,EAAU,EAAQ,EAAa,EAAQ,CAAK,CAAC,EAA0jB,OAAxjB,MAAoB,CAAC,IAAM,EAAK,EAAI,QAAQ,GAAG,CAAC,EAAK,OAAO,IAAM,EAAQ,GAAI,CAAC,IAAM,EAAI,EAAG,OAAO,QAAQ,WAAW,EAAE,GAAG,CAAC,GAAK,CAAC,EAAK,SAAS,CAAG,EAAE,OAAO,IAAM,EAAK,EAAI,QAAQ,cAAc,EAAQ,EAAK,EAAK,UAAU,SAAS,MAAM,EAAE,EAAK,iBAAiB,cAAc,CAAC,CAAC,QAAQ,GAAG,CAAC,EAAE,UAAU,OAAO,MAAM,EAAE,EAAE,cAAc,WAAW,CAAC,EAAE,aAAa,gBAAgB,OAAO,CAAE,CAAC,EAAM,IAAM,EAAK,UAAU,IAAI,MAAM,EAAE,EAAI,aAAa,gBAAgB,MAAM,EAAG,EAAyC,OAAvC,EAAK,iBAAiB,QAAQ,CAAO,MAAY,EAAK,oBAAoB,QAAQ,CAAO,CAAE,EAAE,CAAC,CAAI,CAAC,EAAsB,EAAMC,EAAU,CAAC,SAAS,CAAc,EAAK,OAAO,CAAC,IAAI,aAAa,KAAK,CAAK,CAAC,EAAe,EAAK,QAAQ,CAAC,wBAAwB,CAAC,OAAO,CAAG,CAAC,CAAC,EAAe,EAAK,MAAM,CAAK,MAAI,UAAU,uBAAuB,MAAM,CAAC,MAAM,MAAM,EAAE,wBAAwB,CAAC,OAAO,CAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,6BALj+C,IAA4B,IAAoD,EAAO,EAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAstjB,EAAM,kIAAwI,EAAO,CAAC,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;w3BAA2iY,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sxBAAq2X,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;y0BAAswX,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qwBAAmoX,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uxBAA+jX,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0vBAAmlX,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kxBAA4tX,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6tBAA8hX,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4yBAAm/X,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;u2BAA4jY,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;i0BAA27X,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kwBAA+qX,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kyBAAw1X,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+xBAAs+X,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAAkmR,EAAQ,EAAM,CAAC,cAAc,qBAAqB,kBAAkB,YAAY,cAAc,gBAAgB,aAAa,iBAAiB,gBAAgB,mBAAmB,aAAa,YAAY,gBAAgB,uBAAuB,EAAQ,EAAa,8DAAoE,EAAc,6BAKrw9L,EAAoB,EAAmB,CAAC,KAAK,CAAC,KAAK,EAAY,KAAK,MAAM,OAAO,QAAQ,CAAC,cAAc,qBAAqB,kBAAkB,YAAY,cAAc,gBAAgB,aAAa,iBAAiB,gBAAgB,mBAAmB,aAAa,YAAY,gBAAgB,wBAAwB,cAAc,EAAE,aAAa,CAAC,kBAAkB,yBAAyB,sBAAsB,kBAAkB,kBAAkB,oBAAoB,iBAAiB,qBAAqB,oBAAoB,uBAAuB,iBAAiB,wBAAwB,oBAAoB,4BAA4B,iBAAiB,EAAE,aAAa,aAAa,EAAE,UAAU,CAAC,KAAK,EAAY,gBAAgB,MAAM,aAAa,OAAO,GAAG,EAAE,OAAO,cAAc,EAAE,gBAAgB,CAAC,KAAK,EAAY,gBAAgB,MAAM,cAAc,OAAO,GAAG,EAAE,OAAO,cAAc,EAAE,uBAAuB,CAAC,KAAK,EAAY,gBAAgB,MAAM,qBAAqB,OAAO,GAAG,EAAE,OAAO,cAAc,EAAE,oBAAoB,CAAC,KAAK,EAAY,gBAAgB,MAAM,kBAAkB,OAAO,GAAG,EAAE,OAAO,cAAc,EAAE,cAAc,CAAC,KAAK,EAAY,gBAAgB,MAAM,cAAc,OAAO,GAAG,EAAE,OAAO,cAAc,EAAE,gBAAgB,CAAC,KAAK,EAAY,gBAAgB,MAAM,cAAc,OAAO,GAAG,EAAE,OAAO,cAAc,EAAE,kBAAkB,CAAC,KAAK,EAAY,gBAAgB,MAAM,gBAAgB,OAAO,GAAG,EAAE,OAAO,cAAc,EAAE,eAAe,CAAC,KAAK,EAAY,gBAAgB,MAAM,aAAa,OAAO,GAAG,EAAE,OAAO,cAAc,EAAE,mBAAmB,CAAC,KAAK,EAAY,gBAAgB,MAAM,iBAAiB,OAAO,GAAG,EAAE,OAAO,cAAc,EAAE,kBAAkB,CAAC,KAAK,EAAY,gBAAgB,MAAM,gBAAgB,OAAO,GAAG,EAAE,OAAO,cAAc,EAAE,qBAAqB,CAAC,KAAK,EAAY,gBAAgB,MAAM,mBAAmB,OAAO,GAAG,EAAE,OAAO,cAAc,EAAE,eAAe,CAAC,KAAK,EAAY,gBAAgB,MAAM,aAAa,OAAO,GAAG,EAAE,OAAO,cAAc,EAAE,cAAc,CAAC,KAAK,EAAY,gBAAgB,MAAM,oBAAoB,OAAO,GAAG,EAAE,OAAO,cAAc,EAAE,kBAAkB,CAAC,KAAK,EAAY,gBAAgB,MAAM,gBAAgB,OAAO,GAAG,EAAE,OAAO,cAAc,EAAE,0BAA0B,CAAC,KAAK,EAAY,gBAAgB,MAAM,wBAAwB,OAAO,GAAG,EAAE,OAAO,cAAc,EAAE,QAAQ,CAAC,KAAK,EAAY,OAAO,MAAM,YAAY,aAAa,CAAY,EAAE,aAAa,CAAC,KAAK,EAAY,OAAO,MAAM,kBAAkB,aAAa,CAAa,EAAE,QAAQ,CAAC,KAAK,EAAY,OAAO,MAAM,WAAW,aAAa,oBAAoB,CAAC,CAAC"}