summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-03-21 15:12:42 +0200
committerPaul Buetow <paul@buetow.org>2026-03-21 15:12:42 +0200
commit9fc3b3cdc9354caffd9256d1f2a59bd566500a03 (patch)
treefe2b97c77b8df2c4940d6ad07d78e4acef432e21
parent1acb65324e8d7d520483535843a753757b0dd4a0 (diff)
Redesign logo as 3× wider banner (1536×512) with more visual elements
Left panel: A100 GPU chip with die grid and pins, connected to a three-layer neural network (AI nodes in purple/violet) bridging to center. Center: π symbol with FreeBSD daemon horns, circuit grid, glow ring. Right panel: tmux terminal window with macOS-style title bar, simulated shell session (create-both + pi sessions), and tmux status bar. README img width updated to 600px. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-rw-r--r--README.md2
-rw-r--r--logo.svg501
2 files changed, 381 insertions, 122 deletions
diff --git a/README.md b/README.md
index 95cd30d..e19395c 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# hyperstack
-<img src="logo.svg" alt="Hyperstack + Pi + FreeBSD logo" width="192"/>
+<img src="logo.svg" alt="Hyperstack · Pi · FreeBSD · AI · tmux logo" width="600"/>
Automates Hyperstack GPU VM lifecycle: create, bootstrap, WireGuard tunnel, and vLLM inference.
Runs two A100 VMs concurrently — each serving a different model — with [Pi](https://pi.dev) coding agents connected to each.
diff --git a/logo.svg b/logo.svg
index 321b9eb..6bf71b4 100644
--- a/logo.svg
+++ b/logo.svg
@@ -1,166 +1,425 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="512" height="512">
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1536 512" width="1536" height="512">
<title>Hyperstack · Pi · FreeBSD Logo</title>
<defs>
- <!-- Dark background gradient -->
+ <!-- Background gradient -->
<linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#0d1117"/>
<stop offset="100%" style="stop-color:#161b22"/>
</linearGradient>
- <!-- Blue accent gradient for GPU/Hyperstack -->
+ <!-- Blue: Hyperstack / GPU -->
<linearGradient id="gpuGrad" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#1f6feb"/>
<stop offset="100%" style="stop-color:#388bfd"/>
</linearGradient>
- <!-- Pi symbol gradient (top blue to deeper blue) -->
+ <!-- Pi symbol gradient -->
<linearGradient id="piGrad" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" style="stop-color:#58a6ff"/>
<stop offset="100%" style="stop-color:#1f6feb"/>
</linearGradient>
- <!-- Red accent for FreeBSD daemon horns -->
+ <!-- Red: FreeBSD daemon horns -->
<linearGradient id="bsdGrad" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" style="stop-color:#ff6b6b"/>
<stop offset="100%" style="stop-color:#ff4444"/>
</linearGradient>
- <!-- Glow filter for Pi symbol -->
- <filter id="glow" x="-20%" y="-20%" width="140%" height="140%">
- <feGaussianBlur in="SourceGraphic" stdDeviation="6" result="blur"/>
- <feMerge>
- <feMergeNode in="blur"/>
- <feMergeNode in="SourceGraphic"/>
- </feMerge>
+ <!-- Purple: AI / neural network -->
+ <linearGradient id="aiGrad" x1="0%" y1="0%" x2="100%" y2="100%">
+ <stop offset="0%" style="stop-color:#a78bfa"/>
+ <stop offset="100%" style="stop-color:#7c3aed"/>
+ </linearGradient>
+ <!-- Green: tmux status bar -->
+ <linearGradient id="tmuxBar" x1="0%" y1="0%" x2="100%" y2="0%">
+ <stop offset="0%" style="stop-color:#1a2d1a"/>
+ <stop offset="100%" style="stop-color:#0d1f0d"/>
+ </linearGradient>
+
+ <!-- Glow for Pi symbol -->
+ <filter id="glow" x="-25%" y="-25%" width="150%" height="150%">
+ <feGaussianBlur in="SourceGraphic" stdDeviation="7" result="blur"/>
+ <feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
</filter>
- <!-- Soft glow for BSD horns -->
+ <!-- Glow for BSD horns -->
<filter id="hornGlow" x="-40%" y="-40%" width="180%" height="180%">
<feGaussianBlur in="SourceGraphic" stdDeviation="5" result="blur"/>
- <feMerge>
- <feMergeNode in="blur"/>
- <feMergeNode in="SourceGraphic"/>
- </feMerge>
+ <feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
+ </filter>
+ <!-- Glow for AI nodes -->
+ <filter id="aiGlow" x="-60%" y="-60%" width="220%" height="220%">
+ <feGaussianBlur in="SourceGraphic" stdDeviation="6" result="blur"/>
+ <feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
+ </filter>
+ <!-- Soft glow for GPU chip -->
+ <filter id="chipGlow" x="-20%" y="-20%" width="140%" height="140%">
+ <feGaussianBlur in="SourceGraphic" stdDeviation="4" result="blur"/>
+ <feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
</filter>
</defs>
- <!-- Background with rounded corners -->
- <rect width="512" height="512" rx="48" fill="url(#bg)"/>
-
- <!-- GPU circuit grid (Hyperstack A100 cloud) — raised opacity for small-size legibility -->
- <g opacity="0.20" stroke="#388bfd" stroke-width="1">
- <!-- Horizontal grid lines -->
- <line x1="40" y1="120" x2="472" y2="120"/>
- <line x1="40" y1="160" x2="472" y2="160"/>
- <line x1="40" y1="200" x2="472" y2="200"/>
- <line x1="40" y1="240" x2="472" y2="240"/>
- <line x1="40" y1="280" x2="472" y2="280"/>
- <line x1="40" y1="320" x2="472" y2="320"/>
- <line x1="40" y1="360" x2="472" y2="360"/>
- <line x1="40" y1="400" x2="472" y2="400"/>
- <!-- Vertical grid lines -->
- <line x1="80" y1="100" x2="80" y2="420"/>
- <line x1="120" y1="100" x2="120" y2="420"/>
- <line x1="160" y1="100" x2="160" y2="420"/>
- <line x1="200" y1="100" x2="200" y2="420"/>
- <line x1="240" y1="100" x2="240" y2="420"/>
- <line x1="280" y1="100" x2="280" y2="420"/>
- <line x1="320" y1="100" x2="320" y2="420"/>
- <line x1="360" y1="100" x2="360" y2="420"/>
- <line x1="400" y1="100" x2="400" y2="420"/>
- <line x1="440" y1="100" x2="440" y2="420"/>
- </g>
-
- <!-- Circuit nodes at intersections — raised opacity for readability at avatar size -->
- <g fill="#1f6feb" opacity="0.40">
- <circle cx="80" cy="160" r="4"/>
- <circle cx="160" cy="120" r="4"/>
- <circle cx="240" cy="200" r="4"/>
- <circle cx="320" cy="160" r="4"/>
- <circle cx="400" cy="120" r="4"/>
- <circle cx="440" cy="200" r="4"/>
- <circle cx="120" cy="360" r="4"/>
- <circle cx="200" cy="400" r="4"/>
- <circle cx="280" cy="360" r="4"/>
- <circle cx="360" cy="400" r="4"/>
- <circle cx="440" cy="360" r="4"/>
- <circle cx="80" cy="320" r="4"/>
- </g>
-
- <!-- PCB-style L-shaped traces — raised opacity for small-size legibility -->
- <g stroke="#1f6feb" stroke-width="2" fill="none" opacity="0.28">
- <polyline points="80,160 80,120 160,120"/>
- <polyline points="400,120 440,120 440,200"/>
- <polyline points="80,320 80,360 120,360"/>
- <polyline points="360,400 440,400 440,360"/>
- <polyline points="240,200 240,160 320,160"/>
+ <!-- ═══════════════════════════════════════════════════════════
+ BACKGROUND
+ ═══════════════════════════════════════════════════════════ -->
+ <rect width="1536" height="512" rx="40" fill="url(#bg)"/>
+
+ <!-- Full-width GPU circuit grid background texture -->
+ <g opacity="0.10" stroke="#388bfd" stroke-width="1">
+ <!-- Horizontals -->
+ <line x1="0" y1="64" x2="1536" y2="64"/>
+ <line x1="0" y1="128" x2="1536" y2="128"/>
+ <line x1="0" y1="192" x2="1536" y2="192"/>
+ <line x1="0" y1="256" x2="1536" y2="256"/>
+ <line x1="0" y1="320" x2="1536" y2="320"/>
+ <line x1="0" y1="384" x2="1536" y2="384"/>
+ <line x1="0" y1="448" x2="1536" y2="448"/>
+ <!-- Verticals -->
+ <line x1="64" y1="0" x2="64" y2="512"/>
+ <line x1="128" y1="0" x2="128" y2="512"/>
+ <line x1="192" y1="0" x2="192" y2="512"/>
+ <line x1="256" y1="0" x2="256" y2="512"/>
+ <line x1="320" y1="0" x2="320" y2="512"/>
+ <line x1="384" y1="0" x2="384" y2="512"/>
+ <line x1="448" y1="0" x2="448" y2="512"/>
+ <line x1="512" y1="0" x2="512" y2="512"/>
+ <line x1="576" y1="0" x2="576" y2="512"/>
+ <line x1="640" y1="0" x2="640" y2="512"/>
+ <line x1="704" y1="0" x2="704" y2="512"/>
+ <line x1="768" y1="0" x2="768" y2="512"/>
+ <line x1="832" y1="0" x2="832" y2="512"/>
+ <line x1="896" y1="0" x2="896" y2="512"/>
+ <line x1="960" y1="0" x2="960" y2="512"/>
+ <line x1="1024" y1="0" x2="1024" y2="512"/>
+ <line x1="1088" y1="0" x2="1088" y2="512"/>
+ <line x1="1152" y1="0" x2="1152" y2="512"/>
+ <line x1="1216" y1="0" x2="1216" y2="512"/>
+ <line x1="1280" y1="0" x2="1280" y2="512"/>
+ <line x1="1344" y1="0" x2="1344" y2="512"/>
+ <line x1="1408" y1="0" x2="1408" y2="512"/>
+ <line x1="1472" y1="0" x2="1472" y2="512"/>
+ </g>
+
+ <!-- ═══════════════════════════════════════════════════════════
+ LEFT PANEL: AI Neural Network + GPU A100 chip
+ x: 0–460
+ ═══════════════════════════════════════════════════════════ -->
+
+ <!-- GPU A100 chip outline (left, centred vertically) -->
+ <!-- Chip body -->
+ <rect x="48" y="156" width="180" height="200" rx="10"
+ fill="none" stroke="#1f6feb" stroke-width="2" opacity="0.55"
+ filter="url(#chipGlow)"/>
+ <!-- Chip inner die -->
+ <rect x="74" y="182" width="128" height="148" rx="6"
+ fill="#1f6feb" fill-opacity="0.06" stroke="#388bfd" stroke-width="1" opacity="0.7"/>
+ <!-- Die grid pattern inside chip -->
+ <g stroke="#388bfd" stroke-width="0.5" opacity="0.35">
+ <line x1="74" y1="214" x2="202" y2="214"/>
+ <line x1="74" y1="246" x2="202" y2="246"/>
+ <line x1="74" y1="278" x2="202" y2="278"/>
+ <line x1="74" y1="310" x2="202" y2="310"/>
+ <line x1="106" y1="182" x2="106" y2="330"/>
+ <line x1="138" y1="182" x2="138" y2="330"/>
+ <line x1="170" y1="182" x2="170" y2="330"/>
+ </g>
+ <!-- Chip pins — left side -->
+ <g stroke="#388bfd" stroke-width="2" opacity="0.6">
+ <line x1="24" y1="180" x2="48" y2="180"/>
+ <line x1="24" y1="204" x2="48" y2="204"/>
+ <line x1="24" y1="228" x2="48" y2="228"/>
+ <line x1="24" y1="252" x2="48" y2="252"/>
+ <line x1="24" y1="276" x2="48" y2="276"/>
+ <line x1="24" y1="300" x2="48" y2="300"/>
+ <line x1="24" y1="324" x2="48" y2="324"/>
+ <line x1="24" y1="348" x2="48" y2="348"/>
+ </g>
+ <!-- Chip pins — right side -->
+ <g stroke="#388bfd" stroke-width="2" opacity="0.6">
+ <line x1="228" y1="180" x2="252" y2="180"/>
+ <line x1="228" y1="204" x2="252" y2="204"/>
+ <line x1="228" y1="228" x2="252" y2="228"/>
+ <line x1="228" y1="252" x2="252" y2="252"/>
+ <line x1="228" y1="276" x2="252" y2="276"/>
+ <line x1="228" y1="300" x2="252" y2="300"/>
+ <line x1="228" y1="324" x2="252" y2="324"/>
+ <line x1="228" y1="348" x2="252" y2="348"/>
+ </g>
+ <!-- Chip pins — top side -->
+ <g stroke="#388bfd" stroke-width="2" opacity="0.6">
+ <line x1="80" y1="132" x2="80" y2="156"/>
+ <line x1="106" y1="132" x2="106" y2="156"/>
+ <line x1="132" y1="132" x2="132" y2="156"/>
+ <line x1="158" y1="132" x2="158" y2="156"/>
+ <line x1="184" y1="132" x2="184" y2="156"/>
+ <line x1="210" y1="132" x2="210" y2="156"/>
+ </g>
+ <!-- Chip pins — bottom side -->
+ <g stroke="#388bfd" stroke-width="2" opacity="0.6">
+ <line x1="80" y1="356" x2="80" y2="380"/>
+ <line x1="106" y1="356" x2="106" y2="380"/>
+ <line x1="132" y1="356" x2="132" y2="380"/>
+ <line x1="158" y1="356" x2="158" y2="380"/>
+ <line x1="184" y1="356" x2="184" y2="380"/>
+ <line x1="210" y1="356" x2="210" y2="380"/>
+ </g>
+ <!-- A100 label inside chip -->
+ <text x="138" y="262"
+ text-anchor="middle"
+ font-family="'SF Mono','Fira Code','Consolas',monospace"
+ font-size="22" font-weight="700" letter-spacing="1"
+ fill="#388bfd" opacity="0.8">A100</text>
+ <text x="138" y="284"
+ text-anchor="middle"
+ font-family="'SF Mono','Fira Code','Consolas',monospace"
+ font-size="10" font-weight="400" letter-spacing="1"
+ fill="#1f6feb" opacity="0.6">80GB · PCIe</text>
+
+ <!-- Neural network nodes (AI) — right of the chip, bridging to center -->
+ <!-- Layer 1 (input) nodes — x≈290 -->
+ <g filter="url(#aiGlow)">
+ <circle cx="295" cy="160" r="10" fill="url(#aiGrad)" opacity="0.85"/>
+ <circle cx="295" cy="220" r="10" fill="url(#aiGrad)" opacity="0.85"/>
+ <circle cx="295" cy="280" r="10" fill="url(#aiGrad)" opacity="0.85"/>
+ <circle cx="295" cy="340" r="10" fill="url(#aiGrad)" opacity="0.85"/>
+ </g>
+ <!-- Layer 2 (hidden) nodes — x≈360 -->
+ <g filter="url(#aiGlow)">
+ <circle cx="370" cy="140" r="12" fill="url(#aiGrad)" opacity="0.90"/>
+ <circle cx="370" cy="200" r="12" fill="url(#aiGrad)" opacity="0.90"/>
+ <circle cx="370" cy="260" r="12" fill="url(#aiGrad)" opacity="0.90"/>
+ <circle cx="370" cy="320" r="12" fill="url(#aiGrad)" opacity="0.90"/>
+ <circle cx="370" cy="380" r="12" fill="url(#aiGrad)" opacity="0.90"/>
+ </g>
+ <!-- Layer 3 (output/bridge) nodes — x≈435 -->
+ <g filter="url(#aiGlow)">
+ <circle cx="435" cy="180" r="9" fill="url(#aiGrad)" opacity="0.75"/>
+ <circle cx="435" cy="256" r="9" fill="url(#aiGrad)" opacity="0.75"/>
+ <circle cx="435" cy="332" r="9" fill="url(#aiGrad)" opacity="0.75"/>
+ </g>
+ <!-- Neural connections layer 1 → 2 -->
+ <g stroke="#7c3aed" stroke-width="1" fill="none" opacity="0.28">
+ <line x1="305" y1="160" x2="358" y2="140"/>
+ <line x1="305" y1="160" x2="358" y2="200"/>
+ <line x1="305" y1="160" x2="358" y2="260"/>
+ <line x1="305" y1="220" x2="358" y2="140"/>
+ <line x1="305" y1="220" x2="358" y2="200"/>
+ <line x1="305" y1="220" x2="358" y2="260"/>
+ <line x1="305" y1="220" x2="358" y2="320"/>
+ <line x1="305" y1="280" x2="358" y2="200"/>
+ <line x1="305" y1="280" x2="358" y2="260"/>
+ <line x1="305" y1="280" x2="358" y2="320"/>
+ <line x1="305" y1="280" x2="358" y2="380"/>
+ <line x1="305" y1="340" x2="358" y2="260"/>
+ <line x1="305" y1="340" x2="358" y2="320"/>
+ <line x1="305" y1="340" x2="358" y2="380"/>
+ </g>
+ <!-- Neural connections layer 2 → 3 -->
+ <g stroke="#8b5cf6" stroke-width="1" fill="none" opacity="0.32">
+ <line x1="382" y1="140" x2="426" y2="180"/>
+ <line x1="382" y1="200" x2="426" y2="180"/>
+ <line x1="382" y1="200" x2="426" y2="256"/>
+ <line x1="382" y1="260" x2="426" y2="180"/>
+ <line x1="382" y1="260" x2="426" y2="256"/>
+ <line x1="382" y1="260" x2="426" y2="332"/>
+ <line x1="382" y1="320" x2="426" y2="256"/>
+ <line x1="382" y1="320" x2="426" y2="332"/>
+ <line x1="382" y1="380" x2="426" y2="332"/>
+ </g>
+ <!-- Chip → neural network trace -->
+ <g stroke="#388bfd" stroke-width="1.5" fill="none" opacity="0.35">
+ <polyline points="252,252 275,252 275,220 285,220"/>
+ <polyline points="252,300 275,300 275,340 285,340"/>
+ </g>
+
+ <!-- "AI" label -->
+ <text x="138" y="110"
+ text-anchor="middle"
+ font-family="'SF Mono','Fira Code','Consolas',monospace"
+ font-size="11" font-weight="400" letter-spacing="2"
+ fill="#7c3aed" opacity="0.6">NEURAL · AI</text>
+
+ <!-- ═══════════════════════════════════════════════════════════
+ CENTER PANEL: π symbol with BSD daemon horns
+ Centred at x=768
+ ═══════════════════════════════════════════════════════════ -->
+
+ <!-- Stronger GPU grid in center zone only -->
+ <g opacity="0.18" stroke="#388bfd" stroke-width="1">
+ <line x1="512" y1="128" x2="1024" y2="128"/>
+ <line x1="512" y1="192" x2="1024" y2="192"/>
+ <line x1="512" y1="256" x2="1024" y2="256"/>
+ <line x1="512" y1="320" x2="1024" y2="320"/>
+ <line x1="512" y1="384" x2="1024" y2="384"/>
+ <line x1="576" y1="80" x2="576" y2="450"/>
+ <line x1="640" y1="80" x2="640" y2="450"/>
+ <line x1="704" y1="80" x2="704" y2="450"/>
+ <line x1="768" y1="80" x2="768" y2="450"/>
+ <line x1="832" y1="80" x2="832" y2="450"/>
+ <line x1="896" y1="80" x2="896" y2="450"/>
+ <line x1="960" y1="80" x2="960" y2="450"/>
+ </g>
+ <!-- Circuit nodes in center -->
+ <g fill="#1f6feb" opacity="0.38">
+ <circle cx="576" cy="128" r="4"/>
+ <circle cx="640" cy="192" r="4"/>
+ <circle cx="896" cy="128" r="4"/>
+ <circle cx="960" cy="192" r="4"/>
+ <circle cx="576" cy="384" r="4"/>
+ <circle cx="640" cy="320" r="4"/>
+ <circle cx="896" cy="384" r="4"/>
+ <circle cx="960" cy="320" r="4"/>
</g>
+ <!-- PCB traces in center zone -->
+ <g stroke="#1f6feb" stroke-width="2" fill="none" opacity="0.25">
+ <polyline points="576,128 576,192 640,192"/>
+ <polyline points="960,128 960,192 896,192"/>
+ <polyline points="576,384 576,320 640,320"/>
+ <polyline points="960,384 960,320 896,320"/>
+ </g>
+
+ <!-- Circular glow ring behind π -->
+ <ellipse cx="768" cy="300" rx="185" ry="165"
+ fill="none" stroke="#1f6feb" stroke-width="1.5" opacity="0.13"/>
+ <ellipse cx="768" cy="300" rx="210" ry="188"
+ fill="none" stroke="#1f6feb" stroke-width="0.5" opacity="0.07"/>
<!--
- FreeBSD BSD daemon horns — bolded and widened so they read clearly
- at small (avatar) sizes. Both horns are symmetric bezier curves.
- The horns sit above the Pi crossbar and flare outward at the tips.
+ FreeBSD daemon horns — above the π crossbar, symmetric bezier curves.
+ Base at x≈718/818 (centred at 768).
-->
- <!-- Left horn: base at (206,172), tip curls left to (170,108) -->
- <path d="M 206 172
- C 204 155 198 138 188 122
- C 180 108 166 100 170 108
- C 174 116 180 130 182 146
- C 184 158 190 168 198 172 Z"
+ <!-- Left horn -->
+ <path d="M 718 172
+ C 716 152 708 132 696 114
+ C 686 98 668 90 673 100
+ C 678 110 686 126 688 144
+ C 690 158 698 170 708 174 Z"
fill="url(#bsdGrad)" filter="url(#hornGlow)"/>
- <!-- Left horn inner highlight -->
- <path d="M 204 168 C 200 150 192 132 184 118 C 178 108 172 104 174 112"
- stroke="#ffaaaa" stroke-width="2" fill="none" opacity="0.45"/>
-
- <!-- Right horn: base at (306,172), tip curls right to (342,108) — symmetric -->
- <path d="M 306 172
- C 308 155 314 138 324 122
- C 332 108 346 100 342 108
- C 338 116 332 130 330 146
- C 328 158 322 168 314 172 Z"
+ <path d="M 716 168 C 710 148 700 128 692 112 C 686 100 678 96 681 106"
+ stroke="#ffaaaa" stroke-width="2" fill="none" opacity="0.4"/>
+ <!-- Right horn -->
+ <path d="M 818 172
+ C 820 152 828 132 840 114
+ C 850 98 868 90 863 100
+ C 858 110 850 126 848 144
+ C 846 158 838 170 828 174 Z"
fill="url(#bsdGrad)" filter="url(#hornGlow)"/>
- <!-- Right horn inner highlight -->
- <path d="M 308 168 C 312 150 320 132 328 118 C 334 108 340 104 338 112"
- stroke="#ffaaaa" stroke-width="2" fill="none" opacity="0.45"/>
+ <path d="M 820 168 C 826 148 836 128 844 112 C 850 100 858 96 855 106"
+ stroke="#ffaaaa" stroke-width="2" fill="none" opacity="0.4"/>
<!--
- π (Pi) symbol — centrepiece representing Pi.dev coding agent.
- Both legs use consistent cubic bezier strokes for visual symmetry.
- Crossbar: rounded rectangle across the top.
- Left leg: curves left-and-down, flaring at the foot.
- Right leg: mirrors the left leg, symmetric.
+ π (Pi) symbol — centred at x=768.
+ Crossbar: y=188–210. Legs extend to y≈400.
-->
<g filter="url(#glow)">
- <!-- Top crossbar -->
- <rect x="152" y="192" width="208" height="22" rx="11" fill="url(#piGrad)"/>
-
- <!-- Left leg — cubic bezier: starts below crossbar left side, sweeps down and curves at foot -->
- <path d="M 186 214
- C 186 270 178 320 166 354
- C 160 372 158 384 164 392
- C 170 400 182 400 190 392
- C 196 385 198 370 200 354
- C 210 302 214 256 214 214 Z"
+ <!-- Crossbar -->
+ <rect x="628" y="188" width="280" height="24" rx="12" fill="url(#piGrad)"/>
+ <!-- Left leg -->
+ <path d="M 666 212
+ C 666 272 656 328 642 366
+ C 634 386 630 400 638 410
+ C 646 420 660 420 670 410
+ C 678 402 680 386 684 366
+ C 696 308 702 260 702 212 Z"
fill="url(#piGrad)"/>
-
- <!-- Right leg — symmetric to left leg -->
- <path d="M 326 214
- C 326 270 334 320 346 354
- C 352 372 354 384 348 392
- C 342 400 330 400 322 392
- C 316 385 314 370 312 354
- C 302 302 298 256 298 214 Z"
+ <!-- Right leg — symmetric -->
+ <path d="M 870 212
+ C 870 272 880 328 894 366
+ C 902 386 906 400 898 410
+ C 890 420 876 420 866 410
+ C 858 402 856 386 852 366
+ C 840 308 834 260 834 212 Z"
fill="url(#piGrad)"/>
</g>
- <!-- Subtle glow ring behind π for depth -->
- <ellipse cx="256" cy="308" rx="128" ry="108" fill="none" stroke="#1f6feb" stroke-width="1" opacity="0.15"/>
+ <!-- ═══════════════════════════════════════════════════════════
+ RIGHT PANEL: tmux terminal window
+ x: 1086–1500
+ ═══════════════════════════════════════════════════════════ -->
+
+ <!-- Terminal window frame -->
+ <rect x="1096" y="80" width="400" height="352" rx="10"
+ fill="#0d1117" stroke="#30363d" stroke-width="1.5" opacity="0.95"/>
- <!-- Bottom label — HYPERSTACK in readable grey -->
- <text x="256" y="458"
+ <!-- Title bar -->
+ <rect x="1096" y="80" width="400" height="32" rx="10"
+ fill="#161b22"/>
+ <rect x="1096" y="96" width="400" height="16" fill="#161b22"/>
+ <!-- Traffic-light dots -->
+ <circle cx="1118" cy="96" r="6" fill="#ff5f56" opacity="0.9"/>
+ <circle cx="1138" cy="96" r="6" fill="#ffbd2e" opacity="0.9"/>
+ <circle cx="1158" cy="96" r="6" fill="#27c93f" opacity="0.9"/>
+ <!-- Title text -->
+ <text x="1296" y="101"
text-anchor="middle"
font-family="'SF Mono','Fira Code','Consolas',monospace"
- font-size="18" font-weight="600" letter-spacing="4"
+ font-size="11" fill="#6e7681">hyperstack.wg1 — zsh</text>
+
+ <!-- Terminal content area -->
+ <rect x="1096" y="112" width="400" height="284" fill="#0d1117" opacity="0.95"/>
+
+ <!-- Terminal lines — simulated shell session -->
+ <g font-family="'SF Mono','Fira Code','Consolas',monospace" font-size="11" fill="#c9d1d9">
+ <!-- Prompt + command 1 -->
+ <text x="1112" y="140">
+ <tspan fill="#3fb950">❯</tspan>
+ <tspan fill="#8b949e"> ruby hyperstack.rb create-both</tspan>
+ </text>
+ <text x="1112" y="158" fill="#6e7681"> Creating VM hyperstack1 (A100)...</text>
+ <text x="1112" y="174" fill="#6e7681"> Creating VM hyperstack2 (A100)...</text>
+ <text x="1112" y="190" fill="#3fb950"> vllm-ready ✓ wireguard-ok ✓</text>
+
+ <!-- Prompt + command 2 -->
+ <text x="1112" y="214">
+ <tspan fill="#3fb950">❯</tspan>
+ <tspan fill="#8b949e"> pi --model hyperstack1/nemotron</tspan>
+ </text>
+ <text x="1112" y="230" fill="#6e7681"> Connecting to hyperstack1.wg1…</text>
+ <text x="1112" y="246" fill="#58a6ff"> » Hello! Ready to code with you.</text>
+
+ <!-- Prompt + command 3 -->
+ <text x="1112" y="270">
+ <tspan fill="#3fb950">❯</tspan>
+ <tspan fill="#8b949e"> pi --model hyperstack2/qwen3</tspan>
+ </text>
+ <text x="1112" y="286" fill="#6e7681"> Connecting to hyperstack2.wg1…</text>
+ <text x="1112" y="302" fill="#58a6ff"> » I am Qwen3-Coder, let's build!</text>
+
+ <!-- Blinking cursor -->
+ <rect x="1112" y="322" width="8" height="14" fill="#58a6ff" opacity="0.8"/>
+ </g>
+
+ <!-- tmux status bar at bottom of terminal -->
+ <rect x="1096" y="396" width="400" height="24" rx="0" fill="url(#tmuxBar)"/>
+ <rect x="1096" y="408" width="400" height="12" fill="url(#tmuxBar)"/>
+ <rect x="1096" y="396" width="400" height="24"
+ fill="none" stroke="#30363d" stroke-width="0.5" opacity="0.5"/>
+
+ <!-- tmux status bar text -->
+ <!-- Left: session + windows -->
+ <rect x="1096" y="396" width="68" height="24" fill="#3fb950" opacity="0.18"/>
+ <text x="1104" y="412"
+ font-family="'SF Mono','Fira Code','Consolas',monospace"
+ font-size="10" font-weight="600" fill="#3fb950">[hyperstack]</text>
+ <text x="1170" y="412"
+ font-family="'SF Mono','Fira Code','Consolas',monospace"
+ font-size="10" fill="#6e7681">0:pi* 1:ssh 2:logs</text>
+ <!-- Right: clock -->
+ <text x="1486" y="412"
+ text-anchor="end"
+ font-family="'SF Mono','Fira Code','Consolas',monospace"
+ font-size="10" fill="#6e7681">21:03</text>
+
+ <!-- Terminal window bottom rounded finish -->
+ <rect x="1096" y="420" width="400" height="12" rx="10"
+ fill="#161b22" stroke="#30363d" stroke-width="1.5" opacity="0.6"/>
+
+ <!-- ═══════════════════════════════════════════════════════════
+ BOTTOM LABELS — full width
+ ═══════════════════════════════════════════════════════════ -->
+ <text x="768" y="470"
+ text-anchor="middle"
+ font-family="'SF Mono','Fira Code','Consolas',monospace"
+ font-size="22" font-weight="700" letter-spacing="6"
fill="#8b949e">HYPERSTACK</text>
- <!-- Subtitle — GPU · PI · FREEBSD, light enough to be legible at rendered size -->
- <text x="256" y="480"
+ <text x="768" y="494"
text-anchor="middle"
font-family="'SF Mono','Fira Code','Consolas',monospace"
- font-size="11" font-weight="400" letter-spacing="2"
- fill="#6e7681">GPU · PI · FREEBSD</text>
+ font-size="11" font-weight="400" letter-spacing="3"
+ fill="#6e7681">GPU · PI.DEV · FREEBSD · AI · TMUX</text>
</svg>