521cc2f066
Heroes optimised to 1600px webp from the prepped batch; diagrams authored to the house palette; dates set to publish day.
83 lines
7.6 KiB
XML
83 lines
7.6 KiB
XML
<svg xmlns="http://www.w3.org/2000/svg" width="1180" height="480" viewBox="0 0 1180 480" role="img" aria-label="One hostname, two audiences. Human browsers converge on a single identity-provider proxy outpost which fronts the registry web UI and the browser IDE, each bound to the same outpost. Machine clients - node container runtimes and CI - split off at the gateway and hit the registry's v2 path directly with their own scoped read-only credential, never touching the SSO layer.">
|
|
<rect width="1180" height="480" fill="#ffffff"></rect>
|
|
|
|
<!-- title -->
|
|
<text x="60" y="46" font-family="ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, sans-serif" font-size="23" font-weight="700" fill="#0e1726">Route by audience, not by app</text>
|
|
<text x="61" y="70" font-family="ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, sans-serif" font-size="13.5" fill="#64748b">one hostname — the gateway splits people from machines before auth is even asked</text>
|
|
|
|
<!-- the gateway split -->
|
|
<rect x="80" y="200" width="170" height="80" rx="14" fill="#ffffff" stroke="#0e1726" stroke-width="2"></rect>
|
|
<text x="165" y="234" text-anchor="middle" font-family="ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, sans-serif" font-size="14.5" font-weight="700" fill="#0e1726">gateway</text>
|
|
<text x="165" y="256" text-anchor="middle" font-family="ui-monospace, 'SF Mono', Menlo, monospace" font-size="10.5" fill="#64748b">one hostname, split routes</text>
|
|
|
|
<!-- human path (cyan, upper) -->
|
|
<g stroke="#0c8fce" stroke-width="2.4" fill="none">
|
|
<path d="M 250 220 C 310 190, 330 170, 388 152"></path>
|
|
<polygon points="384,146 400,148 388,161" fill="#0c8fce" stroke="none"></polygon>
|
|
</g>
|
|
<text x="300" y="164" font-family="ui-monospace, 'SF Mono', Menlo, monospace" font-size="11.5" font-weight="700" fill="#0c8fce">catch-all →</text>
|
|
|
|
<rect x="400" y="110" width="230" height="86" rx="14" fill="#0c8fce" fill-opacity="0.06" stroke="#0c8fce" stroke-width="2.4"></rect>
|
|
<text x="515" y="140" text-anchor="middle" font-family="ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, sans-serif" font-size="14.5" font-weight="700" fill="#0c8fce">proxy outpost</text>
|
|
<text x="515" y="162" text-anchor="middle" font-family="ui-monospace, 'SF Mono', Menlo, monospace" font-size="10.5" fill="#0e1726">the doorman — one instance</text>
|
|
<text x="515" y="180" text-anchor="middle" font-family="ui-monospace, 'SF Mono', Menlo, monospace" font-size="10.5" fill="#64748b">every human path signs in here</text>
|
|
|
|
<!-- apps behind the doorman -->
|
|
<g stroke="#0c8fce" stroke-width="2" fill="none">
|
|
<line x1="630" y1="140" x2="716" y2="128"></line>
|
|
<polygon points="714,122 728,126 716,135" fill="#0c8fce" stroke="none"></polygon>
|
|
<line x1="630" y1="170" x2="716" y2="184"></line>
|
|
<polygon points="716,177 728,186 714,190" fill="#0c8fce" stroke="none"></polygon>
|
|
</g>
|
|
|
|
<rect x="730" y="100" width="220" height="56" rx="12" fill="#7c3aed" fill-opacity="0.05" stroke="#7c3aed" stroke-width="1.8"></rect>
|
|
<text x="840" y="124" text-anchor="middle" font-family="ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, sans-serif" font-size="13" font-weight="700" fill="#7c3aed">registry web UI</text>
|
|
<text x="840" y="144" text-anchor="middle" font-family="ui-monospace, 'SF Mono', Menlo, monospace" font-size="10.5" fill="#64748b">a nameplate at the desk</text>
|
|
|
|
<rect x="730" y="168" width="220" height="56" rx="12" fill="#7c3aed" fill-opacity="0.05" stroke="#7c3aed" stroke-width="1.8"></rect>
|
|
<text x="840" y="192" text-anchor="middle" font-family="ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, sans-serif" font-size="13" font-weight="700" fill="#7c3aed">browser IDE</text>
|
|
<text x="840" y="212" text-anchor="middle" font-family="ui-monospace, 'SF Mono', Menlo, monospace" font-size="10.5" fill="#64748b">WebSockets included — no carve-outs</text>
|
|
|
|
<!-- humans arriving -->
|
|
<rect x="80" y="110" width="120" height="52" rx="12" fill="#ffffff" stroke="#0c8fce" stroke-width="1.8"></rect>
|
|
<text x="140" y="133" text-anchor="middle" font-family="ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, sans-serif" font-size="12.5" font-weight="700" fill="#0c8fce">people</text>
|
|
<text x="140" y="152" text-anchor="middle" font-family="ui-monospace, 'SF Mono', Menlo, monospace" font-size="10" fill="#64748b">interactive · phishable</text>
|
|
<g stroke="#0c8fce" stroke-width="2" fill="none">
|
|
<line x1="165" y1="162" x2="165" y2="200"></line>
|
|
<polygon points="159,198 165,210 171,198" fill="#0c8fce" stroke="none"></polygon>
|
|
</g>
|
|
|
|
<!-- machine path (magenta, lower) -->
|
|
<rect x="80" y="330" width="120" height="52" rx="12" fill="#ffffff" stroke="#c026d3" stroke-width="1.8"></rect>
|
|
<text x="140" y="353" text-anchor="middle" font-family="ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, sans-serif" font-size="12.5" font-weight="700" fill="#c026d3">machines</text>
|
|
<text x="140" y="372" text-anchor="middle" font-family="ui-monospace, 'SF Mono', Menlo, monospace" font-size="10" fill="#64748b">runtimes · headless</text>
|
|
<g stroke="#c026d3" stroke-width="2" fill="none">
|
|
<line x1="165" y1="330" x2="165" y2="292"></line>
|
|
<polygon points="159,294 165,282 171,294" fill="#c026d3" stroke="none"></polygon>
|
|
</g>
|
|
|
|
<g stroke="#c026d3" stroke-width="2.4" fill="none">
|
|
<path d="M 250 262 C 340 300, 420 322, 508 336"></path>
|
|
<polygon points="504,329 520,338 506,349" fill="#c026d3" stroke="none"></polygon>
|
|
</g>
|
|
<text x="330" y="318" font-family="ui-monospace, 'SF Mono', Menlo, monospace" font-size="11.5" font-weight="700" fill="#c026d3">/v2 → direct</text>
|
|
|
|
<rect x="520" y="310" width="250" height="86" rx="14" fill="#c026d3" fill-opacity="0.05" stroke="#c026d3" stroke-width="2.2"></rect>
|
|
<text x="645" y="340" text-anchor="middle" font-family="ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, sans-serif" font-size="14" font-weight="700" fill="#c026d3">registry /v2 — the dock</text>
|
|
<text x="645" y="362" text-anchor="middle" font-family="ui-monospace, 'SF Mono', Menlo, monospace" font-size="10.5" fill="#0e1726">scoped read-only credential</text>
|
|
<text x="645" y="380" text-anchor="middle" font-family="ui-monospace, 'SF Mono', Menlo, monospace" font-size="10.5" fill="#64748b">in each node's registry config</text>
|
|
|
|
<!-- never-crosses note -->
|
|
<line x1="400" y1="240" x2="950" y2="240" stroke="#64748b" stroke-width="1.4" stroke-dasharray="4 6"></line>
|
|
<text x="675" y="258" text-anchor="middle" font-family="ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, sans-serif" font-size="11.5" fill="#64748b">the two paths never cross — neither door weakens for the other's traffic</text>
|
|
|
|
<!-- native-OIDC aside -->
|
|
<rect x="980" y="310" width="140" height="86" rx="12" fill="#ffffff" stroke="#64748b" stroke-width="1.4" stroke-dasharray="5 5"></rect>
|
|
<text x="1050" y="338" text-anchor="middle" font-family="ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, sans-serif" font-size="11.5" font-weight="700" fill="#64748b">native OIDC apps</text>
|
|
<text x="1050" y="358" text-anchor="middle" font-family="ui-monospace, 'SF Mono', Menlo, monospace" font-size="10" fill="#64748b">wire directly —</text>
|
|
<text x="1050" y="374" text-anchor="middle" font-family="ui-monospace, 'SF Mono', Menlo, monospace" font-size="10" fill="#64748b">no outpost needed</text>
|
|
|
|
<!-- footer -->
|
|
<text x="60" y="452" font-family="ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, sans-serif" font-size="12" fill="#64748b">app N+1 behind the doorman costs a provider object and a route — a nameplate at the desk, never a second desk</text>
|
|
</svg>
|