blog: republish 2 edited posts, dossier thumbnails 4-6, new post broker-pattern
Content: shipping-this-site + init-gating-gpu-readiness get their edited-workshop bodies (from the
NAS Published/ pass) - site frontmatter (hero/heroAlt) kept, only prose replaced.
Dossiers 004-006 (gpu-as-code, global-infra-modernisation, network-automation-fleet) were all
rendering the same generic pipeline thumbnail - added 3 tailored DossierThumb motifs (gpu die +
passthrough lanes, region globe, switch-fleet grid) via a new diagram: frontmatter field. Also
closed the dead-space gap above the tag row on short-argument cards with a faint on-theme grid
fill (::before, masked fade) instead of a flat void.
New post: broker-pattern ('An agent should never hold the key it's using') - SECURITY SERIES 02,
between secret-zero and workload-least-privilege. Hero de-watermarked from the NAS source (resized
to the calibrated 1600x1073 coordinate space, Jacobi-diffused out the Nano Banana sparkle at its
known center) via scripts/dewatermark-broker-pattern.mjs (reusable for the next 3 drafts). New
diagram/broker-pattern.svg in the house light-card palette. Inline top-of-body hero stripped per
the astro-static-site skill guard (frontmatter hero: is now the only render path).
This commit is contained in:
@@ -37,6 +37,58 @@ const { kind = "generic" } = Astro.props;
|
||||
<circle cx="310" cy="45" r="12" class="nd nd--m" />
|
||||
<circle cx="310" cy="135" r="12" class="nd nd--m" />
|
||||
</>
|
||||
) : kind === "gpu" ? (
|
||||
<>
|
||||
{/* GPU die with passthrough lanes feeding two edge nodes */}
|
||||
<rect x="150" y="55" width="100" height="70" rx="6" class="nd nd--c" />
|
||||
<line x1="164" y1="55" x2="164" y2="40" class="ln ln--c" />
|
||||
<line x1="186" y1="55" x2="186" y2="40" class="ln ln--c" />
|
||||
<line x1="208" y1="55" x2="208" y2="40" class="ln ln--m" />
|
||||
<line x1="230" y1="55" x2="230" y2="40" class="ln ln--m" />
|
||||
<rect x="172" y="72" width="56" height="36" rx="3" fill="none" stroke="rgba(63,186,245,0.4)" stroke-width="1" />
|
||||
<text x="200" y="94" text-anchor="middle" class="tx">GPU</text>
|
||||
<line x1="250" y1="70" x2="330" y2="55" class="ln ln--c" />
|
||||
<line x1="250" y1="110" x2="330" y2="125" class="ln ln--m" />
|
||||
<rect x="330" y="40" width="30" height="26" rx="4" class="nd nd--dim" />
|
||||
<rect x="330" y="112" width="30" height="26" rx="4" class="nd nd--m" />
|
||||
<circle cx="290" cy="62" r="2.5" class="dot dot--c pulse" />
|
||||
<circle cx="290" cy="117" r="2.5" class="dot dot--m pulse-slow" />
|
||||
</>
|
||||
) : kind === "globe" ? (
|
||||
<>
|
||||
{/* globe of regions — a modernised multi-region estate */}
|
||||
<circle cx="200" cy="90" r="52" fill="none" stroke="rgba(63,186,245,0.35)" stroke-width="1" />
|
||||
<ellipse cx="200" cy="90" rx="52" ry="20" fill="none" stroke="rgba(63,186,245,0.25)" stroke-width="1" />
|
||||
<ellipse cx="200" cy="90" rx="20" ry="52" fill="none" stroke="rgba(63,186,245,0.25)" stroke-width="1" />
|
||||
<line x1="148" y1="90" x2="252" y2="90" stroke="rgba(63,186,245,0.25)" stroke-width="1" />
|
||||
<circle cx="176" cy="62" r="4" class="nd nd--c" />
|
||||
<circle cx="228" cy="66" r="4" class="nd nd--m" />
|
||||
<circle cx="182" cy="118" r="4" class="nd nd--dim" />
|
||||
<circle cx="222" cy="114" r="4" class="nd nd--c" />
|
||||
<circle cx="200" cy="90" r="3" class="dot dot--c pulse" />
|
||||
<line x1="176" y1="62" x2="200" y2="90" class="ln ln--c" />
|
||||
<line x1="228" y1="66" x2="200" y2="90" class="ln ln--m" />
|
||||
<line x1="182" y1="118" x2="200" y2="90" class="ln ln--c" />
|
||||
<line x1="222" y1="114" x2="200" y2="90" class="ln ln--m" />
|
||||
</>
|
||||
) : kind === "network-fleet" ? (
|
||||
<>
|
||||
{/* fleet of switches, single-pane managed */}
|
||||
<rect x="170" y="30" width="60" height="24" rx="4" class="nd nd--c" />
|
||||
<text x="200" y="47" text-anchor="middle" class="tx">NCM</text>
|
||||
<line x1="200" y1="54" x2="200" y2="70" class="ln ln--c" />
|
||||
<line x1="80" y1="70" x2="320" y2="70" class="ln ln--c" />
|
||||
<line x1="100" y1="70" x2="100" y2="120" class="ln ln--dim" />
|
||||
<line x1="160" y1="70" x2="160" y2="120" class="ln ln--dim" />
|
||||
<line x1="240" y1="70" x2="240" y2="120" class="ln ln--m" />
|
||||
<line x1="300" y1="70" x2="300" y2="120" class="ln ln--m" />
|
||||
<rect x="82" y="120" width="36" height="18" rx="3" class="nd nd--dim" />
|
||||
<rect x="142" y="120" width="36" height="18" rx="3" class="nd nd--dim" />
|
||||
<rect x="222" y="120" width="36" height="18" rx="3" class="nd nd--m" />
|
||||
<rect x="282" y="120" width="36" height="18" rx="3" class="nd nd--m" />
|
||||
<circle cx="100" cy="70" r="2.5" class="dot dot--c pulse" />
|
||||
<circle cx="300" cy="70" r="2.5" class="dot dot--m pulse-slow" />
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
{/* pipeline — commits flowing through gates to a fleet */}
|
||||
|
||||
@@ -79,12 +79,26 @@ const dossierNo = String(index).padStart(3, "0");
|
||||
}
|
||||
|
||||
.dossier__body {
|
||||
position: relative;
|
||||
padding: 24px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 12px;
|
||||
flex: 1;
|
||||
}
|
||||
/* a faint on-theme grid fills the idle space above the chips/meta (the
|
||||
margin-top:auto gap on shorter "argument" text) instead of a flat void */
|
||||
.dossier__body::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
inset: 68px 24px 64px;
|
||||
background-image:
|
||||
linear-gradient(var(--grid-line) 1px, transparent 1px),
|
||||
linear-gradient(90deg, var(--grid-line) 1px, transparent 1px);
|
||||
background-size: 22px 22px;
|
||||
mask-image: linear-gradient(180deg, black, transparent 85%);
|
||||
pointer-events: none;
|
||||
}
|
||||
.dossier__title {
|
||||
margin: 0;
|
||||
font-family: var(--font-display);
|
||||
|
||||
Reference in New Issue
Block a user