nordisk/monetize
uitest/src/board.svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1180 560" 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="var(--estate-board-top, #0b1c2e)"/><stop offset="1" stop-color="var(--estate-board-bottom, #06111d)"/>
</linearGradient>
<linearGradient id="chip" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="var(--estate-chip-top, #14384f)"/><stop offset="1" stop-color="var(--estate-chip-bottom, #0e2a3e)"/>
</linearGradient>
<linearGradient id="rail" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="var(--estate-rail-top, #173d57)"/><stop offset="1" stop-color="var(--estate-rail-bottom, #0c2438)"/>
</linearGradient>
<linearGradient id="slot" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="var(--estate-slot-top, #123448)"/><stop offset="1" stop-color="var(--estate-slot-bottom, #0a2032)"/>
</linearGradient>
<linearGradient id="dark" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="var(--estate-dark-top, #0d1f2e)"/><stop offset="1" stop-color="var(--estate-dark-bottom, #081521)"/>
</linearGradient>
</defs>
<rect x="0" y="0" width="1180" height="560" fill="url(#board)"/>
<g stroke="var(--estate-rule, #143a52)" stroke-width="1">
<line x1="0" y1="76" x2="1180" y2="76"/>
<line x1="0" y1="484" x2="1180" y2="484"/>
</g>
<g fill="var(--estate-via, #16415c)">
<circle cx="40" cy="40" r="2"/><circle cx="1140" cy="40" r="2"/>
<circle cx="40" cy="532" r="2"/><circle cx="1140" cy="532" r="2"/>
</g>
<text x="40" y="46" fill="var(--estate-ink, #eaf6ff)" font-size="17" font-weight="700">gunnar estate</text>
<text x="40" y="64" fill="var(--estate-ink-body, #86b3cc)" font-size="10.5">11 tenants · a buyer names a meter and an amount, never a machine</text>
<rect x="100" y="132" width="300" height="268" rx="12" fill="url(#chip)" stroke="var(--estate-chip-edge, #5aa6cf)" stroke-width="2.2"/>
<text x="250" y="160" fill="var(--estate-ink, #eaf6ff)" font-size="14.5" font-weight="700" text-anchor="middle">front</text>
<text x="250" y="178" fill="var(--estate-ink-dim, #9fc9e0)" font-size="10.5" text-anchor="middle">caddy · gunnar-ui · monetize</text>
<circle cx="120" cy="154" r="4.5" fill="var(--estate-up, #5fd39a)"/>
<text x="384" y="158" fill="var(--estate-ink-dim, #9fc9e0)" font-size="9.5" text-anchor="end">up</text>
<rect x="122" y="204" width="256" height="28" rx="6" fill="url(#slot)" stroke="var(--estate-accent, #6fd3f5)" stroke-width="1.5"/>
<text x="250" y="222" fill="var(--estate-slot-ink, #bfe6ff)" font-size="10" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">upcloud · 0000-front</text>
<rect x="122" y="242" width="256" height="28" rx="6" fill="url(#slot)" stroke="var(--estate-accent, #6fd3f5)" stroke-width="1.5"/>
<text x="250" y="260" fill="var(--estate-slot-ink, #bfe6ff)" font-size="10" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">disk 9.0 GiB of 40.0 GiB</text>
<rect x="122" y="276" width="256" height="4" rx="2" fill="var(--estate-bar-track, #0a2032)"/>
<rect x="122" y="276" width="56" height="4" rx="2" fill="var(--estate-accent, #6fd3f5)"/>
<rect x="122" y="292" width="256" height="28" rx="6" fill="url(#slot)" stroke="var(--estate-accent, #6fd3f5)" stroke-width="1.5"/>
<text x="250" y="310" fill="var(--estate-slot-ink, #bfe6ff)" font-size="10" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">4 vCPU · 8 GB</text>
<text x="250" y="336" fill="var(--estate-ink-faint, #7fa8c4)" font-size="9" text-anchor="middle">plan says · STARTER-4xCPU-8GB</text>
<text x="250" y="354" fill="var(--estate-ink-dim, #9fc9e0)" font-size="9.5" text-anchor="middle">cannot grow</text>
<rect x="400" y="262" width="6" height="8" fill="var(--estate-accent, #6fd3f5)"/>
<line x1="406" y1="266" x2="440" y2="266" stroke="var(--estate-rule, #143a52)" stroke-width="1.5"/>
<circle cx="440" cy="266" r="4" fill="var(--estate-pin, #bfecff)"/>
<rect x="440" y="132" width="300" height="268" rx="12" fill="url(#rail)" stroke="var(--estate-rail-edge, #7fc8ea)" stroke-width="2.2"/>
<text x="590" y="160" fill="var(--estate-ink, #eaf6ff)" font-size="14.5" font-weight="700" text-anchor="middle">main</text>
<text x="590" y="178" fill="var(--estate-ink-dim, #9fc9e0)" font-size="10.5" text-anchor="middle">the forge, no shell</text>
<circle cx="460" cy="154" r="4.5" fill="var(--estate-up, #5fd39a)"/>
<text x="724" y="158" fill="var(--estate-ink-dim, #9fc9e0)" font-size="9.5" text-anchor="end">up</text>
<rect x="462" y="204" width="256" height="28" rx="6" fill="url(#slot)" stroke="var(--estate-accent, #6fd3f5)" stroke-width="1.5"/>
<text x="590" y="222" fill="var(--estate-slot-ink, #bfe6ff)" font-size="10" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">upcloud · 0000-appliance</text>
<rect x="462" y="242" width="256" height="28" rx="6" fill="url(#slot)" stroke="var(--estate-accent, #6fd3f5)" stroke-width="1.5"/>
<text x="590" y="260" fill="var(--estate-slot-ink, #bfe6ff)" font-size="10" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">disk 41.7 MiB of 37.8 GiB</text>
<rect x="462" y="276" width="256" height="4" rx="2" fill="var(--estate-bar-track, #0a2032)"/>
<rect x="462" y="276" width="0" height="4" rx="2" fill="var(--estate-accent, #6fd3f5)"/>
<rect x="462" y="292" width="256" height="28" rx="6" fill="url(#slot)" stroke="var(--estate-accent, #6fd3f5)" stroke-width="1.5"/>
<text x="590" y="310" fill="var(--estate-slot-ink, #bfe6ff)" font-size="10" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">4.0 cores · 16.0 GiB</text>
<text x="590" y="336" fill="var(--estate-ink-faint, #7fa8c4)" font-size="9" text-anchor="middle">measured · plan STARTER-4xCPU-16GB</text>
<text x="590" y="354" fill="var(--estate-ink-dim, #9fc9e0)" font-size="9.5" text-anchor="middle">cannot grow</text>
<text x="590" y="372" fill="var(--estate-ink-faint, #7fa8c4)" font-size="9" text-anchor="middle">grows in place; this boot stack carries no</text>
<text x="590" y="384" fill="var(--estate-ink-faint, #7fa8c4)" font-size="9" text-anchor="middle">engine</text>
<rect x="740" y="262" width="6" height="8" fill="var(--estate-accent, #6fd3f5)"/>
<line x1="746" y1="266" x2="780" y2="266" stroke="var(--estate-rule, #143a52)" stroke-width="1.5"/>
<circle cx="780" cy="266" r="4" fill="var(--estate-pin, #bfecff)"/>
<rect x="780" y="132" width="300" height="268" rx="12" fill="url(#dark)" stroke="var(--estate-dark-edge, #3d5f74)" stroke-width="2.2"/>
<text x="930" y="160" fill="var(--estate-dark-ink, #6a8ba0)" font-size="14.5" font-weight="700" text-anchor="middle">twin</text>
<text x="930" y="178" fill="var(--estate-dark-ink, #6a8ba0)" font-size="10.5" text-anchor="middle">the log-holder, no shell</text>
<circle cx="800" cy="154" r="4.5" fill="var(--estate-silent, #e0574f)"/>
<text x="1064" y="158" fill="var(--estate-dark-ink, #6a8ba0)" font-size="9.5" text-anchor="end">silent</text>
<rect x="802" y="204" width="256" height="28" rx="6" fill="url(#slot)" stroke="var(--estate-dark-edge, #3d5f74)" stroke-width="1.5"/>
<text x="930" y="222" fill="var(--estate-dark-ink, #6a8ba0)" font-size="10" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">upcloud · 0000-twin</text>
<rect x="802" y="242" width="256" height="28" rx="6" fill="url(#slot)" stroke="var(--estate-dark-edge, #3d5f74)" stroke-width="1.5"/>
<text x="930" y="260" fill="var(--estate-dark-ink, #6a8ba0)" font-size="10" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">disk — · not measured</text>
<rect x="802" y="292" width="256" height="28" rx="6" fill="url(#slot)" stroke="var(--estate-dark-edge, #3d5f74)" stroke-width="1.5"/>
<text x="930" y="310" fill="var(--estate-dark-ink, #6a8ba0)" font-size="10" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">1 vCPU · 1 GB</text>
<text x="930" y="336" fill="var(--estate-ink-faint, #7fa8c4)" font-size="9" text-anchor="middle">plan says · STARTER-1xCPU-1GB</text>
<text x="930" y="354" fill="var(--estate-dark-ink, #6a8ba0)" font-size="9.5" text-anchor="middle">growth unknown</text>
<text x="930" y="372" fill="var(--estate-ink-faint, #7fa8c4)" font-size="9" text-anchor="middle">has not polled since this server started</text>
<text x="40" y="512" fill="var(--estate-ink-dim, #9fc9e0)" font-size="10.5" font-weight="700">iron comes from</text>
<rect x="176" y="497" width="176" height="22" rx="5" fill="url(#slot)" stroke="var(--estate-accent, #6fd3f5)" stroke-width="1.4"/>
<text x="264" y="512" fill="var(--estate-slot-ink, #bfe6ff)" font-size="10" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">upcloud · purchases go here</text>
<rect x="364" y="497" width="206" height="22" rx="5" fill="url(#slot)" stroke="var(--estate-dark-edge, #3d5f74)" stroke-width="1.4"/>
<text x="467" y="512" fill="var(--estate-slot-ink, #bfe6ff)" font-size="10" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">server · this box · cannot spend</text>
</svg>