+
+
+
diff --git a/apps/marketing/src/layouts/RailLayout.astro b/apps/marketing/src/layouts/RailLayout.astro
new file mode 100644
index 0000000000..71a32b1e61
--- /dev/null
+++ b/apps/marketing/src/layouts/RailLayout.astro
@@ -0,0 +1,49 @@
+---
+// The site shell: sticky rail on the left, one centred frame, footer at the
+// bottom of the body column. The homepage, pricing, and blog all use it.
+// Prerendered pages resolve the star count once at build time.
+import Layout from "./Layout.astro";
+import RailB from "../components/variants/rail-b.astro";
+import { getStars, formatStars } from "../lib/github";
+import "../styles/variants/doc.css";
+
+interface Props {
+ title: string;
+ description: string;
+ current?: "home" | "pricing" | "blog";
+}
+const { title, description, current = "home" } = Astro.props;
+
+const GH = "https://github.com/UsefulSoftwareCo/executor";
+const stars = await getStars();
+---
+
+
+
+
+ )
+ }
+
+
diff --git a/apps/marketing/src/pages/index.astro b/apps/marketing/src/pages/index.astro
index 6000f5db44..22b6cbe2e7 100644
--- a/apps/marketing/src/pages/index.astro
+++ b/apps/marketing/src/pages/index.astro
@@ -1,10 +1,8 @@
---
-import Layout from "../layouts/Layout.astro";
+import RailLayout from "../layouts/RailLayout.astro";
// Imported so Vite emits it as a hashed build asset (served from /_astro/...);
// the deploy pipeline does not pick up newly added /public files.
-import { getStars, formatStars } from "../lib/github";
import { setupPrompt } from "../content/site-copy";
-import RailB from "../components/variants/rail-b.astro";
import DocBody from "../components/variants/doc-body.astro";
const GH = "https://github.com/UsefulSoftwareCo/executor";
@@ -12,57 +10,16 @@ const GH = "https://github.com/UsefulSoftwareCo/executor";
// /api/* is app-owned (apps/cloud/src/app-paths.ts), so this hits the WorkOS
// login flow directly. Returning users land here; new users use Get started.
const SIGN_IN = "/api/auth/login";
-const stars = await getStars();
---
-
-
- {/* Graph-paper hero texture: grayscale (ink-masked), faded into the surface
- at the bottom. Part of the registry-grade language, not a colored effect. */}
-