From e2e712e9a2c0562f4102f60d7c068e4a261e1745 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 14 May 2026 10:21:23 +0000
Subject: [PATCH 1/4] chore: ignore package-lock.json and other non-bun
lockfiles in website
Agent-Logs-Url: https://github.com/rxtech-lab/rxcode/sessions/c3de470f-cecb-4da9-94f6-0babfd7b9df7
Co-authored-by: sirily11 <32106111+sirily11@users.noreply.github.com>
---
website/.gitignore | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/website/.gitignore b/website/.gitignore
index 5ef6a520..de08fad0 100644
--- a/website/.gitignore
+++ b/website/.gitignore
@@ -39,3 +39,8 @@ yarn-error.log*
# typescript
*.tsbuildinfo
next-env.d.ts
+
+# package managers — use bun only
+package-lock.json
+yarn.lock
+pnpm-lock.yaml
From 80dc4942ee5ab654fa4afe54565620b86e770ef4 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 14 May 2026 10:29:51 +0000
Subject: [PATCH 2/4] feat(website): add /api/og edge route for Vercel OG image
generation
Agent-Logs-Url: https://github.com/rxtech-lab/rxcode/sessions/d0d16644-d91f-4fd1-bb17-04ef9256240f
Co-authored-by: sirily11 <32106111+sirily11@users.noreply.github.com>
---
website/app/api/og/route.tsx | 137 ++++++++++++++++++++++++++++++++
website/app/layout.tsx | 9 +++
website/app/opengraph-image.tsx | 128 ++---------------------------
3 files changed, 151 insertions(+), 123 deletions(-)
create mode 100644 website/app/api/og/route.tsx
diff --git a/website/app/api/og/route.tsx b/website/app/api/og/route.tsx
new file mode 100644
index 00000000..d30163ae
--- /dev/null
+++ b/website/app/api/og/route.tsx
@@ -0,0 +1,137 @@
+import { ImageResponse } from "next/og";
+import { NextRequest } from "next/server";
+
+export const runtime = "edge";
+
+export async function GET(request: NextRequest) {
+ const { searchParams } = new URL(request.url);
+
+ const title =
+ searchParams.get("title") ??
+ "The Visual Command Center for AI Coding Agents";
+ const description =
+ searchParams.get("description") ??
+ "Native macOS · Claude Code & Codex · Free & Open Source";
+
+ return new ImageResponse(
+ (
+
+ {/* Subtle grid overlay */}
+
+
+ {/* Glow */}
+
+
+ {/* Logo + Name */}
+
+
+
+ Rx
+
+
+
+ RxCode
+
+
+
+ {/* Headline */}
+
+ {title}
+
+
+ {/* Sub-label */}
+
+ {description}
+
+
+ ),
+ {
+ width: 1200,
+ height: 630,
+ }
+ );
+}
diff --git a/website/app/layout.tsx b/website/app/layout.tsx
index 8caf5d1f..d774c56b 100644
--- a/website/app/layout.tsx
+++ b/website/app/layout.tsx
@@ -35,12 +35,21 @@ export const metadata: Metadata = {
url: "/",
siteName: "RxCode",
locale: "en_US",
+ images: [
+ {
+ url: "/api/og",
+ width: 1200,
+ height: 630,
+ alt: "RxCode — The Visual Command Center for AI Coding Agents",
+ },
+ ],
},
twitter: {
card: "summary_large_image",
title: "RxCode — The Visual Command Center for AI Coding Agents",
description:
"A native macOS desktop client for AI coding agents. Visual sessions, project tree, and code review in one place.",
+ images: ["/api/og"],
},
};
diff --git a/website/app/opengraph-image.tsx b/website/app/opengraph-image.tsx
index 495a7e71..024a79d6 100644
--- a/website/app/opengraph-image.tsx
+++ b/website/app/opengraph-image.tsx
@@ -1,4 +1,4 @@
-import { ImageResponse } from "next/og";
+import { GET } from "./api/og/route";
export const runtime = "edge";
@@ -7,127 +7,9 @@ export const size = { width: 1200, height: 630 };
export const contentType = "image/png";
export default async function Image() {
- return new ImageResponse(
- (
-
- {/* Subtle grid overlay */}
-
-
- {/* Glow */}
-
-
- {/* Logo + Name */}
-
-
-
- Rx
-
-
-
- RxCode
-
-
-
- {/* Headline */}
-
- The Visual Command Center for{" "}
- AI Coding Agents
-
-
- {/* Sub-label */}
-
- Native macOS
- ●
- Claude Code & Codex
- ●
- Free & Open Source
-
-
- ),
- { ...size }
+ const url = new URL(
+ "/api/og",
+ process.env.NEXT_PUBLIC_SITE_URL ?? "https://rxcode.app"
);
+ return GET(new Request(url.toString()));
}
From b9b33498b28aee62de9666111d3b75bc601faec9 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 14 May 2026 10:31:05 +0000
Subject: [PATCH 3/4] fix(website): restore letterSpacing and sub-label styling
in og route
Agent-Logs-Url: https://github.com/rxtech-lab/rxcode/sessions/d0d16644-d91f-4fd1-bb17-04ef9256240f
Co-authored-by: sirily11 <32106111+sirily11@users.noreply.github.com>
---
website/app/api/og/route.tsx | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/website/app/api/og/route.tsx b/website/app/api/og/route.tsx
index d30163ae..16718fb8 100644
--- a/website/app/api/og/route.tsx
+++ b/website/app/api/og/route.tsx
@@ -119,10 +119,11 @@ export async function GET(request: NextRequest) {
color: "#7A6E68",
fontSize: "22px",
marginTop: "28px",
- letterSpacing: "0.06em",
+ letterSpacing: "0.12em",
+ textTransform: "uppercase",
display: "flex",
- textAlign: "center",
- maxWidth: "820px",
+ gap: "16px",
+ alignItems: "center",
}}
>
{description}
From c203f8668052096e98937f0a257bbe22cde7b124 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 14 May 2026 10:40:18 +0000
Subject: [PATCH 4/4] fix(website): extract og render helper to fix NextRequest
type error
Agent-Logs-Url: https://github.com/rxtech-lab/rxcode/sessions/1b844b7a-139b-4ad0-876c-57372363a380
Co-authored-by: sirily11 <32106111+sirily11@users.noreply.github.com>
---
website/app/api/og/route.tsx | 133 +-------------------------------
website/app/lib/og-image.tsx | 128 ++++++++++++++++++++++++++++++
website/app/opengraph-image.tsx | 10 +--
3 files changed, 135 insertions(+), 136 deletions(-)
create mode 100644 website/app/lib/og-image.tsx
diff --git a/website/app/api/og/route.tsx b/website/app/api/og/route.tsx
index 16718fb8..a99ea08f 100644
--- a/website/app/api/og/route.tsx
+++ b/website/app/api/og/route.tsx
@@ -1,138 +1,13 @@
-import { ImageResponse } from "next/og";
import { NextRequest } from "next/server";
+import { renderOgImage } from "../../lib/og-image";
export const runtime = "edge";
export async function GET(request: NextRequest) {
const { searchParams } = new URL(request.url);
- const title =
- searchParams.get("title") ??
- "The Visual Command Center for AI Coding Agents";
- const description =
- searchParams.get("description") ??
- "Native macOS · Claude Code & Codex · Free & Open Source";
+ const title = searchParams.get("title") ?? undefined;
+ const description = searchParams.get("description") ?? undefined;
- return new ImageResponse(
- (
-
- {/* Subtle grid overlay */}
-
-
- {/* Glow */}
-
-
- {/* Logo + Name */}
-
-
-
- Rx
-
-
-
- RxCode
-
-
-
- {/* Headline */}
-
- {title}
-
-
- {/* Sub-label */}
-
- {description}
-
-
- ),
- {
- width: 1200,
- height: 630,
- }
- );
+ return renderOgImage(title, description);
}
diff --git a/website/app/lib/og-image.tsx b/website/app/lib/og-image.tsx
new file mode 100644
index 00000000..27135a5e
--- /dev/null
+++ b/website/app/lib/og-image.tsx
@@ -0,0 +1,128 @@
+import { ImageResponse } from "next/og";
+
+export const OG_SIZE = { width: 1200, height: 630 };
+
+export function renderOgImage(
+ title = "The Visual Command Center for AI Coding Agents",
+ description = "Native macOS · Claude Code & Codex · Free & Open Source"
+): ImageResponse {
+ return new ImageResponse(
+ (
+
+ {/* Subtle grid overlay */}
+
+
+ {/* Glow */}
+
+
+ {/* Logo + Name */}
+
+
+
+ Rx
+
+
+
+ RxCode
+
+
+
+ {/* Headline */}
+
+ {title}
+
+
+ {/* Sub-label */}
+
+ {description}
+
+
+ ),
+ { ...OG_SIZE }
+ );
+}
diff --git a/website/app/opengraph-image.tsx b/website/app/opengraph-image.tsx
index 024a79d6..585316de 100644
--- a/website/app/opengraph-image.tsx
+++ b/website/app/opengraph-image.tsx
@@ -1,4 +1,4 @@
-import { GET } from "./api/og/route";
+import { renderOgImage } from "./lib/og-image";
export const runtime = "edge";
@@ -6,10 +6,6 @@ export const alt = "RxCode — The Visual Command Center for AI Coding Agents";
export const size = { width: 1200, height: 630 };
export const contentType = "image/png";
-export default async function Image() {
- const url = new URL(
- "/api/og",
- process.env.NEXT_PUBLIC_SITE_URL ?? "https://rxcode.app"
- );
- return GET(new Request(url.toString()));
+export default function Image() {
+ return renderOgImage();
}