From a3bac1e84d5d50a70335ab8a1a55a646245d020a Mon Sep 17 00:00:00 2001 From: kerthcet Date: Sun, 30 Aug 2026 17:16:20 +0100 Subject: [PATCH 1/5] optimize the homepage Signed-off-by: kerthcet --- .github/workflows/refresh-stars.yaml | 30 ++++ assets/js/custom.js | 55 +++++- assets/scss/common/_custom.scss | 204 +++++++++++++++++++++- assets/scss/common/_variables-custom.scss | 9 +- config/_default/hugo.toml | 12 ++ config/_default/module.toml | 175 ++++++++++--------- config/_default/params.toml | 6 +- data/projects.yaml | 43 +++++ functions/stars.mjs | 73 ++++++++ hugo_stats.json | 33 +--- layouts/_default/home.html | 161 ++++++++--------- layouts/partials/footer/footer.html | 16 ++ static/images/logo.png | Bin 0 -> 4799 bytes 13 files changed, 607 insertions(+), 210 deletions(-) create mode 100644 .github/workflows/refresh-stars.yaml create mode 100644 data/projects.yaml create mode 100644 functions/stars.mjs create mode 100644 layouts/partials/footer/footer.html create mode 100644 static/images/logo.png diff --git a/.github/workflows/refresh-stars.yaml b/.github/workflows/refresh-stars.yaml new file mode 100644 index 0000000..0f84b85 --- /dev/null +++ b/.github/workflows/refresh-stars.yaml @@ -0,0 +1,30 @@ +name: Refresh Stars + +# The homepage project cards read their GitHub star counts at build time, so a +# rebuild is the only thing needed to refresh them. Netlify only rebuilds on +# push, which is why this pokes a build hook on a schedule instead. +# +# Setup: Netlify → Site configuration → Build & deploy → Build hooks → add a +# hook on `main`, then store its URL as the NETLIFY_BUILD_HOOK repository +# secret. + +on: + schedule: + # 03:00 UTC daily. GitHub may delay scheduled runs when the shared runner + # pool is busy, so treat this as "once a day", not "at 03:00 sharp". + - cron: "0 3 * * *" + workflow_dispatch: + +jobs: + rebuild: + runs-on: ubuntu-latest + steps: + - name: Trigger a Netlify build + env: + BUILD_HOOK: ${{ secrets.NETLIFY_BUILD_HOOK }} + run: | + if [ -z "$BUILD_HOOK" ]; then + echo "::error::NETLIFY_BUILD_HOOK is not set; see the comment in this workflow." + exit 1 + fi + curl --fail --silent --show-error -X POST -d '{}' "$BUILD_HOOK" diff --git a/assets/js/custom.js b/assets/js/custom.js index c5525d0..172d67e 100644 --- a/assets/js/custom.js +++ b/assets/js/custom.js @@ -1 +1,54 @@ -// Put your custom JS code here +// Put your custom JS code here + +// Refresh the homepage star counts from /.netlify/functions/stars. +// +// The counts are already rendered at build time, so this only corrects them +// between rebuilds. Every failure path leaves the build-time values in place: +// running `hugo server` without `netlify dev` has no function to call, and a +// visitor may be offline. +// +// Cards are deliberately not re-sorted. This runs after first paint, so +// reordering would visibly shuffle them; the daily rebuild fixes the order. +(function () { + function format(count) { + return count >= 1000 ? (count / 1000).toFixed(1) + "k" : String(count); + } + + function refreshStars() { + var badges = document.querySelectorAll(".feature-stars[data-repo]"); + if (!badges.length) { + return; + } + + fetch("/.netlify/functions/stars") + .then(function (response) { + if (!response.ok) { + throw new Error("stars endpoint responded " + response.status); + } + return response.json(); + }) + .then(function (stars) { + for (var i = 0; i < badges.length; i++) { + var badge = badges[i]; + var count = stars[badge.dataset.repo.toLowerCase()]; + if (typeof count !== "number") { + continue; + } + + badge.querySelector("[data-stars-count]").textContent = format(count); + badge.title = count + " stars on GitHub"; + // Reveals the badge on cards whose build-time lookup came back empty. + badge.classList.remove("feature-stars-pending"); + } + }) + .catch(function () { + // Keep the build-time counts. + }); + } + + if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", refreshStars, { once: true }); + } else { + refreshStars(); + } +})(); diff --git a/assets/scss/common/_custom.scss b/assets/scss/common/_custom.scss index f7c1361..54b5903 100644 --- a/assets/scss/common/_custom.scss +++ b/assets/scss/common/_custom.scss @@ -1 +1,203 @@ -// Put your custom SCSS code here +// Put your custom SCSS code here + +// Shrink the top-right navbar icons (social links + color mode toggler) +#socialMenu .social-link svg, +#buttonColorMode svg { + width: 20px; + height: 20px; +} + +// Keep the footer at the bottom of the viewport on short pages +// (the homepage does not fill the screen otherwise). +body { + display: flex; + flex-direction: column; + min-height: 100vh; +} + +// Flex items default to `min-width: auto`, so wide content (code blocks, +// tables) could stretch the page instead of scrolling inside its own box +// now that `body` is a flex container. +body > * { + min-width: 0; +} + +.footer { + margin-top: auto; + + // Doks sizes footer items at $font-size-base (16px) from `md` up, which is + // heavy for a copyright line under an 18px body. No media query needed to + // override it: same specificity, and this file is imported last. + li { + font-size: 0.8125rem; + } +} + +// Keep the homepage headline on a single line at every viewport width by +// scaling it with the viewport instead of wrapping. +.home h1.home-title { + // `clamp()` passes through to CSS; Sass would try to evaluate `min()` + // itself and fail on the mixed rem/vw units. + font-size: clamp(1.25rem, 3.4vw, 3rem); + white-space: nowrap; + // Doks pulls the home headline up by 1rem, which eats into the hero padding. + margin-top: 0; + margin-bottom: 1.75rem; +} + +.home .lead { + max-width: 42rem; + margin-inline: auto; +} + +// The headline carries the top of the page alone, so give it room to sit in. +// The slack comes out of the dead band above the footer, which the short +// homepage leaves over anyway. +.home { + .section.container-fluid { + // Scaled, not fixed: the headline itself scales with the viewport, and a + // flat 5.5rem left 88px of air above a 20px headline on a phone. + padding-top: clamp(2.5rem, 7vw, 5.5rem); + padding-bottom: clamp(2rem, 5.5vw, 4.5rem); + } + + .section-features { + padding-top: 0; + } +} + +// Brand mark in the navbar (top left), next to the site title +.navbar-brand { + display: inline-flex; + align-items: center; + gap: 0.5rem; + + &::before { + content: ""; + display: inline-block; + flex: 0 0 auto; + width: 32px; + height: 32px; + background: url("images/logo.png") no-repeat center / contain; + border-radius: 50%; + } +} + +// Project cards on the homepage. +// +// Flex rather than grid or Bootstrap's row/col: seven cards never fill a row +// evenly, and flex-wrap centres the short final row instead of leaving a hole +// on one side. The explicit basis keeps every card the same width, which +// `flex-grow` would not — the last row would stretch wider than the rows above. +$feature-gap: 1.25rem; + +.feature-grid { + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: $feature-gap; +} + +.feature-card { + flex: 0 0 100%; +} + +@include media-breakpoint-up(sm) { + .feature-card { + // Two per row: subtract the one gap between them. + flex-basis: calc(50% - #{$feature-gap * 0.5}); + } +} + +@include media-breakpoint-up(lg) { + .feature-card { + // Four per row: three gaps spread across four cards. + flex-basis: calc(25% - #{$feature-gap * 0.75}); + } +} + +.feature-card { + padding: 1.5rem; + // A warm tint rather than neutral grey: at these low alphas it barely reads + // as colour, but it stops the cards from looking like grey wireframes. + background: rgba($primary, 0.02); + border: 1px solid rgba($primary, 0.14); + border-radius: 0.75rem; + transition: border-color 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease; + + h2 { + // Doks puts a 2rem top margin on every heading, which leaves a gap + // between the card's top edge and its title. + margin-top: 0; + margin-bottom: 0.5rem; + display: flex; + align-items: baseline; + gap: 0.5rem; + font-size: 1.125rem; + + a { + color: inherit; + text-decoration: none; + } + } + + p { + margin-bottom: 0; + font-size: 1rem; + opacity: 0.78; + } + + &:hover { + border-color: rgba($primary, 0.6); + box-shadow: 0 6px 20px rgba($primary, 0.12); + transform: translateY(-2px); + + h2 a { + color: $primary; + } + } +} + +// The donation call to action. Deliberately unboxed: a panel here competed with +// the project cards for attention and left a large empty band across the page. +// A plain centred line separates it from the grid on whitespace alone. +.feature-cta { + margin-top: 2.25rem; + text-align: center; + + .feature-cta-title { + display: block; + font-weight: 600; + color: $primary; + } + + p { + margin: 0.125rem 0 0; + font-size: 0.9375rem; + opacity: 0.7; + } +} + +// GitHub star count, right-aligned on the card's title line +.feature-stars { + display: inline-flex; + align-items: center; + gap: 0.25rem; + margin-left: auto; + flex: 0 0 auto; + font-size: 0.8125rem; + font-weight: 500; + opacity: 0.65; + + svg { + // Nudge the star onto the text baseline + margin-bottom: -0.125rem; + } +} + +// No count yet: the build-time lookup failed and assets/js/custom.js has not +// filled this in (or cannot reach the endpoint). Hide it rather than show a +// bare star with no number. +.feature-stars-pending { + display: none; +} diff --git a/assets/scss/common/_variables-custom.scss b/assets/scss/common/_variables-custom.scss index 7302032..e6c285a 100644 --- a/assets/scss/common/_variables-custom.scss +++ b/assets/scss/common/_variables-custom.scss @@ -1,2 +1,7 @@ -// Put your custom SCSS variables here -$primary: #F2A884; +// Put your custom SCSS variables here + +// The brand orange, sampled from the logo. The previous value (#F2A884) was a +// pale tint of it that only managed 1.96:1 contrast against white — well below +// the 4.5:1 WCAG AA needs for text — so links and accents barely registered and +// the site read as monochrome. This hits 4.56:1. +$primary: #d93c0d; diff --git a/config/_default/hugo.toml b/config/_default/hugo.toml index 7987c73..c7966ff 100644 --- a/config/_default/hugo.toml +++ b/config/_default/hugo.toml @@ -48,6 +48,18 @@ defaultContentLanguageInSubdir = false [caches.getjson] dir = ":cacheDir/:project" maxAge = -1 # "30m" + # GitHub star counts (resources.GetRemote). Kept below the 24h interval of + # the refresh-stars workflow so the daily build always refetches, while + # ad-hoc deploys still reuse the cache instead of spending the 60 + # requests/hour unauthenticated API budget. + [caches.getresource] + dir = ":cacheDir/:project" + maxAge = "12h" + +# Allow reading GITHUB_TOKEN so CI can raise the GitHub API rate limit when +# fetching star counts. Repeats Hugo's defaults, which this setting replaces. +[security.funcs] + getenv = ['^HUGO_', '^CI$', '^GITHUB_TOKEN$'] [taxonomies] contributor = "contributors" diff --git a/config/_default/module.toml b/config/_default/module.toml index d82136f..9e5022e 100644 --- a/config/_default/module.toml +++ b/config/_default/module.toml @@ -1,87 +1,88 @@ -# mounts -## archetypes -[[mounts]] - source = "node_modules/@thulite/doks-core/archetypes" - target = "archetypes" - -[[mounts]] - source = "archetypes" - target = "archetypes" - -## assets -[[mounts]] - source = "node_modules/@thulite/core/assets" - target = "assets" - -[[mounts]] - source = "node_modules/@thulite/images/assets" - target = "assets" - -[[mounts]] - source = "node_modules/@thulite/doks-core/assets" - target = "assets" - -[[mounts]] - source = "node_modules/@tabler/icons/icons" - target = "assets/svgs/tabler-icons" - -[[mounts]] - source = "assets" - target = "assets" - -## content -[[mounts]] - source = "content" - target = "content" - -## data -[[mounts]] - source = "node_modules/@thulite/doks-core/data" - target = "data" - -[[mounts]] - source = "data" - target = "data" - -## i18n -[[mounts]] - source = "node_modules/@thulite/doks-core/i18n" - target = "i18n" - -[[mounts]] - source = "i18n" - target = "i18n" - -## layouts -[[mounts]] - source = "node_modules/@thulite/core/layouts" - target = "layouts" - -[[mounts]] - source = "node_modules/@thulite/seo/layouts" - target = "layouts" - -[[mounts]] - source = "node_modules/@thulite/images/layouts" - target = "layouts" - -[[mounts]] - source = "node_modules/@thulite/doks-core/layouts" - target = "layouts" - -[[mounts]] - source = "node_modules/@thulite/inline-svg/layouts" - target = "layouts" - -[[mounts]] - source = "layouts" - target = "layouts" - -## static -[[mounts]] - source = "node_modules/@thulite/doks-core/static" - target = "static" - -[[mounts]] - source = "static" - target = "static" +# mounts +## archetypes +[[mounts]] + source = "node_modules/@thulite/doks-core/archetypes" + target = "archetypes" + +[[mounts]] + source = "archetypes" + target = "archetypes" + +## assets +[[mounts]] + source = "node_modules/@thulite/core/assets" + target = "assets" + +[[mounts]] + source = "node_modules/@thulite/images/assets" + target = "assets" + +[[mounts]] + source = "node_modules/@thulite/doks-core/assets" + target = "assets" + +[[mounts]] + source = "node_modules/@tabler/icons/icons" + target = "assets/svgs/tabler-icons" + +[[mounts]] + source = "assets" + target = "assets" + +## content +[[mounts]] + source = "content" + target = "content" + +## data +[[mounts]] + source = "node_modules/@thulite/doks-core/data" + target = "data" + +[[mounts]] + source = "data" + target = "data" + +## i18n +[[mounts]] + source = "node_modules/@thulite/doks-core/i18n" + target = "i18n" + +[[mounts]] + source = "i18n" + target = "i18n" + +## layouts +[[mounts]] + source = "layouts" + target = "layouts" + +[[mounts]] + source = "node_modules/@thulite/core/layouts" + target = "layouts" + +[[mounts]] + source = "node_modules/@thulite/seo/layouts" + target = "layouts" + +[[mounts]] + source = "node_modules/@thulite/images/layouts" + target = "layouts" + +[[mounts]] + source = "node_modules/@thulite/doks-core/layouts" + target = "layouts" + +[[mounts]] + source = "node_modules/@thulite/inline-svg/layouts" + target = "layouts" + + +## static +[[mounts]] + source = "node_modules/@thulite/doks-core/static" + target = "static" + +[[mounts]] + source = "static" + target = "static" diff --git a/config/_default/params.toml b/config/_default/params.toml index 2f53f2b..d8eed48 100644 --- a/config/_default/params.toml +++ b/config/_default/params.toml @@ -1,6 +1,6 @@ # Hugo -title = "My Docs" -description = "Congrats on setting up a new Doks project!" +title = "InftyAI" +description = "Exploring the ∞ possibilities of AI" images = ["cover.png"] # mainSections @@ -60,7 +60,7 @@ mainSections = ["docs"] # UX headerBar = false # true (default) or false - backgroundDots = true # true (default) or false + backgroundDots = false # true (default) or false # Homepage sectionFooter = false # false (default) or true diff --git a/data/projects.yaml b/data/projects.yaml new file mode 100644 index 0000000..e248397 --- /dev/null +++ b/data/projects.yaml @@ -0,0 +1,43 @@ +# Homepage project cards. `repo` is used to look up the GitHub star count at +# build time; cards are rendered in descending order of stars, with `cta` last. +projects: + - name: Awesome-LLMOps + repo: InftyAI/Awesome-LLMOps + url: https://awesome-llmops.inftyai.com + description: "🎉 An awesome & curated list of best LLMOps tools." + + - name: llmaz + repo: InftyAI/llmaz + url: https://llmaz.inftyai.com/ + description: "☸️ Easy, advanced inference platform for large language models on Kubernetes." + + - name: Alphatrion + repo: InftyAI/alphatrion + url: https://github.com/InftyAI/alphatrion + description: "⚒️ The open-source framework for LLM experiments and agent orchestration." + + - name: AMRS + repo: InftyAI/amrs + url: https://github.com/InftyAI/amrs + description: "🧬 The adaptive model routing system for exploration and exploitation." + + - name: SandD + repo: InftyAI/sandd + url: https://github.com/InftyAI/sandd + description: "🤖 A lightweight sandbox daemon for secure agent execution in isolated environments." + + - name: Nebula + repo: InftyAI/Nebula + url: https://github.com/InftyAI/Nebula + description: "🎮 The control plane for GPUaaS." + + - name: MLX + repo: InftyAI/mlx + url: https://github.com/InftyAI/mlx + description: "🦀 Rust bindings for Apple's MLX framework." + +# Rendered below the grid as plain text — not a project, and not a link, so it +# has no `repo` (no star count) and no `url`. +cta: + name: "✨ Donation Plan" + description: "🚀 Got a brilliant idea? Let's build something extraordinary together." diff --git a/functions/stars.mjs b/functions/stars.mjs new file mode 100644 index 0000000..5513a9c --- /dev/null +++ b/functions/stars.mjs @@ -0,0 +1,73 @@ +// Current GitHub star counts for the InftyAI org, keyed by lowercased +// `owner/repo`. +// +// The homepage renders star counts at build time; this endpoint lets the +// browser refresh them without waiting for a rebuild. It exists as a function +// rather than a direct browser fetch for three reasons: it is same-origin, so +// the `connect-src 'self'` CSP in netlify.toml needs no loosening; it can hold +// a token server-side; and the CDN caches its response, so GitHub sees roughly +// one request an hour regardless of traffic. + +const ORG = "InftyAI"; + +// One org-wide request instead of one per project, so adding a project to +// data/projects.yaml needs no change here. 100 is the page-size ceiling; the +// org would need to outgrow that before pagination mattered. +const UPSTREAM = `https://api.github.com/orgs/${ORG}/repos?per_page=100&type=public`; + +export default async () => { + const headers = { + Accept: "application/vnd.github+json", + "User-Agent": "inftyai-website", + }; + + // Optional: raises the rate limit from 60 to 5,000 requests an hour. Set it + // in Netlify's environment variables if the unauthenticated budget ever runs + // short. + const token = process.env.GITHUB_TOKEN; + if (token) { + headers.Authorization = `Bearer ${token}`; + } + + let repos; + try { + const upstream = await fetch(UPSTREAM, { headers }); + if (!upstream.ok) { + return failed(`GitHub responded ${upstream.status}`); + } + repos = await upstream.json(); + } catch (err) { + return failed(err.message); + } + + // Lowercased because the casing GitHub reports does not always match the + // slugs in data/projects.yaml (`InftyAI/SandD` vs `InftyAI/sandd`). + const stars = {}; + for (const repo of repos) { + stars[repo.full_name.toLowerCase()] = repo.stargazers_count; + } + + return new Response(JSON.stringify(stars), { + headers: { + "Content-Type": "application/json", + // Set explicitly so the catch-all `Cache-Control` in netlify.toml cannot + // pin this response for a year. + "Cache-Control": "public, max-age=600", + "Netlify-CDN-Cache-Control": + "public, s-maxage=3600, stale-while-revalidate=86400", + }, + }); +}; + +// The page falls back to its build-time counts on any failure, so the body is +// only ever read by a human debugging. `no-store` keeps a transient GitHub +// outage from being cached for an hour. +function failed(reason) { + return new Response(JSON.stringify({ error: reason }), { + status: 503, + headers: { + "Content-Type": "application/json", + "Cache-Control": "no-store", + }, + }); +} diff --git a/hugo_stats.json b/hugo_stats.json index a7a6bcb..2d0366d 100644 --- a/hugo_stats.json +++ b/hugo_stats.json @@ -17,7 +17,6 @@ "head", "header", "html", - "img", "input", "kbd", "label", @@ -43,25 +42,16 @@ "classes": [ "DocSearch-Label", "active", - "bg-dots", "blog", "blog-header", - "blur-up", - "border-0", "btn", "btn-close", - "btn-cta", - "btn-lg", "btn-link", - "btn-primary", "card", "card-body", "card-list", "categories", "col-lg-10", - "col-lg-12", - "col-lg-5", - "col-lg-8", "col-lg-9", "col-md-12", "col-xl-8", @@ -78,6 +68,11 @@ "d-md-none", "d-none", "error404", + "feature-card", + "feature-cta", + "feature-cta-title", + "feature-grid", + "feature-stars", "flex-column", "flex-grow-1", "flex-lg-row", @@ -87,33 +82,24 @@ "form-control-lg", "fs-5", "h-auto", - "h4", "h5", "home", + "home-title", "icon", "icon-tabler", "icon-tabler-brand-discord", "icon-tabler-brand-github", - "icon-tabler-brand-slack", "icon-tabler-brand-x", "icon-tabler-menu", "icon-tabler-search", "icon-tabler-x", - "icons-tabler-outline", - "img-fluid", - "img-simple", "justify-content-between", "justify-content-center", - "justify-content-start", - "lazyloaded", - "lead", "list", "list-inline", "list-inline-item", "list-view", - "ls-is-cached", "mb-0", - "mb-2", "me-2", "me-auto", "me-lg-3", @@ -131,7 +117,6 @@ "ms-3", "ms-auto", "mt-3", - "mt-n3", "mx-2", "mx-auto", "my-3", @@ -151,12 +136,9 @@ "order-lg-4", "p-0", "p-2", - "pb-3", "privacy", "px-0", - "px-4", "query-no-results", - "rounded-circle", "row", "search-form", "search-input", @@ -169,7 +151,6 @@ "section", "section-features", "section-md", - "section-sm", "single", "social-link", "status", @@ -180,8 +161,6 @@ "taxonomy", "text-center", "text-decoration-none", - "text-lg-end", - "text-lg-start", "text-muted", "text-reset", "title", diff --git a/layouts/_default/home.html b/layouts/_default/home.html index 66cbbce..4dd84e7 100644 --- a/layouts/_default/home.html +++ b/layouts/_default/home.html @@ -1,26 +1,12 @@ {{ define "main" }} -
-
- Alt_text -
-
- -
-
-
-

{{ .Title }}

-
-
-

{{ .Params.lead | safeHTML }}

- Source - On GitHub - {{ .Content }} -
-
+{{/* No `py-*` utility: Bootstrap marks those `!important`, so the hero spacing + could not then be set from _custom.scss. */}} +
+

{{ .Title }}

+ {{ with .Params.lead -}} +

{{ . | safeHTML }}

+ {{ end -}} + {{ .Content }}
{{ end }} @@ -31,81 +17,78 @@

{{ .Title }}

{{ end -}} {{ if eq $.Site.Language.LanguageName "English" }} -
-
-
- -
-

Awesome-LLMOps

-

🎉 An awesome & curated list of best LLMOps tools. -

-
- -
- - logo - -

☸️ Easy, advanced inference platform for large language models on - Kubernetes.

-
- -
- - logo - -

⚒️ The open-source framework for LLM experiments and agent orchestration.

-
- -
-

AMRS

-

🧬 The adaptive model routing system for exploration and exploitation. -

-
-
-

SandD

-

🤖 A lightweight sandbox daemon for secure agent execution in isolated environments. -

-
- -
-

Nebula

-

🎮 The control plane for GPUaaS. -

-
- -
-

MLX

-

🦀 Rust bindings for Apple's MLX framework. -

-
+{{/* Look up the star count for each project, then rank by it. A failed + lookup (offline, rate limited) leaves that card without a star badge + rather than failing the build. */}} +{{ $headers := dict "Accept" "application/vnd.github+json" }} +{{ with getenv "GITHUB_TOKEN" -}} + {{ $headers = merge $headers (dict "Authorization" (printf "Bearer %s" .)) }} +{{ end -}} +{{ $ranked := slice }} +{{ range site.Data.projects.projects -}} + {{ $stars := -1 }} + {{ $url := printf "https://api.github.com/repos/%s" .repo }} + {{ with try (resources.GetRemote $url (dict "headers" $headers)) -}} + {{ with .Err -}} + {{ warnf "projects: no star count for %s (%s)" $url . }} + {{ else with .Value -}} + {{ $stars = (unmarshal .Content).stargazers_count | default 0 }} + {{ else -}} + {{ warnf "projects: no response for %s" $url }} + {{ end -}} + {{ end -}} + {{ $ranked = $ranked | append (merge . (dict "stars" $stars)) }} +{{ end -}} +{{ $cards := sort $ranked "stars" "desc" }} -
-

✨ Donation - Plan

-

🚀 Got a brilliant idea? Let's build something extraordinary together. -

+
+
+ {{/* A CSS grid rather than Bootstrap's row/col: it needs no breakpoint + classes, no `h-100`, and no gutter overrides (Doks ships neither the + `.g-*` utilities nor a non-zero `--bs-gutter-y`). */}} +
+ {{ range $cards -}} +
+

+ {{ .name }} + {{/* Rendered for every project, even when the build-time + lookup failed, so assets/js/custom.js can fill it in + from /.netlify/functions/stars. A card with no count + yet is hidden by `.feature-stars-pending` until then. */}} + {{ if .repo -}} + {{ $stars := .stars -}} + {{ $known := and $stars (ge $stars 0) -}} + + {{ if $known }}{{ if ge $stars 1000 }}{{ printf "%.1fk" (div (float $stars) 1000) }}{{ else }}{{ $stars }}{{ end }}{{ end }} + + {{ end -}} +

+

{{ .description }}

+ {{ end -}} +
+ {{/* An invitation, not a project — kept out of the grid so it does not + read as one more repository. */}} + {{ with site.Data.projects.cta -}} +
+ {{ .name }} +

{{ .description }}

+ {{ end -}}
{{ end }} {{ end }} {{ define "sidebar-footer" }} -{{ if site.Params.doks.sectionFooter -}} -
-
-
-

Start building with Doks today

- {{ i18n "get-started" }} -
-
-
-{{ end -}} -{{ end }} \ No newline at end of file +{{ end }} diff --git a/layouts/partials/footer/footer.html b/layouts/partials/footer/footer.html new file mode 100644 index 0000000..fc03b26 --- /dev/null +++ b/layouts/partials/footer/footer.html @@ -0,0 +1,16 @@ +{{/* Overrides the Doks footer, which splits into a left-aligned column for the + footer menu and a right-aligned one for `site.Params.footer`. Only the menu + is populated here, so the two columns are collapsed into one centered list. + Both sources are still rendered, so setting `params.footer` later works. */}} +
+
+
    + {{ range .Site.Menus.footer -}} +
  • {{ .Name }}
  • + {{- end }} + {{- with site.Params.footer }} +
  • {{ . | safeHTML }}
  • + {{- end }} +
+
+
diff --git a/static/images/logo.png b/static/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6f07aeaa337e43536a381975069fc4209834d3ba GIT binary patch literal 4799 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 TMxQqU8^R`6&kd#Pd=mc+?EAUP literal 0 HcmV?d00001 From fdfe355e7d0e593b8aaa4d3864e056fc05487872 Mon Sep 17 00:00:00 2001 From: kerthcet Date: Sun, 30 Aug 2026 17:32:34 +0100 Subject: [PATCH 2/5] optimize Signed-off-by: kerthcet --- assets/scss/common/_custom.scss | 15 +++++++++------ layouts/_default/home.html | 9 +++------ layouts/index.html | 1 - 3 files changed, 12 insertions(+), 13 deletions(-) delete mode 100644 layouts/index.html diff --git a/assets/scss/common/_custom.scss b/assets/scss/common/_custom.scss index 54b5903..1ddcbcd 100644 --- a/assets/scss/common/_custom.scss +++ b/assets/scss/common/_custom.scss @@ -45,11 +45,6 @@ body > * { margin-bottom: 1.75rem; } -.home .lead { - max-width: 42rem; - margin-inline: auto; -} - // The headline carries the top of the page alone, so give it room to sit in. // The slack comes out of the dead band above the footer, which the short // homepage leaves over anyway. @@ -187,12 +182,20 @@ $feature-gap: 1.25rem; flex: 0 0 auto; font-size: 0.8125rem; font-weight: 500; - opacity: 0.65; svg { + // A gold star, as GitHub draws it. The muting sits on the number instead of + // the whole badge, so the colour is not washed out by an opacity of its own. + color: #e3a008; // Nudge the star onto the text baseline margin-bottom: -0.125rem; } + + // The count stays in the body colour: yellow text this small would be hard to + // read on white, and the star alone carries the colour. + [data-stars-count] { + opacity: 0.65; + } } // No count yet: the build-time lookup failed and assets/js/custom.js has not diff --git a/layouts/_default/home.html b/layouts/_default/home.html index 4dd84e7..0995d15 100644 --- a/layouts/_default/home.html +++ b/layouts/_default/home.html @@ -3,9 +3,6 @@ could not then be set from _custom.scss. */}}

{{ .Title }}

- {{ with .Params.lead -}} -

{{ . | safeHTML }}

- {{ end -}} {{ .Content }}
{{ end }} @@ -61,10 +58,10 @@

{{ $known := and $stars (ge $stars 0) -}} + {{/* Filled rather than outlined: at 14px a solid star + carries the colour, an outline barely shows it. */}} , i.e. who X credits when the site is shared. + # Was "getdoks", the theme author's handle, left over from the starter. + twitter = "InftyAI" # Doks (@thulite/doks-core) [doks] diff --git a/config/production/hugo.toml b/config/production/hugo.toml index 25b6683..553ebd6 100644 --- a/config/production/hugo.toml +++ b/config/production/hugo.toml @@ -1,2 +1,11 @@ -# Overrides for production environment -baseurl = "/" +# Overrides for production environment + +# No `baseurl` override here on purpose. The Doks starter shipped `baseurl = "/"`, +# which silently beat the real URL in config/_default and left every absolute URL +# broken in production: `og:url` and `og:image` came out relative (Open Graph +# requires absolute), and robots.txt advertised a relative `Sitemap:`. The +# canonical value lives in config/_default/hugo.toml and should stay the only +# place it is written down. +# +# config/next keeps `baseurl = "/"` deliberately — branch and preview deploys +# have their own hostnames and must not claim the production URL. diff --git a/layouts/sitemap.xml b/layouts/sitemap.xml new file mode 100644 index 0000000..7ac87c9 --- /dev/null +++ b/layouts/sitemap.xml @@ -0,0 +1,30 @@ +{{/* Overrides @thulite/seo/layouts/sitemap.xml, which ranges over `.Pages`. On the + home page that is the *child* pages only, so the homepage itself — the most + important URL on this site — was left out of /sitemap.xml. Ranging over + `site.Pages` and filtering by kind includes it while still keeping the empty + taxonomy list pages (categories, tags, contributors) out. */}} +{{ printf "" | safeHTML }} + + {{ $pages := where site.Pages "Kind" "in" (slice "home" "section" "page") }} + {{ range where $pages "Sitemap.Disable" "ne" true }} + {{- if .Permalink -}} + + {{ .Permalink }}{{ if not .Lastmod.IsZero }} + {{ safeHTML ( .Lastmod.Format "2006-01-02T15:04:05-07:00" ) }}{{ end }}{{ with .Sitemap.ChangeFreq }} + {{ . }}{{ end }}{{ if ge .Sitemap.Priority 0.0 }} + {{ .Sitemap.Priority }}{{ end }}{{ if .IsTranslated }}{{ range .Translations }} + {{ end }} + {{ end }} + + {{- end -}} + {{ end }} + From 608c30b4c7b50a03b5c58c011557fb168e36a198 Mon Sep 17 00:00:00 2001 From: kerthcet Date: Sun, 30 Aug 2026 18:19:43 +0100 Subject: [PATCH 4/5] optimize Signed-off-by: kerthcet --- assets/scss/common/_custom.scss | 48 ++++++++++++++++++++++++++++++--- content/_index.md | 31 ++++++++++++--------- data/projects.yaml | 32 +++++++++++++++------- hugo_stats.json | 4 +++ layouts/_default/home.html | 27 +++++++++++++------ 5 files changed, 108 insertions(+), 34 deletions(-) diff --git a/assets/scss/common/_custom.scss b/assets/scss/common/_custom.scss index 87febc8..e7d6feb 100644 --- a/assets/scss/common/_custom.scss +++ b/assets/scss/common/_custom.scss @@ -53,6 +53,14 @@ body > * { } } +// The one piece of prose on the page. Constrained because a full-width measure +// under a centred headline reads as a caption rather than a statement. +.home .lead { + max-width: 40rem; + margin-inline: auto; + opacity: 0.75; +} + // The headline carries the top of the page alone, so give it room to sit in. // The slack comes out of the dead band above the footer, which the short // homepage leaves over anyway. @@ -94,11 +102,32 @@ body > * { // `flex-grow` would not — the last row would stretch wider than the rows above. $feature-gap: 1.25rem; +// Names the grid without shouting: smaller than the headline, uppercase and +// tracked out so it reads as a label for the section rather than a second title +// competing with the hero. +.section-title { + margin-top: 0; + margin-bottom: 1.5rem; + text-align: center; + font-size: 0.8125rem; + font-weight: 600; + letter-spacing: 0.08em; + text-transform: uppercase; + // Not lower: at 13px this is normal-size text for WCAG, so it needs 4.5:1. + // 0.5 measured 3.01:1 and failed; 0.7 measures 5.4:1. + opacity: 0.7; +} + .feature-grid { display: flex; flex-wrap: wrap; justify-content: center; gap: $feature-gap; + // It is a `ul` now, for the item count screen readers announce. Strip the + // list affordances the browser adds; the cards are the visual affordance. + padding-left: 0; + margin-bottom: 0; + list-style: none; } .feature-card { @@ -128,7 +157,9 @@ $feature-gap: 1.25rem; border-radius: 0.75rem; transition: border-color 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease; - h2 { + // `h3` rather than `h2`: the grid now sits under its own section heading, so + // the card titles are one level deeper in the outline. + h3 { // Doks puts a 2rem top margin on every heading, which leaves a gap // between the card's top edge and its title. margin-top: 0; @@ -144,6 +175,14 @@ $feature-gap: 1.25rem; } } + // Decorative, and `aria-hidden` in the markup. `flex: 0 0 auto` stops a + // wide emoji from being squeezed by a long project name. + .feature-icon { + flex: 0 0 auto; + font-size: 1rem; + line-height: 1; + } + p { margin-bottom: 0; font-size: 1rem; @@ -155,7 +194,7 @@ $feature-gap: 1.25rem; box-shadow: 0 6px 20px rgba($primary, 0.12); transform: translateY(-2px); - h2 a { + h3 a { color: $primary; } } @@ -165,7 +204,10 @@ $feature-gap: 1.25rem; // the project cards for attention and left a large empty band across the page. // A plain centred line separates it from the grid on whitespace alone. .feature-cta { - margin-top: 2.25rem; + // Separated by whitespace alone — no rule and no box. The gap is a little + // wider than the grid's own row gap so the invitation still reads as the end + // of the page rather than an eighth card that fell out of the row. + margin-top: 3rem; text-align: center; .feature-cta-title { diff --git a/content/_index.md b/content/_index.md index 376f504..a5d1428 100644 --- a/content/_index.md +++ b/content/_index.md @@ -1,13 +1,18 @@ ---- -title: "Exploring the ∞ possibilities of AI" -description: "" -# lead: "" -date: 2023-09-07T16:33:54+02:00 -lastmod: 2023-09-07T16:33:54+02:00 -draft: false -seo: - title: "InftyAI ∞" # custom title (optional) - description: "Exploring the ∞ possibilities of AI" # custom description (recommended) - canonical: "" # custom canonical URL (optional) - robots: "" # custom robot tags (optional) ---- +--- +title: "Exploring the ∞ possibilities of AI" +# Shown under the headline. Placeholder copy in your voice — edit freely; it is +# the only prose on the page, so it is what tells a first-time visitor what +# InftyAI actually does. +lead: "We build open source infrastructure for AI." +description: "InftyAI is an open source community building infrastructure for AI: LLM inference on Kubernetes, GPU orchestration, model routing, and agent sandboxes." +date: 2023-09-07T16:33:54+02:00 +lastmod: 2023-09-07T16:33:54+02:00 +draft: false +seo: + title: "InftyAI ∞" # custom title (optional) + # Deliberately not a copy of the title — search snippets and social cards + # previously showed the same eight words twice. + description: "InftyAI is an open source community building infrastructure for AI: LLM inference on Kubernetes, GPU orchestration, model routing, and agent sandboxes." + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- diff --git a/data/projects.yaml b/data/projects.yaml index e248397..6bbd603 100644 --- a/data/projects.yaml +++ b/data/projects.yaml @@ -1,43 +1,55 @@ # Homepage project cards. `repo` is used to look up the GitHub star count at -# build time; cards are rendered in descending order of stars, with `cta` last. +# build time; cards are rendered in descending order of stars. +# +# `icon` is decorative only — it is rendered `aria-hidden`, so the project name +# has to carry the meaning on its own. Keeping it out of `description` leaves the +# prose clean and gives every card the same visual anchor beside its title. projects: - name: Awesome-LLMOps + icon: "🎉" repo: InftyAI/Awesome-LLMOps url: https://awesome-llmops.inftyai.com - description: "🎉 An awesome & curated list of best LLMOps tools." + description: "An awesome & curated list of best LLMOps tools." - name: llmaz + icon: "☸️" repo: InftyAI/llmaz url: https://llmaz.inftyai.com/ - description: "☸️ Easy, advanced inference platform for large language models on Kubernetes." + description: "Easy, advanced inference platform for large language models on Kubernetes." - name: Alphatrion + icon: "⚒️" repo: InftyAI/alphatrion url: https://github.com/InftyAI/alphatrion - description: "⚒️ The open-source framework for LLM experiments and agent orchestration." + description: "The open-source framework for LLM experiments and agent orchestration." - name: AMRS + icon: "🧬" repo: InftyAI/amrs url: https://github.com/InftyAI/amrs - description: "🧬 The adaptive model routing system for exploration and exploitation." + description: "The adaptive model routing system for exploration and exploitation." - name: SandD + icon: "🤖" repo: InftyAI/sandd url: https://github.com/InftyAI/sandd - description: "🤖 A lightweight sandbox daemon for secure agent execution in isolated environments." + description: "A lightweight sandbox daemon for secure agent execution in isolated environments." - name: Nebula + icon: "🎮" repo: InftyAI/Nebula url: https://github.com/InftyAI/Nebula - description: "🎮 The control plane for GPUaaS." + description: "The control plane for GPUaaS." - name: MLX + icon: "🦀" repo: InftyAI/mlx url: https://github.com/InftyAI/mlx - description: "🦀 Rust bindings for Apple's MLX framework." + description: "Rust bindings for Apple's MLX framework." # Rendered below the grid as plain text — not a project, and not a link, so it # has no `repo` (no star count) and no `url`. cta: - name: "✨ Donation Plan" - description: "🚀 Got a brilliant idea? Let's build something extraordinary together." + name: "Donation Plan" + icon: "✨" + description: "Got a brilliant idea? Let's build something extraordinary together." diff --git a/hugo_stats.json b/hugo_stats.json index 2d0366d..cd27451 100644 --- a/hugo_stats.json +++ b/hugo_stats.json @@ -13,6 +13,7 @@ "g", "h1", "h2", + "h3", "h5", "head", "header", @@ -72,6 +73,7 @@ "feature-cta", "feature-cta-title", "feature-grid", + "feature-icon", "feature-stars", "flex-column", "flex-grow-1", @@ -95,6 +97,7 @@ "icon-tabler-x", "justify-content-between", "justify-content-center", + "lead", "list", "list-inline", "list-inline-item", @@ -151,6 +154,7 @@ "section", "section-features", "section-md", + "section-title", "single", "social-link", "status", diff --git a/layouts/_default/home.html b/layouts/_default/home.html index 0995d15..7d0636c 100644 --- a/layouts/_default/home.html +++ b/layouts/_default/home.html @@ -3,6 +3,9 @@ could not then be set from _custom.scss. */}}

{{ .Title }}

+ {{ with .Params.lead -}} +

{{ . | safeHTML }}

+ {{ end -}} {{ .Content }}
{{ end }} @@ -41,13 +44,19 @@

{{ .Title }}

- {{/* A CSS grid rather than Bootstrap's row/col: it needs no breakpoint + {{/* Names the grid, so the seven project headings hang off a section + instead of directly off the page's h1. */}} +

Projects

+ {{/* A list, because that is what seven sibling projects are: screen + readers announce the count and allow item-by-item navigation. + Flexbox rather than Bootstrap's row/col — it needs no breakpoint classes, no `h-100`, and no gutter overrides (Doks ships neither the `.g-*` utilities nor a non-zero `--bs-gutter-y`). */}} -
+
    {{ range $cards -}} -
    -

    +
  • +

    + {{ with .icon }}{{ end }} {{ .name }} {{/* Rendered for every project, even when the build-time lookup failed, so assets/js/custom.js can fill it in @@ -68,17 +77,19 @@

    {{ if $known }}{{ if ge $stars 1000 }}{{ printf "%.1fk" (div (float $stars) 1000) }}{{ else }}{{ $stars }}{{ end }}{{ end }} {{ end -}} -

    +
  • {{ .description }}

    -
    + {{ end -}} -
+ {{/* An invitation, not a project — kept out of the grid so it does not read as one more repository. */}} {{ with site.Data.projects.cta -}}
- {{ .name }} + + {{ with .icon }} {{ end }}{{ .name }} +

{{ .description }}

{{ end -}} From 6da469842a4eba9d992321519d98889b83dc35eb Mon Sep 17 00:00:00 2001 From: kerthcet Date: Sun, 30 Aug 2026 18:45:52 +0100 Subject: [PATCH 5/5] fix it Signed-off-by: kerthcet --- Makefile | 20 +++++- assets/scss/common/_custom.scss | 37 +++++++++- config/_default/params.toml | 7 +- hugo_stats.json | 5 +- layouts/_default/baseof.html | 40 +++++++++++ layouts/_default/home.html | 2 +- static/cover.png | Bin 0 -> 142053 bytes tools/og-card.html | 121 ++++++++++++++++++++++++++++++++ tools/og-shot.mjs | 47 +++++++++++++ 9 files changed, 273 insertions(+), 6 deletions(-) create mode 100644 layouts/_default/baseof.html create mode 100644 static/cover.png create mode 100644 tools/og-card.html create mode 100644 tools/og-shot.mjs diff --git a/Makefile b/Makefile index 0fb1def..9179b93 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,20 @@ -.PHONY: launch +.PHONY: launch cover + launch: @echo "Launching the application..." - npm run dev \ No newline at end of file + npm run dev + +# Rebuild static/cover.png (the og:image) from tools/og-card.html. +# +# The card is copied into public/ and served over HTTP rather than opened as a +# file:// URL, so the Jost webfont and the logo are same-origin — woff2 is +# CORS-gated, and a cross-origin miss fails silently to the fallback font. +cover: + npm run build + cp tools/og-card.html public/og-card.html + @python3 -m http.server 8899 --directory public >/dev/null 2>&1 & \ + srv=$$!; sleep 1; \ + node tools/og-shot.mjs http://127.0.0.1:8899/og-card.html static/cover.png 1200 630; \ + kill $$srv + rm -f public/og-card.html + @echo "static/cover.png regenerated" diff --git a/assets/scss/common/_custom.scss b/assets/scss/common/_custom.scss index e7d6feb..84d7d34 100644 --- a/assets/scss/common/_custom.scss +++ b/assets/scss/common/_custom.scss @@ -7,6 +7,37 @@ height: 20px; } +// Skip link: the first focusable thing on the page, hidden until it has focus. +// +// Not Bootstrap's `.visually-hidden-focusable`, so this does not depend on that +// utility surviving purgecss. Clipped rather than `display: none`, because a +// display-none element cannot receive focus at all. +.skip-link { + position: absolute; + top: 0; + left: 0; + z-index: 1080; // above the sticky navbar ($zindex-sticky is 1020) + padding: 0.625rem 1rem; + background: $primary; + color: #fff; + border-bottom-right-radius: 0.375rem; + text-decoration: none; + + &:not(:focus) { + // The standard visually-hidden recipe: out of sight, still in the a11y tree. + width: 1px; + height: 1px; + padding: 0; + overflow: hidden; + clip-path: inset(50%); + white-space: nowrap; + } + + &:focus { + color: #fff; + } +} + // Keep the footer at the bottom of the viewport on short pages // (the homepage does not fill the screen otherwise). body { @@ -105,7 +136,11 @@ $feature-gap: 1.25rem; // Names the grid without shouting: smaller than the headline, uppercase and // tracked out so it reads as a label for the section rather than a second title // competing with the hero. -.section-title { +// +// Deliberately not called `.section-title` — the theme already uses that for the +// "Related posts" heading on blog and legal pages (doks-core _posts.scss:55), and +// this would have restyled those into tiny uppercase labels. +.feature-grid-title { margin-top: 0; margin-bottom: 1.5rem; text-align: center; diff --git a/config/_default/params.toml b/config/_default/params.toml index 2f25b1f..61262ae 100644 --- a/config/_default/params.toml +++ b/config/_default/params.toml @@ -50,7 +50,12 @@ mainSections = ["docs"] toTopButton = false # false (default) or true breadcrumbTrail = false # false (default) or true headlineHash = true # true (default) or false - scrollSpy = true # true (default) or false + # Off, because there is nothing to spy on: scrollspy highlights the current + # heading inside `#toc`, and no page on this site renders a table of contents. + # Leaving it on had one real effect — `tabindex="0"` on ``, which made the + # body itself the first Tab stop and pushed the skip link to second. Turn this + # back on if a docs section with a TOC is ever added. + scrollSpy = false # true (default) or false # Multilingual multilingualMode = false # false (default) or true diff --git a/hugo_stats.json b/hugo_stats.json index cd27451..170baff 100644 --- a/hugo_stats.json +++ b/hugo_stats.json @@ -24,6 +24,7 @@ "li", "line", "link", + "main", "meta", "noscript", "p", @@ -73,6 +74,7 @@ "feature-cta", "feature-cta-title", "feature-grid", + "feature-grid-title", "feature-icon", "feature-stars", "flex-column", @@ -154,8 +156,8 @@ "section", "section-features", "section-md", - "section-title", "single", + "skip-link", "social-link", "status", "sticky-top", @@ -173,6 +175,7 @@ "wrap" ], "ids": [ + "content", "offcanvasNavMain", "offcanvasNavMainLabel", "query", diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html new file mode 100644 index 0000000..73c0065 --- /dev/null +++ b/layouts/_default/baseof.html @@ -0,0 +1,40 @@ +{{/* Overrides @thulite/doks-core/layouts/_default/baseof.html. Three changes, all + in the body; everything else is kept byte-for-byte so theme updates stay easy + to diff against: + + 1. A `
` landmark. The theme shipped none, so assistive technology had no + way to skip the navbar and jump to the content. + 2. A skip link as the first focusable element, which needs (1) to point at. + 3. `role="document"` dropped from `.wrap`. It is meant for reading-mode content + inside web *applications*; on an ordinary page it adds nothing and competes + with the real landmarks. + + `
` has to wrap the `sidebar-prefooter` and `sidebar-footer` blocks too, + not just `main`: the homepage renders its project grid into sidebar-prefooter, + and blog/legal pages render "Related posts" into sidebar-footer. Both are page + content, and neither can be wrapped from inside its own block. */}} + + + {{ partial "head/head" . }} + {{ partial "head/body-class" . }} + + + {{ partial "header/header" . }} +
+
+
+ {{ if and (eq site.Params.doks.containerBreakpoint "fluid") (or (not (in .Site.Params.mainSections .Type)) (.IsNode)) }}
{{ end }} + {{ block "main" . }}{{ end }} + {{ if and (eq site.Params.doks.containerBreakpoint "fluid") (or (not (in .Site.Params.mainSections .Type)) (.IsNode)) }}
{{ end }} +
+
+ {{ block "sidebar-prefooter" . }}{{ end }} + {{ block "sidebar-footer" . }}{{ end }} +
+ {{ partial "footer/footer" . }} + {{ partial "footer/script-footer" . }} + {{ if eq site.Params.doks.toTopButton true -}} + {{ partial "footer/to-top" . }} + {{ end }} + + diff --git a/layouts/_default/home.html b/layouts/_default/home.html index 7d0636c..c4678c8 100644 --- a/layouts/_default/home.html +++ b/layouts/_default/home.html @@ -46,7 +46,7 @@

{{ .Title }}

{{/* Names the grid, so the seven project headings hang off a section instead of directly off the page's h1. */}} -

Projects

+

Projects

{{/* A list, because that is what seven sibling projects are: screen readers announce the count and allow item-by-item navigation. Flexbox rather than Bootstrap's row/col — it needs no breakpoint diff --git a/static/cover.png b/static/cover.png new file mode 100644 index 0000000000000000000000000000000000000000..cf0e7a8946f4c7267eab0e23b84481642f3a6b2b GIT binary patch literal 142053 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

}?lhq$}hysb@>d{Vwu( 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 + + + + + + + +

+ + diff --git a/tools/og-shot.mjs b/tools/og-shot.mjs new file mode 100644 index 0000000..06e6a91 --- /dev/null +++ b/tools/og-shot.mjs @@ -0,0 +1,47 @@ +// Headless-Chrome screenshot at an exact pixel size, waiting for webfonts. +// Drives Chrome over CDP directly so this needs no Puppeteer/Playwright +// dependency — the browser is already on the machine. +// +// Usage: node tools/og-shot.mjs +// Normally invoked by `make cover`; see tools/og-card.html. +const [url, out, w, h] = process.argv.slice(2); +const { execFile } = await import('node:child_process'); +const fs = await import('node:fs/promises'); + +const CHROME = process.env.CHROME + || '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'; +const port = 9333 + Math.floor(Math.random() * 500); +const proc = execFile(CHROME, [ + '--headless=new', `--remote-debugging-port=${port}`, '--no-first-run', + '--user-data-dir=/tmp/cdp-og-' + port, '--hide-scrollbars', 'about:blank', +]); + +let page; +for (let i = 0; i < 60 && !page; i++) { + try { page = (await (await fetch(`http://127.0.0.1:${port}/json/list`)).json()).find((t) => t.type === 'page'); } catch {} + if (!page) await new Promise((r) => setTimeout(r, 200)); +} +const ws = new WebSocket(page.webSocketDebuggerUrl); +await new Promise((r) => (ws.onopen = r)); +let id = 0; const pending = new Map(); +ws.onmessage = (m) => { const x = JSON.parse(m.data); if (x.id && pending.has(x.id)) { pending.get(x.id)(x.result); pending.delete(x.id); } }; +const send = (method, params = {}) => new Promise((res) => { const i = ++id; pending.set(i, res); ws.send(JSON.stringify({ id: i, method, params })); }); +const ev = (e) => send('Runtime.evaluate', { returnByValue: true, awaitPromise: true, expression: e }).then((r) => r.result && r.result.value); + +await send('Page.enable'); +await send('Runtime.enable'); +await send('Emulation.setDeviceMetricsOverride', { width: +w, height: +h, deviceScaleFactor: 1, mobile: false }); +await send('Page.navigate', { url }); +await new Promise((r) => setTimeout(r, 1200)); +// Fonts and the logo have to be in before the pixels are read, or the capture +// races the swap and lands on the fallback face. +await ev(`document.fonts.ready.then(()=>'ok')`); +await ev(`Promise.all([...document.images].map(i=>i.complete?1:new Promise(r=>{i.onload=i.onerror=r}))).then(()=>'ok')`); +console.log('fonts loaded :', await ev(`[...document.fonts].filter(f=>f.status==='loaded').map(f=>f.family+' '+f.weight).join(', ')`)); +console.log('h1 lines :', await ev(`(()=>{const e=document.querySelector('h1');const cs=getComputedStyle(e);return Math.round(e.getBoundingClientRect().height/parseFloat(cs.lineHeight))+' line(s), '+Math.round(e.getBoundingClientRect().width)+'px wide'})()`)); +console.log('overflow :', await ev(`document.documentElement.scrollWidth+'x'+document.documentElement.scrollHeight`)); + +const { data } = await send('Page.captureScreenshot', { format: 'png', clip: { x: 0, y: 0, width: +w, height: +h, scale: 1 }, captureBeyondViewport: true }); +await fs.writeFile(out, Buffer.from(data, 'base64')); +console.log('wrote', out); +ws.close(); proc.kill(); process.exit(0);