diff --git a/apps/web/app/api/og/route.tsx b/apps/web/app/api/og/route.tsx index f82bc04..b5f6f1e 100644 --- a/apps/web/app/api/og/route.tsx +++ b/apps/web/app/api/og/route.tsx @@ -1,102 +1,110 @@ -import { ImageResponse } from "next/og"; +import { generateColors } from '@/data/generate-colors' +import { BaseColorTypes } from '@/types/app' +import { ImageResponse } from 'next/og' // App router includes @vercel/og. // No need to install it. //! DOSE IT MAKE A DIFFERENCE? edge vs node? // export const runtime = "edge"; -export const alt = "Fluid Colors"; +export const alt = 'Fluid Colors' export const size = { - width: 1200, height: 630, -}; + width: 1200, +} export async function GET(request: Request) { try { - const { searchParams } = new URL(request.url); + const { searchParams } = new URL(request.url) - // ?colors= - const hasColors = searchParams.has("colors"); - const colors = hasColors ? searchParams.get("colors") : "My default colors"; + const primary = searchParams.get('primary') + const secondary = searchParams.get('secondary') + const accent = searchParams.get('accent') + + const baseColors = { + primary: primary ?? '#FF0000', + secondary: secondary ?? '#00FF00', + accent: accent ?? '#0000FF', + } - const { data, error } = await fetch( - `${ - process.env.NEXT_PUBLIC_URL - }/api/generate-color-palette/?colors=${encodeURIComponent(colors)}`, - ).then((res) => res.json()); + const colors = generateColors(baseColors) - if (error) { - throw new Error(error); + const { colorPalettes } = colors + + // throw if object is empty + + if (Object.keys(colorPalettes).length === 0) { + throw new Error('Failed to generate color palettes') } - const { colorPalettes } = data; - const backgroundGradientFrom = colorPalettes.gray[8].color; - const backgroundGradientTo = colorPalettes.gray[9].color; - const backgroundLinearGradient = `linear-gradient(135deg, ${backgroundGradientFrom} 0%, ${backgroundGradientTo} 100%)`; - const paletteBackgroundColor = colorPalettes.gray[0].color; - const accentColor = colorPalettes.accent[7].color; - const shadowLayer_1 = colorPalettes.primary[9].color; - const shadowLayer_2 = colorPalettes.secondary[10].color; + const backgroundGradientFrom = colorPalettes.gray[8].color + const backgroundGradientTo = colorPalettes.gray[9].color + const backgroundLinearGradient = `linear-gradient(135deg, ${backgroundGradientFrom} 0%, ${backgroundGradientTo} 100%)` + const paletteBackgroundColor = colorPalettes.gray[0].color + const accentColor = colorPalettes.accent[7].color + const shadowLayer_1 = colorPalettes.primary[9].color + const shadowLayer_2 = colorPalettes.secondary[10].color + const colorPaletteNames: Array = ['primary', 'secondary', 'accent', 'gray'] return new ImageResponse( (
{ // generate a rectangle for each color, for each palette - Object.keys(colorPalettes).map((paletteName) => { - const palette = colorPalettes[paletteName]; + colorPaletteNames.map((paletteName) => { + const palette = colorPalettes[paletteName as BaseColorTypes] return (
{palette.map((color) => { @@ -104,20 +112,20 @@ export async function GET(request: Request) {
- ); + ) })}
- ); + ) }) }
@@ -125,12 +133,12 @@ export async function GET(request: Request) { ), { ...size, - }, - ); + } + ) } catch (e: any) { - console.log(`${e.message}`); + console.log(`${e.message}`) return new Response(`Failed to generate the image`, { status: 500, - }); + }) } }