From e24a499008b24c3ecbbfb4b55ae7d0c90584f936 Mon Sep 17 00:00:00 2001
From: stuffbucket <231133237+stuffbucket@users.noreply.github.com>
Date: Wed, 24 Jun 2026 03:56:15 -0700
Subject: [PATCH 1/7] design(site): god-rays backdrop + brand-red hero +
OS-aware download
- Add a subtle WebGL god-rays background (inlined GLSL; no Three.js / no shader dependency). Dark mode only; light mode keeps the warm-paper background. Brand jewel tones (turquoise -> indigo -> magenta), light source positioned behind the hero wordmark, prefers-reduced-motion renders a single frame, paused on hidden tab, DPR-capped.
- Hero is now a solid brand-red card (drops the per-section top accent rule), cream ink.
- Hero download button detects the OS: Windows -> inert "coming soon" chip; macOS/other -> the macOS download (server-rendered default, no-JS safe).
---
site/src/components/GodRays.astro | 220 +++++++++++++++++++++++++
site/src/components/markdoc/Hero.astro | 38 ++++-
site/src/pages/index.astro | 4 +
3 files changed, 261 insertions(+), 1 deletion(-)
create mode 100644 site/src/components/GodRays.astro
diff --git a/site/src/components/GodRays.astro b/site/src/components/GodRays.astro
new file mode 100644
index 0000000..bdcf3b1
--- /dev/null
+++ b/site/src/components/GodRays.astro
@@ -0,0 +1,220 @@
+---
+// God rays — a subtle volumetric light-shaft backdrop.
+//
+// - Inlined GLSL (no third-party shader library) + raw WebGL (no Three.js) to
+// keep the page lean.
+// - DARK MODE ONLY: light shafts read on the black dark-theme background; on the
+// light (warm paper) theme the canvas is hidden via CSS and the render loop
+// stays paused.
+// - Reduced motion is a contract: under prefers-reduced-motion we draw a single
+// static frame, never an animation loop.
+// - Pauses when the tab is hidden. pointer-events:none, z-index 0 — it sits
+// behind every card, peeking through the card gaps and the page margins.
+---
+
+
+
+
+
+
diff --git a/site/src/components/markdoc/Hero.astro b/site/src/components/markdoc/Hero.astro
index 54ccc9c..4a9bff0 100644
--- a/site/src/components/markdoc/Hero.astro
+++ b/site/src/components/markdoc/Hero.astro
@@ -46,6 +46,21 @@ const { macDmg: downloadUrl, releasesUrl } = await getDownloadInfo();
diff --git a/site/src/components/Spark.astro b/site/src/components/Spark.astro
new file mode 100644
index 0000000..d413681
--- /dev/null
+++ b/site/src/components/Spark.astro
@@ -0,0 +1,34 @@
+---
+// A chromed spark icon: a Paint canvas in "chrome" mode (polished-metal GLSL)
+// masked to the four-point spark shape, so the star itself is a glossy metal
+// reflection rather than a flat fill. Used on primary buttons.
+import Paint from "./Paint.astro";
+interface Props {
+ class?: string;
+}
+const { class: cls = "" } = Astro.props;
+---
+
+
+
+
+
+
diff --git a/site/src/components/markdoc/GetStarted.astro b/site/src/components/markdoc/GetStarted.astro
index 9ce2eee..7b194eb 100644
--- a/site/src/components/markdoc/GetStarted.astro
+++ b/site/src/components/markdoc/GetStarted.astro
@@ -2,15 +2,18 @@
// Get started in 3 steps. Step 1 carries the actual download (macOS live,
// Windows "coming soon"); the standalone download section folded in here.
// Homebrew + other install options live in the repo README.
+import Paint from "../Paint.astro";
+import Spark from "../Spark.astro";
import { getDownloadInfo } from "../../lib/downloads";
const { macDmg, versionLabel, releasesUrl, repoUrl } = await getDownloadInfo();
const readmeUrl = `${repoUrl}#readme`;
+const M = `maximal`;
const steps = [
{
title: "Install maximal",
- body: "Grab the macOS app — it lives quietly in your menu bar. Windows is coming soon.",
+ body: "Grab the macOS app. It lives quietly in your menu bar; Windows is coming soon.",
},
{
title: "Sign in with GitHub",
@@ -18,16 +21,14 @@ const steps = [
},
{
title: "Pick your tools",
- body: "Claude Code, Codex, opencode, Cursor — point them at maximal and they run on your Copilot models. Switch anytime; no re-signing-in.",
+ body: `Point Claude Code, Codex, opencode, or GitHub Copilot at ${M} and they run on your Copilot models. Switch anytime; no re-signing-in.`,
},
];
---
-
+
+
-
Get started
Up and running in three steps.
@@ -55,15 +56,9 @@ const steps = [
href={macDmg}
rel="noopener"
>
+
-
+ macOS
{versionLabel && {versionLabel}}
@@ -112,16 +107,9 @@ const steps = [
margin-bottom: 1.75rem;
}
- .getstarted__spark {
- width: 1.25rem;
- height: 1.25rem;
- fill: var(--accent-gold);
- align-self: center;
- }
-
.getstarted__sub {
font-family: var(--sans);
- color: var(--text-muted);
+ color: var(--text);
margin: 0;
flex-basis: 100%;
}
@@ -167,7 +155,7 @@ const steps = [
.step__text {
font-family: var(--sans);
- color: var(--text-muted);
+ color: var(--text);
line-height: 1.55;
margin: 0;
}
@@ -179,7 +167,7 @@ const steps = [
.step__readme {
margin: 0.7rem 0 0;
font-size: 0.85rem;
- color: var(--text-muted);
+ color: var(--text);
}
@media (max-width: 640px) {
diff --git a/site/src/components/markdoc/Hero.astro b/site/src/components/markdoc/Hero.astro
index 4a9bff0..f437485 100644
--- a/site/src/components/markdoc/Hero.astro
+++ b/site/src/components/markdoc/Hero.astro
@@ -3,6 +3,8 @@
// typed in on load. The full tagline is server-rendered (SEO + no-JS +
// prefers-reduced-motion all get the complete sentence); JS only replays it as
// a typing effect when motion is allowed.
+import Paint from "../Paint.astro";
+import Spark from "../Spark.astro";
import { getDownloadInfo } from "../../lib/downloads";
interface Props {
tagline: string;
@@ -11,10 +13,11 @@ interface Props {
const { tagline, downloadLabel = "Download for macOS" } = Astro.props;
// Markdoc doesn't forward $variables into tag attributes, so pull the resolved
// release straight from the shared (memoized) build-time module.
-const { macDmg: downloadUrl, releasesUrl } = await getDownloadInfo();
+const { macDmg: downloadUrl, versionLabel } = await getDownloadInfo();
---
+
maximal
{tagline}
+
-
+ {downloadLabel}
-
- )
- }
- {
- releasesUrl && (
-
- Other ways to install
+ {versionLabel && {versionLabel}}
)
}
@@ -56,9 +52,28 @@ const { macDmg: downloadUrl, releasesUrl } = await getDownloadInfo();
.hero::before {
display: none;
}
+ /* Lift the hero content above the paint canvas (which is positioned, so it
+ would otherwise paint over the non-positioned content). A soft shadow keeps
+ the cream type crisp over the moving gloss highlights. */
.wordmark,
+ .tagline,
+ .hero-cta {
+ position: relative;
+ z-index: 1;
+ }
+ /* Cream type, shaded as if lit from above the card: a top-bright gradient
+ fill on the wordmark + a soft shadow cast down onto the paint. */
+ .wordmark {
+ background: linear-gradient(180deg, #fcf5e6 0%, #f1e5cb 55%, #d6c4a0 100%);
+ -webkit-background-clip: text;
+ background-clip: text;
+ -webkit-text-fill-color: transparent;
+ color: transparent;
+ filter: drop-shadow(0 5px 9px rgba(26, 0, 4, 0.5));
+ }
.tagline {
color: #f4ead4;
+ text-shadow: 0 2px 5px rgba(26, 0, 4, 0.45);
}
.hero-typed {
@@ -83,20 +98,10 @@ const { macDmg: downloadUrl, releasesUrl } = await getDownloadInfo();
margin: 1.5rem 0 1.25rem;
}
.hero-cta__primary {
- /* Let the primary CTA size to its content rather than stretch. */
+ /* Size to content rather than stretch. The glossy primary-button effect
+ (clear-coat Paint + lit label) is shared from global.css .btn--primary. */
flex: 0 0 auto;
}
- .hero-cta__secondary {
- font-family: var(--mono);
- font-size: 0.9rem;
- color: #f4ead4;
- text-decoration: underline;
- text-underline-offset: 3px;
- text-decoration-color: var(--ink-gold);
- }
- .hero-cta__secondary:hover {
- text-decoration-thickness: 2px;
- }
@keyframes hero-caret-blink {
50% {
@@ -148,7 +153,11 @@ const { macDmg: downloadUrl, releasesUrl } = await getDownloadInfo();
btn.classList.add("btn--soon");
btn.removeAttribute("href");
btn.setAttribute("aria-disabled", "true");
+ var paint = btn.querySelector(".btn-paint");
+ if (paint) paint.style.display = "none";
var label = btn.querySelector(".btn-label span:last-child");
- if (label) label.textContent = "Windows — coming soon";
+ if (label) label.textContent = "Windows";
+ var meta = btn.querySelector(".btn-meta");
+ if (meta) meta.textContent = "coming soon";
})();
diff --git a/site/src/components/markdoc/ShowTell.astro b/site/src/components/markdoc/ShowTell.astro
index 0141cfd..bf83e40 100644
--- a/site/src/components/markdoc/ShowTell.astro
+++ b/site/src/components/markdoc/ShowTell.astro
@@ -2,6 +2,7 @@
// "Show, don't tell": the tools you use } maximal { your Copilot models.
// Labels sit in a row ABOVE the braces; the tall braces wrap only the lists
// (gather → route → fan out). Brand marks aid scanning. Presentational.
+import Paint from "../Paint.astro";
// Brand marks from Simple Icons (CC0). `fill: true` = solid logo whose path
// carries its own fill="currentColor"; `fill: false` = a monoline stroke glyph.
@@ -61,15 +62,15 @@ const BRACE = `M5 1C10 1 10 6 10 16L10 42C10 47 12 50 15 50C12 50 10 53 10 58L10
const shot = `${import.meta.env.BASE_URL.replace(/\/$/, "")}/screenshots/app-dashboard.png`;
---
-
+
+
Why try maximal
- maximal runs on your own machine. The tools you already use point at
- maximal, and it does the work of connecting them to the models you want —
- all on the GitHub Copilot subscription you already pay for, with Copilot's
- privacy and security guarantees. No hosted gateway to wire up, no per-token
- bill to track — none of what a service like OpenRouter asks of you.
+ maximal swaps out the engine your AI tools use
+ with the models that power GitHub Copilot. You get all of the agility and
+ creativity without sacrificing the power, privacy, and security of GitHub
+ Copilot.
- Every tool, every model, every token — see exactly where your Copilot
+ Every tool, every model, every token. See exactly where your Copilot
subscription goes.
@@ -193,14 +194,17 @@ const shot = `${import.meta.env.BASE_URL.replace(/\/$/, "")}/screenshots/app-das
}
/* Two rows: labels on top (row 1), then the braced lists + node (row 2),
- so the braces wrap only the lists — not the labels. */
+ so the braces wrap only the lists — not the labels. Columns are content-
+ sized and the whole group is centered, so each list hugs its brace and the
+ left/right blocks stay symmetric around the node (no stranded whitespace). */
.flow {
display: grid;
- grid-template-columns: minmax(0, 1fr) 22px auto 22px minmax(0, 1fr);
+ grid-template-columns: auto 24px auto 24px auto;
grid-template-rows: auto 1fr;
+ justify-content: center;
align-items: stretch;
- column-gap: 1.25rem;
- row-gap: 1rem;
+ column-gap: 1.5rem;
+ row-gap: 1.1rem;
margin-top: 1.75rem;
}
@@ -213,6 +217,12 @@ const shot = `${import.meta.env.BASE_URL.replace(/\/$/, "")}/screenshots/app-das
color: var(--text);
margin: 0;
align-self: end;
+ justify-self: start;
+ }
+ /* The models label hugs the right block's left edge so it sits above its
+ first list item, mirroring the tools label on the left. */
+ .flow__label--models {
+ justify-self: start;
}
.flow__label--tools {
grid-column: 1;
@@ -311,9 +321,14 @@ const shot = `${import.meta.env.BASE_URL.replace(/\/$/, "")}/screenshots/app-das
}
.flow__mark {
+ /* Match the hero wordmark's cut exactly (weight + variable-font axes +
+ tracking), just smaller — so the island "maximal" reads as the same
+ wordmark, not a different font. */
font-family: var(--serif);
- font-size: 2.2rem;
- font-weight: 600;
+ font-size: 2.4rem;
+ font-weight: 900;
+ font-variation-settings: "SOFT" 30, "WONK" 1, "opsz" 144;
+ letter-spacing: -0.04em;
color: var(--text);
line-height: 1;
margin: 0;
diff --git a/site/src/content/landing/index.mdoc b/site/src/content/landing/index.mdoc
index 50e2b55..26ea4d3 100644
--- a/site/src/content/landing/index.mdoc
+++ b/site/src/content/landing/index.mdoc
@@ -1,5 +1,5 @@
{% hero
- tagline="Connect the AI tools you use to the models in your GitHub Copilot subscription."
+ tagline="Connect the AI tools you use to the models in GitHub Copilot."
downloadLabel="Download for macOS" /%}
{% showtell /%}
diff --git a/site/src/pages/index.astro b/site/src/pages/index.astro
index fd6daa4..5755615 100644
--- a/site/src/pages/index.astro
+++ b/site/src/pages/index.astro
@@ -28,10 +28,10 @@ const { Content } = await render(entry);
href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght,SOFT,WONK@9..144,400..900,0..100,0..1&display=swap"
/>
- maximal — your AI tools, your Copilot models, one connection
+ maximal · your AI tools, your Copilot models, one connection
-
-
@@ -116,5 +100,27 @@ const { Content } = await render(entry);
});
})();
+
+