From 65ba1ec7dce46c5a387d59a5602863e0edb35657 Mon Sep 17 00:00:00 2001 From: Jonathon Wright Date: Fri, 3 Jul 2026 18:58:49 +1000 Subject: [PATCH] facelift: fleet constellation hero + Bat-Computer type/token layer Chakra Petch site-wide (300-700) + JetBrains Mono variable, all self-hosted (CSP zero-external holds). Token layer gains the mock-exact text tiers, glass panel, cyan-tinted borders, glows, tighter radii; light 'blueprint' variants included. New Constellation.astro: the six real nodes as IC chips on dual-trace PCB paths (cyan out / magenta back, dasharray packets), radar ring on the cave hub, vias at bends - pure SVG + scoped CSS keyframes, full reduced-motion fallback. Hero rebuilt: scrim stack + masked grid over the board art, two-line gradient nameplate, typing bar cycling six real fleet facts via the external site.js (facts from src/data/fleet.ts), scroll indicator. Facts wrap, never clip. --- public/fonts/JetBrains-Mono-OFL.txt | 93 +++++++++ public/fonts/chakra-petch-300.woff2 | Bin 0 -> 10008 bytes public/fonts/chakra-petch-400.woff2 | Bin 0 -> 9756 bytes public/fonts/chakra-petch-500.woff2 | Bin 0 -> 9956 bytes public/fonts/jetbrains-mono-var.woff2 | Bin 0 -> 31432 bytes public/site.js | 44 ++++- shot.mjs | 42 ++++ src/components/Constellation.astro | 243 +++++++++++++++++++++++ src/components/Hero.astro | 273 +++++++++++++++++++++----- src/data/fleet.ts | 20 ++ src/styles/global.css | 30 +++ src/styles/tokens.css | 52 ++++- 12 files changed, 736 insertions(+), 61 deletions(-) create mode 100644 public/fonts/JetBrains-Mono-OFL.txt create mode 100644 public/fonts/chakra-petch-300.woff2 create mode 100644 public/fonts/chakra-petch-400.woff2 create mode 100644 public/fonts/chakra-petch-500.woff2 create mode 100644 public/fonts/jetbrains-mono-var.woff2 create mode 100644 shot.mjs create mode 100644 src/components/Constellation.astro create mode 100644 src/data/fleet.ts diff --git a/public/fonts/JetBrains-Mono-OFL.txt b/public/fonts/JetBrains-Mono-OFL.txt new file mode 100644 index 0000000..5ceee00 --- /dev/null +++ b/public/fonts/JetBrains-Mono-OFL.txt @@ -0,0 +1,93 @@ +Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/public/fonts/chakra-petch-300.woff2 b/public/fonts/chakra-petch-300.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..55a86ab4a685719af142101b5e5b59bb22ef4636 GIT binary patch literal 10008 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 literal 0 HcmV?d00001 diff --git a/public/fonts/chakra-petch-400.woff2 b/public/fonts/chakra-petch-400.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f7a66022dde0ab1d862d202807f5988453a9bdf4 GIT binary patch literal 9756 zcmV+%Cga(6Pew8T0RR91045v&4gdfE0AKt7042l#0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/public/fonts/jetbrains-mono-var.woff2 b/public/fonts/jetbrains-mono-var.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4d09cda4a4c3f4c08ae253dd8a9c5133a89b31b7 GIT binary patch literal 31432 zcmV)AK*YayPew8T0RR910D8y(6951J0W!b<0D4*g0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/public/site.js b/public/site.js index 1ecbf80..75ccda6 100644 --- a/public/site.js +++ b/public/site.js @@ -38,9 +38,51 @@ }); } + // --- Hero typing loop (fleet facts) ------------------------------------- + // Facts arrive via a data attribute (no inline JS → script-src 'self' holds). + // Reduced motion or JS-off: the first fact renders statically from markup. + var factBox = document.getElementById("fleet-fact"); + var factText = document.getElementById("fleet-fact-text"); + var reduced = window.matchMedia("(prefers-reduced-motion: reduce)").matches; + if (factBox && factText && !reduced) { + var facts; + try { + facts = JSON.parse(factBox.dataset.facts || "[]"); + } catch (e) { + facts = []; + } + if (facts.length > 1) { + var fi = 0; // current fact + var ci = facts[0].length; // start fully typed (matches SSR markup) + var deleting = false; + var tick = function () { + var fact = facts[fi]; + if (!deleting && ci === fact.length) { + // hold at end of fact, then start the next + deleting = true; + setTimeout(tick, 3200); + return; + } + if (deleting) { + // swap instantly to the next fact (clean cut, like a terminal) + deleting = false; + fi = (fi + 1) % facts.length; + ci = 0; + factText.textContent = ""; + setTimeout(tick, 260); + return; + } + ci++; + factText.textContent = facts[fi].slice(0, ci); + setTimeout(tick, 45); + }; + setTimeout(tick, 3200); + } + } + // Scroll reveals, hero entrance, backdrop parallax, scroll-progress bar, // nav underline and button springs all live in the Motion layer // (src/scripts/anim.ts → bundled /_astro/*.js). This file owns only the - // pre-paint theme so it can stay a tiny blocking script. + // pre-paint theme + the typing loop so it stays a tiny blocking script. }); })(); diff --git a/shot.mjs b/shot.mjs new file mode 100644 index 0000000..fc19363 --- /dev/null +++ b/shot.mjs @@ -0,0 +1,42 @@ +import { chromium } from "playwright"; +import { preview } from "astro"; + +const server = await preview({ server: { port: 4399 } }); +const base = "http://localhost:4399"; +const browser = await chromium.launch(); + +async function shot(name, { theme = "dark", scrollY = 0, selector = null, path = "/", fullPage = false } = {}) { + const page = await browser.newPage({ + viewport: { width: 1440, height: 900 }, + deviceScaleFactor: 2, + }); + await page.addInitScript((t) => { + try { localStorage.setItem("theme", t); } catch {} + }, theme); + await page.goto(base + path, { waitUntil: "networkidle" }); + await page.evaluate( + (t) => document.documentElement.setAttribute("data-theme", t), + theme + ); + if (scrollY) { + await page.evaluate((y) => window.scrollTo(0, y), scrollY); + await page.waitForTimeout(400); + } + await page.waitForTimeout(2700); + if (selector) { + const el = await page.$(selector); + await el.scrollIntoViewIfNeeded(); + await page.waitForTimeout(2700); + await el.screenshot({ path: `/tmp/site-${name}.png` }); + } else { + await page.screenshot({ path: `/tmp/site-${name}.png`, fullPage }); + } + await page.close(); + console.log("wrote /tmp/site-" + name + ".png"); +} + +await shot("light-hero", { theme: "light" }); +await shot("dark-hero", { theme: "dark" }); + +await browser.close(); +await server.stop(); diff --git a/src/components/Constellation.astro b/src/components/Constellation.astro new file mode 100644 index 0000000..157bd15 --- /dev/null +++ b/src/components/Constellation.astro @@ -0,0 +1,243 @@ +--- +// The fleet constellation — 6 real nodes as IC chips on PCB traces. +// Pure SVG + scoped CSS keyframes (zero JS; reduced-motion turns every animation off). +// Anatomy per the design handoff: each route is TWO parallel traces (offset ±(2,-3)) — +// one carries a cyan packet outbound, the other a magenta packet inbound. Packets are +// stroke-dasharray 9/127 sliding via stroke-dashoffset. Hub = cave (56px chip, radar ring). +--- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + cave + 139 apps · reconciling + + + + + + + alfred + + + + + + + robin + + + + + + kate + standby · 33 apps known + + + + + + wgirl + + + + + + elfastc + + + diff --git a/src/components/Hero.astro b/src/components/Hero.astro index f9c8d87..f3f3ade 100644 --- a/src/components/Hero.astro +++ b/src/components/Hero.astro @@ -1,70 +1,176 @@ --- import { site } from "../data/site"; import { cvAvailable } from "../lib/assets"; +import { fleetFacts } from "../data/fleet"; +import Constellation from "./Constellation.astro"; ---
+ + + + + +
-

{site.role}

+
+

{site.role}

-

- {site.name} -

+

+ {site.name} +

-

{site.positioning}

+

{site.positioning}

-

- {site.tagline.map((t, i) => ( - - {i > 0 && } - {t} - - ))} -

+

+ {site.tagline.map((t, i) => ( + + {i > 0 && } + {t} + + ))} +

-
- View Projects - {cvAvailable && ( - - Download CV - - )} - Contact +
+ View Projects → + {cvAvailable && ( + + Download CV + + )} + Contact +
+ + +
+ ~/{site.handle} ▸ + {fleetFacts[0]} +
+ +
+ +
+
+ +
diff --git a/src/data/fleet.ts b/src/data/fleet.ts new file mode 100644 index 0000000..782d986 --- /dev/null +++ b/src/data/fleet.ts @@ -0,0 +1,20 @@ +// The fleet, as data — drives the hero constellation + typing facts. +// REAL numbers, captured 2026-07-03; refresh from the fleet at rebuild +// (kubectl get applications -n argocd | wc -l · kubectl get cnp -A | wc -l per cluster). + +// Facts the hero typing bar cycles through. Real, verbatim — no invented numbers. +export const fleetFacts = [ + "6 single-node Talos clusters · 0 SSH daemons · every machine is a document", + "139 ArgoCD Applications reconciled from one hub", + "170+ CiliumNetworkPolicies fleet-wide — every namespace starts at default-deny", + "zero open inbound ports — the origin dials out", + "*.bztmon.org — a Let's Encrypt wildcard per cluster · DNS-01 · auto-renewed", + "~140 pods running right now, reconciled by git", +] as const; + +// Node roster for the constellation (positions live in the SVG component). +export const fleetNodes = { + hub: { name: "cave", caption: "139 apps · reconciling" }, + satellites: ["alfred", "robin", "kate", "wgirl", "elfastc"], + standbyCaption: "standby · 33 apps known", // kate +} as const; diff --git a/src/styles/global.css b/src/styles/global.css index dd7a37b..03fb026 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -18,6 +18,36 @@ font-display: swap; src: url("/fonts/chakra-petch-700.woff2") format("woff2"); } +/* Facelift: Chakra Petch becomes the site-wide face (300–700), body included. */ +@font-face { + font-family: "Chakra Petch"; + font-style: normal; + font-weight: 300; + font-display: swap; + src: url("/fonts/chakra-petch-300.woff2") format("woff2"); +} +@font-face { + font-family: "Chakra Petch"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("/fonts/chakra-petch-400.woff2") format("woff2"); +} +@font-face { + font-family: "Chakra Petch"; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url("/fonts/chakra-petch-500.woff2") format("woff2"); +} +/* JetBrains Mono — one variable file covers 400–700 (nav, chips, eyebrows, receipt). */ +@font-face { + font-family: "JetBrains Mono"; + font-style: normal; + font-weight: 400 700; + font-display: swap; + src: url("/fonts/jetbrains-mono-var.woff2") format("woff2"); +} /* ---- Base ---------------------------------------------------------------- */ diff --git a/src/styles/tokens.css b/src/styles/tokens.css index 07a9453..fdc5d68 100644 --- a/src/styles/tokens.css +++ b/src/styles/tokens.css @@ -29,13 +29,13 @@ /* Grid / topology motif */ --grid-line: rgba(148, 163, 184, 0.06); - /* Fonts — system stacks (zero external requests) + one self-hosted display face. */ - --font-sans: "Inter var", ui-sans-serif, system-ui, -apple-system, "Segoe UI", - Roboto, Helvetica, Arial, sans-serif; - --font-mono: ui-monospace, "JetBrains Mono", "Cascadia Code", "SF Mono", + /* Fonts — ALL self-hosted (zero external requests). Facelift pairing: + Chakra Petch (300–700) is the site-wide face, display AND body; + JetBrains Mono carries the terminal register (nav, chips, eyebrows, receipt). */ + --font-sans: "Chakra Petch", ui-sans-serif, system-ui, -apple-system, + "Segoe UI", Roboto, Helvetica, Arial, sans-serif; + --font-mono: "JetBrains Mono", ui-monospace, "Cascadia Code", "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; - /* Display face — Chakra Petch (self-hosted woff2, OFL). Used ONLY on the hero - name + section titles; body stays in --font-sans for readability. */ --font-display: "Chakra Petch", var(--font-sans); /* Fluid type scale */ @@ -58,13 +58,33 @@ --space-8: 4.5rem; --space-9: 7rem; - /* Layout */ + /* Layout — facelift geometry: tighter radii (3–4 chips, 6 buttons, 8–12 cards) */ --measure: 68rem; - --radius: 14px; - --radius-sm: 9px; + --radius: 12px; + --radius-sm: 8px; + --radius-btn: 6px; + --radius-chip: 4px; --ring: 0 0 0 1px var(--border); --shadow: 0 24px 60px rgba(0, 0, 0, 0.45); --ease: cubic-bezier(0.22, 1, 0.36, 1); + + /* Facelift: text tiers (mock-exact) */ + --text-strong: #eef5fd; /* headings */ + --text-body-strong: #dbe6f4; + /* --text (#e7edf4) / --text-dim / --text-faint keep existing consumers working */ + --text-secondary: #8fa2bd; + --text-label: #7e8ba1; + + /* Facelift: glass panels + cyan-tinted borders + glows */ + --panel: rgba(13, 19, 34, 0.72); + --panel-solid: #0d1322; + --panel-blur: blur(10px); + --border-accent: rgba(63, 186, 245, 0.14); + --border-accent-hover: rgba(63, 186, 245, 0.5); + --border-magenta: rgba(232, 121, 249, 0.18); + --glow-num: 0 0 12px rgba(63, 186, 245, 0.6); + --glow-card: 0 0 32px rgba(63, 186, 245, 0.14); + --glow-card-magenta: 0 0 32px rgba(232, 121, 249, 0.12); } [data-theme="light"] { @@ -96,4 +116,18 @@ --grid-line: rgba(15, 23, 42, 0.05); --shadow: 0 24px 60px rgba(15, 23, 42, 0.12); + + /* Facelift tiers, blueprint-adjusted for light */ + --text-strong: #0b1422; + --text-body-strong: #1d2a3d; + --text-secondary: #3d4d63; + --text-label: #4a5a72; + --panel: rgba(255, 255, 255, 0.78); + --panel-solid: #ffffff; + --border-accent: rgba(12, 143, 206, 0.2); + --border-accent-hover: rgba(12, 143, 206, 0.55); + --border-magenta: rgba(192, 38, 211, 0.22); + --glow-num: 0 0 12px rgba(12, 143, 206, 0.35); + --glow-card: 0 0 32px rgba(12, 143, 206, 0.1); + --glow-card-magenta: 0 0 32px rgba(192, 38, 211, 0.08); }