From 33671b7e94e7618412719a4eceadd492f7005b6a Mon Sep 17 00:00:00 2001 From: sebastjanartic <45803536-sebastjanartic@users.noreply.replit.com> Date: Thu, 5 Mar 2026 07:45:23 +0000 Subject: [PATCH] Update image links to ensure compatibility with social media sharing Updates image URLs in gallery data to use JPG versions instead of WebP for better compatibility with social media platforms like Facebook. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 517dfa7b-26ac-463d-a6e1-a58c6df97188 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: e03bc7c6-5eed-4f6c-9e9c-90776ba7f5d7 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/f209e72a-0939-48fa-84fc-57854de71967/517dfa7b-26ac-463d-a6e1-a58c6df97188/EtK2Sno Replit-Helium-Checkpoint-Created: true --- attached_assets/image_1772696561499.png | Bin 0 -> 36170 bytes server/gallery-data.json | 1056 +++++++++++------------ server/static.ts | 11 +- server/vite.ts | 11 +- 4 files changed, 548 insertions(+), 530 deletions(-) create mode 100644 attached_assets/image_1772696561499.png diff --git a/attached_assets/image_1772696561499.png b/attached_assets/image_1772696561499.png new file mode 100644 index 0000000000000000000000000000000000000000..c4c273901ace5bb3836c1a8a18de38547dc17aec GIT binary patch literal 36170 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˞+ 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/g, ">"); } +function ogImageUrl(coverImage: string, baseUrl: string): string { + if (!coverImage) return ""; + let imgPath = coverImage; + if (imgPath.endsWith(".webp")) { + imgPath = imgPath.replace(/\.webp$/, ".jpg"); + } + return imgPath.startsWith("http") ? imgPath : `${baseUrl}${imgPath}`; +} + export function serveStatic(app: Express) { const distPath = path.resolve(__dirname, "public"); if (!fs.existsSync(distPath)) { @@ -31,7 +40,7 @@ export function serveStatic(app: Express) { const protocol = req.get("x-forwarded-proto") || "https"; const baseUrl = `${protocol}://${host}`; const articleUrl = `${baseUrl}/article/${article.slug}`; - const imageUrl = article.coverImage ? (article.coverImage.startsWith("http") ? article.coverImage : `${baseUrl}${article.coverImage}`) : ""; + const imageUrl = ogImageUrl(article.coverImage || "", baseUrl); let template = await fs.promises.readFile(indexPath, "utf-8"); diff --git a/server/vite.ts b/server/vite.ts index 11972f5..5b85889 100644 --- a/server/vite.ts +++ b/server/vite.ts @@ -13,6 +13,15 @@ function escapeHtml(str: string): string { return str.replace(/&/g, "&").replace(/"/g, """).replace(//g, ">"); } +function ogImageUrl(coverImage: string, baseUrl: string): string { + if (!coverImage) return ""; + let imgPath = coverImage; + if (imgPath.endsWith(".webp")) { + imgPath = imgPath.replace(/\.webp$/, ".jpg"); + } + return imgPath.startsWith("http") ? imgPath : `${baseUrl}${imgPath}`; +} + export async function setupVite(server: Server, app: Express) { const serverOptions = { middlewareMode: true, @@ -63,7 +72,7 @@ export async function setupVite(server: Server, app: Express) { const protocol = req.get("x-forwarded-proto") || "https"; const baseUrl = `${protocol}://${host}`; const articleUrl = `${baseUrl}/article/${article.slug}`; - const imageUrl = article.coverImage ? (article.coverImage.startsWith("http") ? article.coverImage : `${baseUrl}${article.coverImage}`) : ""; + const imageUrl = ogImageUrl(article.coverImage || "", baseUrl); const ogTags = [ ``,