From ec2ef0d645a5ef95db8726fb6a91624ff9f52b0d Mon Sep 17 00:00:00 2001 From: Angel Baez Date: Sun, 25 Jan 2026 22:46:35 -0500 Subject: [PATCH] feat: add proper social card image for Open Graph sharing Replace default favicon.png (12KB) with a branded 1200x630 social card image for better appearance when sharing on social media. Blog posts with hero images now use them for og:image, while other pages use the default social card. --- scripts/generate-social-card.mjs | 85 +++++++++++++++++++++++++++++++ src/assets/social-card.png | Bin 0 -> 39983 bytes src/components/BaseHead.astro | 19 ++++--- src/layouts/BlogPost.astro | 2 +- src/layouts/Layout.astro | 6 ++- tsconfig.json | 1 + 6 files changed, 104 insertions(+), 9 deletions(-) create mode 100644 scripts/generate-social-card.mjs create mode 100644 src/assets/social-card.png diff --git a/scripts/generate-social-card.mjs b/scripts/generate-social-card.mjs new file mode 100644 index 0000000..d3990a8 --- /dev/null +++ b/scripts/generate-social-card.mjs @@ -0,0 +1,85 @@ +import sharp from 'sharp'; +import { fileURLToPath } from 'url'; +import { dirname, join } from 'path'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +// Social card dimensions (recommended for Open Graph) +const WIDTH = 1200; +const HEIGHT = 630; + +// Colors matching the site's theme +const BACKGROUND_COLOR = '#faf9f5'; // Light theme background +const TEXT_COLOR = '#141413'; // Dark text + +// Create SVG with site branding +const svg = ` + + + + + + + + + + + + + + + + + + + + Angel Baez + + + + + Full Stack Developer + + + + + + + + angel-baez.com + + +`; + +async function generateSocialCard() { + const outputPath = join(__dirname, '..', 'src', 'assets', 'social-card.png'); + + await sharp(Buffer.from(svg)) + .png() + .toFile(outputPath); + + console.log(`Social card generated: ${outputPath}`); +} + +generateSocialCard().catch(console.error); diff --git a/src/assets/social-card.png b/src/assets/social-card.png new file mode 100644 index 0000000000000000000000000000000000000000..e822691ea4f07ed6d68784bebf3ba8a375983655 GIT binary patch literal 39983 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 0 ? [...keywords, ...defaultKeywords] @@ -57,7 +64,7 @@ const esUrl = new URL(getLocalizedUrl(Astro.url.pathname, 'es'), SITE_URL); - + @@ -66,7 +73,7 @@ const esUrl = new URL(getLocalizedUrl(Astro.url.pathname, 'es'), SITE_URL); - + @@ -83,13 +90,13 @@ const esUrl = new URL(getLocalizedUrl(Astro.url.pathname, 'es'), SITE_URL); -