ยฉ 2026 Hedgehog Software, LLC
cloudflareImageLoader.ts
const normalizeSrc = (src: string) => { return src.startsWith('/') ? src.slice(1) : src } export default function cloudflareLoader({ src, width, quality, }: { src: string width: number quality?: number }) { const params = [`width=${width}`] if (quality) { params.push(`quality=${quality}`) } const paramsString = params.join(',') const isDev = process.env.NODE_ENV === 'development' const baseUrl = isDev ? 'https://pkp.io' : '' return `${baseUrl}/cdn-cgi/image/${paramsString}/${normalizeSrc(src)}` }
next.config.mjs
import rehypePrism from '@mapbox/rehype-prism' import nextMDX from '@next/mdx' import remarkGfm from 'remark-gfm' /** @type {import('next').NextConfig} */ const nextConfig = { pageExtensions: ['js', 'jsx', 'ts', 'tsx', 'mdx'], images: { loader: 'custom', loaderFile: './src/lib/cloudflareImageLoader.ts', }, } const withMDX = nextMDX({ extension: /\.mdx?$/, options: { remarkPlugins: [remarkGfm], rehypePlugins: [rehypePrism], }, }) export default withMDX(nextConfig)
ERROR 9421: Too many redirects