Gunnar

nordisk/monetize

docs/operator-v2.svg

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1400 590" width="1400" height="590" font-family="'DejaVu Sans', 'Segoe UI', sans-serif">
  <defs>
    <linearGradient id="board" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#0b1c2e"/><stop offset="1" stop-color="#06111d"/></linearGradient>
    <linearGradient id="chip" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#14384f"/><stop offset="1" stop-color="#0e2a3e"/></linearGradient>
    <linearGradient id="rail" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#173d57"/><stop offset="1" stop-color="#0c2438"/></linearGradient>
    <linearGradient id="slot" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#123448"/><stop offset="1" stop-color="#0a2032"/></linearGradient>
    <marker id="head" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" fill="#a9c3d4"/></marker>
    <marker id="headw" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" fill="#dff1ff"/></marker>
  </defs>
  <rect x="0" y="0" width="1400" height="590" fill="url(#board)"/>
  <g stroke="#143a52" stroke-width="1"><line x1="0" y1="84" x2="1400" y2="84"/><line x1="0" y1="554" x2="1400" y2="554"/></g>
  <g fill="#16415c"><circle cx="40" cy="20" r="2"/><circle cx="1360" cy="20" r="2"/><circle cx="40" cy="572" r="2"/><circle cx="1360" cy="572" r="2"/></g>
  <text x="40" y="44" fill="#eaf6ff" font-size="22" font-weight="700">Write a small operator and a resource. Monetize is the control plane that runs it.</text>
  <text x="1283" y="44" fill="#9fc9e0" font-size="15"></text>
  <rect x="40" y="61" width="24" height="14" rx="3" fill="url(#chip)" stroke="#7CFFB2" stroke-width="1.8"/>
  <text x="72" y="72" fill="#cfe6f5" font-size="12">you write it</text>
  <rect x="174.64000000000001" y="61" width="24" height="14" rx="3" fill="url(#chip)" stroke="#6fd3f5" stroke-width="1.8"/>
  <text x="206.64000000000001" y="72" fill="#cfe6f5" font-size="12">premade · open monetize</text>
  <rect x="30" y="104" width="640" height="442" rx="12" fill="url(#rail)" fill-opacity="0.55" stroke="#7CFFB2" stroke-opacity="0.75" stroke-width="2"/>
  <text x="46" y="128" fill="#7CFFB2" font-size="14.5" font-weight="700">YOU WRITE</text>
  <rect x="46" y="144" width="608" height="112" rx="8" fill="url(#chip)" stroke="#7CFFB2" stroke-width="2"/>
  <rect x="47" y="154" width="5" height="92" rx="2" fill="#7CFFB2" fill-opacity="0.85"/>
  <text x="64" y="172" fill="#eaf6ff" font-size="16" font-weight="700">SHAPE</text>
  <text x="130.4" y="172" fill="#86b3cc" font-size="12.5">data, no code</text>
  <text x="64" y="193" fill="#9fc9e0" font-size="13">roles (e.g. front, be, fe …)</text>
  <text x="64" y="214" fill="#9fc9e0" font-size="13">sizes · disks · networks</text>
  <text x="640" y="244" fill="#7CFFB2" font-size="13.5" font-weight="700" text-anchor="end">≈ custom resource</text>
  <rect x="46" y="274" width="608" height="134" rx="8" fill="url(#chip)" stroke="#7CFFB2" stroke-width="2"/>
  <rect x="47" y="284" width="5" height="114" rx="2" fill="#7CFFB2" fill-opacity="0.85"/>
  <text x="64" y="302" fill="#eaf6ff" font-size="16" font-weight="700">PRODUCT OPERATOR</text>
  <text x="64" y="323" fill="#86b3cc" font-size="13">guest · wasm · built with the monetize SDK</text>
  <text x="64" y="344" fill="#9fc9e0" font-size="13">6 ops: manifest · facts · plan</text>
  <text x="64" y="365" fill="#9fc9e0" font-size="13">and the guardian: diagnose · remedy · observe</text>
  <text x="640" y="396" fill="#7CFFB2" font-size="13.5" font-weight="700" text-anchor="end">≈ operator</text>
  <rect x="46" y="436" width="608" height="54" rx="8" fill="url(#chip)" stroke="#6fd3f5" stroke-width="2"/>
  <rect x="47" y="446" width="5" height="34" rx="2" fill="#6fd3f5" fill-opacity="0.85"/>
  <text x="64" y="468" fill="#9fc9e0" font-size="13.5">built with the SDK</text>
  <text x="193.276" y="468" fill="#eaf6ff" font-size="14" font-weight="700" font-family="'DejaVu Sans Mono', monospace">monetize-product-guest</text>
  <text x="640" y="468" fill="#6fd3f5" font-size="13.5" font-weight="700" text-anchor="end">≈ client-go</text>
  <path d="M150 408 L150 435" stroke="#a9c3d4" stroke-width="2" fill="none"/>
  <circle cx="150" cy="408" r="3.2" fill="#dff1ff"/><circle cx="150" cy="436" r="3.2" fill="#dff1ff"/>
  <line x1="46" y1="504" x2="654" y2="504" stroke="#7CFFB2" stroke-opacity="0.35" stroke-width="1"/>
  <text x="48" y="524" fill="#86b3cc" font-size="12.5">optional: buy pages (BuySite) · pairing (WireGuard / twin)</text>
  <rect x="820" y="104" width="550" height="442" rx="12" fill="url(#rail)" fill-opacity="0.55" stroke="#6fd3f5" stroke-opacity="0.75" stroke-width="2"/>
  <text x="836" y="128" fill="#6fd3f5" font-size="14.5" font-weight="700">MONETIZE</text>
  <text x="926.88" y="128" fill="#86b3cc" font-size="11">the ONE box · monetize-admin</text>
  <rect x="836" y="144" width="518" height="112" rx="8" fill="url(#chip)" stroke="#6fd3f5" stroke-width="2"/>
  <rect x="837" y="154" width="5" height="92" rx="2" fill="#6fd3f5" fill-opacity="0.85"/>
  <text x="854" y="172" fill="#eaf6ff" font-size="16" font-weight="700">business controller</text>
  <text x="854" y="193" fill="#9fc9e0" font-size="13">buy · pay · renew · grow · terminate</text>
  <rect x="836" y="274" width="518" height="134" rx="8" fill="url(#chip)" stroke="#6fd3f5" stroke-width="2"/>
  <rect x="837" y="284" width="5" height="114" rx="2" fill="#6fd3f5" fill-opacity="0.85"/>
  <text x="854" y="302" fill="#eaf6ff" font-size="16" font-weight="700">infra controller</text>
  <text x="854" y="323" fill="#9fc9e0" font-size="13">lay · update (front last) · repair · DNS</text>
  <text x="1095.0" y="468" fill="#6fd3f5" font-size="17" font-weight="700" text-anchor="middle">≈ control plane that reconciles</text>
  <path d="M654 200.0 L834 200.0" stroke="#a9c3d4" stroke-width="2.6" fill="none" marker-end="url(#head)"/>
  <circle cx="654" cy="200.0" r="3.2" fill="#dff1ff"/>
  <text x="744.0" y="190.0" fill="#dff1ff" font-size="13" font-weight="700" text-anchor="middle">declared in</text>
  <path d="M654 341.0 L834 341.0" stroke="#a9c3d4" stroke-width="2.6" fill="none" marker-end="url(#head)"/>
  <circle cx="654" cy="341.0" r="3.2" fill="#dff1ff"/>
  <text x="744.0" y="331.0" fill="#dff1ff" font-size="13" font-weight="700" text-anchor="middle">signed, pulled by</text>
</svg>