Files
joelhooks__joelclaw/apps/web/app/opengraph-image.tsx
Joel Hooks 39518c6c34 feat: Next.js best practices audit fixes (ADR-0108)
Error boundaries:
- app/error.tsx: route-level error recovery with reset button
- app/global-error.tsx: root layout failure handler with html/body

Loading skeletons:
- vault, memory, syslog, system, system/events, dashboard, voice
- Pulse shimmer matching each page's actual layout structure
- font-pixel labels for consistent dashboard aesthetic

Import aliases:
- Converted all relative imports (../../lib/, ../../../lib/) to @/*
- 40+ files across app/, components/site-header, components/mobile-nav
- tsconfig @/* alias was already configured, now actually used
2026-02-22 12:13:22 -08:00

52 lines
1.2 KiB
TypeScript

import { ImageResponse } from "next/og";
import { clawSvg } from "@/lib/claw";
export const runtime = "edge";
export const alt = "JoelClaw";
export const size = { width: 1200, height: 630 };
export const contentType = "image/png";
export default function Image() {
return new ImageResponse(
(
<div
style={{
background: "#0a0a0a",
width: "100%",
height: "100%",
display: "flex",
flexDirection: "column",
alignItems: "center",
justifyContent: "center",
gap: "32px",
}}
>
{clawSvg(160)}
<div
style={{
display: "flex",
flexDirection: "column",
alignItems: "center",
gap: "8px",
}}
>
<div
style={{
fontSize: 64,
fontWeight: 700,
color: "#e5e5e5",
letterSpacing: "-0.02em",
}}
>
JoelClaw
</div>
<div style={{ fontSize: 24, color: "#737373" }}>
My Bespoke OpenClaw-inspired Mac Mini
</div>
</div>
</div>
),
{ ...size }
);
}