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(); }