diff --git a/apps/marketing/package.json b/apps/marketing/package.json
index e678cf887..268ac40e9 100644
--- a/apps/marketing/package.json
+++ b/apps/marketing/package.json
@@ -19,6 +19,7 @@
"@executor-js/plugin-google-discovery": "workspace:*",
"@executor-js/plugin-graphql": "workspace:*",
"@executor-js/plugin-openapi": "workspace:*",
+ "@executor-js/react": "workspace:*",
"@executor-js/sdk": "workspace:*",
"@tailwindcss/vite": "^4.2.2",
"astro": "^6.1.3",
diff --git a/apps/marketing/src/components/self-host-contact-modal.tsx b/apps/marketing/src/components/self-host-contact-modal.tsx
new file mode 100644
index 000000000..0af56ab64
--- /dev/null
+++ b/apps/marketing/src/components/self-host-contact-modal.tsx
@@ -0,0 +1,104 @@
+import { Button } from "@executor-js/react/components/button";
+import { CopyButton } from "@executor-js/react/components/copy-button";
+import {
+ Dialog,
+ DialogClose,
+ DialogContent,
+ DialogTitle,
+ DialogTrigger,
+} from "@executor-js/react/components/dialog";
+const TEMPLATE = "Hi Rhys, I'm at {company} and interested in self hosting executor.";
+const EMAIL = "rhys@executor.sh";
+
+export function SelfHostContactModal() {
+ return (
+
+ );
+}
+
+export default SelfHostContactModal;
diff --git a/apps/marketing/src/pages/index.astro b/apps/marketing/src/pages/index.astro
index 78eced851..ce5ad4dd3 100644
--- a/apps/marketing/src/pages/index.astro
+++ b/apps/marketing/src/pages/index.astro
@@ -1,6 +1,7 @@
---
import Layout from "../layouts/Layout.astro";
import { AnimatedBeamDemo } from "../components/animated-beam-demo";
+import { SelfHostContactModal } from "../components/self-host-contact-modal";
---