← back to Grant

app/opengraph-image.tsx

173 lines

import { ImageResponse } from 'next/og';

export const alt = 'Grant — Every grant, ranked by fit.';
export const size = { width: 1200, height: 630 };
export const contentType = 'image/png';

export default function OgImage() {
  return new ImageResponse(
    (
      <div
        style={{
          width: '1200px',
          height: '630px',
          display: 'flex',
          flexDirection: 'column',
          alignItems: 'center',
          justifyContent: 'center',
          backgroundColor: '#f4f7f5',
          position: 'relative',
        }}
      >
        {/* Emerald accent bar top */}
        <div
          style={{
            position: 'absolute',
            top: 0,
            left: 0,
            right: 0,
            height: '8px',
            backgroundColor: '#047857',
            display: 'flex',
          }}
        />

        {/* Wordmark */}
        <div
          style={{
            display: 'flex',
            alignItems: 'center',
            gap: '16px',
            marginBottom: '32px',
          }}
        >
          {/* Icon mark */}
          <div
            style={{
              width: '72px',
              height: '72px',
              borderRadius: '16px',
              backgroundColor: '#047857',
              display: 'flex',
              alignItems: 'center',
              justifyContent: 'center',
            }}
          >
            <div
              style={{
                color: '#ffffff',
                fontSize: '40px',
                fontWeight: 800,
                fontFamily: 'sans-serif',
                display: 'flex',
              }}
            >
              G
            </div>
          </div>

          <div
            style={{
              fontSize: '72px',
              fontWeight: 800,
              color: '#047857',
              fontFamily: 'sans-serif',
              letterSpacing: '-2px',
              display: 'flex',
            }}
          >
            Grant
          </div>
        </div>

        {/* Tagline */}
        <div
          style={{
            fontSize: '32px',
            fontWeight: 600,
            color: '#1f2937',
            fontFamily: 'sans-serif',
            textAlign: 'center',
            marginBottom: '20px',
            display: 'flex',
          }}
        >
          Every grant, ranked by fit.
        </div>

        {/* Sub-tagline */}
        <div
          style={{
            fontSize: '22px',
            fontWeight: 400,
            color: '#6b7280',
            fontFamily: 'sans-serif',
            textAlign: 'center',
            maxWidth: '800px',
            lineHeight: 1.5,
            display: 'flex',
          }}
        >
          Federal, foundation, corporate, and local grants — one fit-scored feed for your mission.
        </div>

        {/* Pill badges */}
        <div
          style={{
            display: 'flex',
            gap: '12px',
            marginTop: '48px',
          }}
        >
          {['Federal', 'Foundation', 'Corporate', 'Local'].map((label) => (
            <div
              key={label}
              style={{
                backgroundColor: '#10b981',
                color: '#ffffff',
                fontSize: '18px',
                fontWeight: 600,
                fontFamily: 'sans-serif',
                padding: '8px 20px',
                borderRadius: '9999px',
                display: 'flex',
              }}
            >
              {label}
            </div>
          ))}
        </div>

        {/* Emerald accent bar bottom */}
        <div
          style={{
            position: 'absolute',
            bottom: 0,
            left: 0,
            right: 0,
            height: '4px',
            backgroundColor: '#10b981',
            display: 'flex',
          }}
        />

        {/* Domain */}
        <div
          style={{
            position: 'absolute',
            bottom: '20px',
            right: '40px',
            fontSize: '16px',
            color: '#9ca3af',
            fontFamily: 'sans-serif',
            display: 'flex',
          }}
        >
          grant.agentabrams.com
        </div>
      </div>
    ),
    { ...size }
  );
}