/** * Build a safe image URL for assets coming from the CMS. * * Rules: * - If already a full URL (http/https) → return as is * - If starts with `/uploads/` → prepend API URL (NEXT_PUBLIC_API_URL or default localhost) * - If starts with `/` → use as-is (served by Next/public) * - Otherwise → treat as relative path under `/` */ export function getCmsImageUrl(imagePath: string | undefined): string { if (!imagePath) return ""; if (imagePath.startsWith("http://") || imagePath.startsWith("https://")) { return imagePath; } if (imagePath.startsWith("/uploads/")) { const apiUrl = process.env.NEXT_PUBLIC_API_URL || "http://localhost:3001"; return `${apiUrl}${imagePath}`; } if (imagePath.startsWith("/")) { return imagePath; } return `/${imagePath}`; }