{"id":32317,"date":"2024-01-02T07:00:00","date_gmt":"2024-01-02T15:00:00","guid":{"rendered":"https:\/\/cloudinary.com\/blog\/?p=32317"},"modified":"2024-08-15T16:51:03","modified_gmt":"2024-08-15T23:51:03","slug":"create-dynamic-social-cards-svelte-app","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/create-dynamic-social-cards-svelte-app","title":{"rendered":"Create Dynamic Social Cards for Your Svelte App With Cloudinary"},"content":{"rendered":"\n<p>An important part of creating content is having an inviting social image that shows when people share the link. Not only can this image give people more of an idea what your article is about, it can also make people more likely to notice and click on the link.<\/p>\n\n\n\n<p>For example, here\u2019s what a <a href=\"https:\/\/cloudinary.com\/blog\/boost-svelte-performance-optimized-images\">previous article about Svelte and Cloudinary<\/a> looks like when I share it with someone in Slack.\u00a0<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img width=\"1024\" height=\"569\" data-public-id=\"Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-1\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-1.png\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/w_1024,h_569,c_scale\/f_auto,q_auto\/v1704235965\/Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-1\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-1.png?_i=AA\" alt=\"\" class=\"wp-post-32317 wp-image-32318\" data-format=\"png\" data-transformations=\"f_auto,q_auto\" data-version=\"1704235965\" data-seo=\"1\" srcset=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1704235965\/Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-1\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-1.png?_i=AA 1202w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1704235965\/Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-1\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-1.png?_i=AA 300w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1704235965\/Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-1\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-1.png?_i=AA 768w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1704235965\/Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-1\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-1.png?_i=AA 1024w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>However, creating these images by hand can be time-consuming. If you have a SvelteKit site, the <a href=\"https:\/\/svelte.cloudinary.dev\/\">svelte-cloudinary package<\/a> is a great choice for creating optimized social images. Let\u2019s see how we can generate dynamic, visually engaging social card images on-the-fly with the CldOgImage component.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Generating Dynamic Social Cards Using Cloudinary in Svelte<\/h2>\n\n\n\n<p>If you want to follow along on a local project, run `npm create svelte@latest` in your terminal to create a new SvelteKit project. Then run <code>npm i svelte-cloudinary<\/code> and follow the <a href=\"https:\/\/svelte.cloudinary.dev\/\">setup instructions<\/a>.<\/p>\n\n\n\n<p>For this demo, I\u2019ll be using this <a href=\"https:\/\/unsplash.com\/photos\/the-stars-and-galaxy-as-seen-from-rocky-mountain-national-park-4dpAqfTbvKA\">Unsplash image of stars<\/a> to create social card images from. You can upload that image to your Cloudinary library or choose another image you\u2019d like to use.<\/p>\n\n\n\n<p>First, let\u2019s add the CldOgImage component to our root <code>+page.svelte<\/code>.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\">```svelte\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">script<\/span> <span class=\"hljs-attr\">lang<\/span>=<span class=\"hljs-string\">\"ts\"<\/span>&gt;<\/span><span class=\"javascript\">\n    <span class=\"hljs-keyword\">import<\/span> { CldOgImage } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'svelte-cloudinary'<\/span>;\n<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">script<\/span>&gt;<\/span>\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">CldOgImage<\/span> <span class=\"hljs-attr\">src<\/span>=<span class=\"hljs-string\">\"galaxy\"<\/span> <span class=\"hljs-attr\">text<\/span>=<span class=\"hljs-string\">\"About Cloudinary\"<\/span>  \/&gt;<\/span>\n```<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In this case, the <code>src<\/code> should be the ID of the Cloudinary image you want to use.<\/p>\n\n\n\n<p>Behind the scenes, the CldOgImage component will use Cloudinary\u2019s APIs to generate a social card image based on the parameters you provide. Cloudinary will optimize your images so that you don\u2019t serve an image that is too large or in a suboptimal format. You can apply any of Cloudinary\u2019s available <a href=\"https:\/\/cloudinary.com\/documentation\/image_transformations\">image transformations<\/a> to really make your link stand out!&nbsp;<\/p>\n\n\n\n<p>The CldOgImage component will also add the appropriate open graph tags to the `&lt;head>` of your site. If you open the devtools inspector, you\u2019ll see multiple <code>&lt;meta><\/code> elements with <code>property=\u201dog:image\u201d<\/code> or similar.\u00a0 Social media websites and other apps that embed links will use these tags to show a preview of your link.\u00a0<\/p>\n\n\n\n<p>However, CldOgImage only renders meta tags in the <code>&lt;head><\/code> of your webpage using Svelte\u2019s special <a href=\"https:\/\/svelte.dev\/docs\/special-elements#svelte-head\">svelte:head element<\/a> \u2014 there won\u2019t be anything visible on the page. If you want to easily preview the result as you make changes, you can use svelte-cloudinary\u2019s <code>getCldOgImageUrl<\/code> helper function to get the URL for the generated image and render another <code>&lt;img><\/code> for easy debugging.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\">```svelte\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">script<\/span>&gt;<\/span><span class=\"javascript\">\n    <span class=\"hljs-keyword\">import<\/span> { CldOgImage, getCldOgImageUrl } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'svelte-cloudinary'<\/span>;\n\n    <span class=\"hljs-keyword\">let<\/span> props = {\n   \t <span class=\"hljs-attr\">src<\/span>: <span class=\"hljs-string\">'galaxy'<\/span>,\n   \t <span class=\"hljs-attr\">text<\/span>: <span class=\"hljs-string\">'About Cloudinary'<\/span>\n    };\n\n    <span class=\"hljs-keyword\">let<\/span> ogSrc = getCldOgImageUrl(props);\n<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">script<\/span>&gt;<\/span>\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">CldOgImage<\/span> {<span class=\"hljs-attr\">...props<\/span>} \/&gt;<\/span>\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">h2<\/span>&gt;<\/span>OG Preview<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">h2<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">img<\/span> <span class=\"hljs-attr\">src<\/span>=<span class=\"hljs-string\">{ogSrc}<\/span> \/&gt;<\/span>\n```<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"wp-block-image size-large\"><img width=\"1024\" height=\"541\" data-public-id=\"Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-2\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-2.png\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/w_1024,h_541,c_scale\/f_auto,q_auto\/v1704235956\/Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-2\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-2.png?_i=AA\" alt=\"\" class=\"wp-post-32317 wp-image-32319\" data-format=\"png\" data-transformations=\"f_auto,q_auto\" data-version=\"1704235956\" data-seo=\"1\" srcset=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1704235956\/Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-2\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-2.png?_i=AA 1999w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1704235956\/Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-2\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-2.png?_i=AA 300w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1704235956\/Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-2\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-2.png?_i=AA 768w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1704235956\/Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-2\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-2.png?_i=AA 1024w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1704235956\/Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-2\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-2.png?_i=AA 1536w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>You can also perform many different transformations to your image, just like <a href=\"https:\/\/svelte.cloudinary.dev\/cldimage\/examples\/\">with the CldImage component<\/a>. For example, to change the text color and font and move the text to the bottom of the image, you can use the <code>overlays<\/code> prop:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php shcb-wrap-lines\">```svelte\n&lt;CldOgImage\n    src=<span class=\"hljs-string\">\"galaxy\"<\/span>\n    overlays={&#91;\n   \t {\n   \t\t text: {\n   \t\t\t color: <span class=\"hljs-string\">'white'<\/span>,\n   \t\t\t fontFamily: <span class=\"hljs-string\">'Source Sans Pro'<\/span>,\n   \t\t\t fontSize: <span class=\"hljs-number\">160<\/span>,\n   \t\t\t text: <span class=\"hljs-string\">'Getting Started With Cloudinary'<\/span>\n   \t\t },\n   \t\t position: {\n   \t\t\t y: <span class=\"hljs-number\">100<\/span>,\n   \t\t\t gravity: <span class=\"hljs-string\">'south'<\/span>\n   \t\t }\n   \t }\n    ]}\n\/&gt;\n```<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"wp-block-image size-large\"><img width=\"1024\" height=\"535\" data-public-id=\"Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-3-1\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-3-1.png\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/w_1024,h_535,c_scale\/f_auto,q_auto\/v1704235952\/Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-3-1\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-3-1.png?_i=AA\" alt=\"\" class=\"wp-post-32317 wp-image-32322\" data-format=\"png\" data-transformations=\"f_auto,q_auto\" data-version=\"1704235952\" data-seo=\"1\" srcset=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1704235952\/Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-3-1\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-3-1.png?_i=AA 1200w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1704235952\/Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-3-1\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-3-1.png?_i=AA 300w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1704235952\/Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-3-1\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-3-1.png?_i=AA 768w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1704235952\/Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-3-1\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-3-1.png?_i=AA 1024w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>One useful feature is Cloudinary\u2019s dynamic word-wrap depending on the title\u2019s length. With the following properties, Cloudinary will fit the text to the given size (in this case, 2100) and move subsequent text to the next lines.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php shcb-wrap-lines\">```svelte\n&lt;CldOgImage\n    src=<span class=\"hljs-string\">\"galaxy\"<\/span>\n    overlays={&#91;\n   \t {\n   \t\t text: {\n   \t\t\t color: <span class=\"hljs-string\">'white'<\/span>,\n   \t\t\t fontFamily: <span class=\"hljs-string\">'Source Sans Pro'<\/span>,\n   \t\t\t fontSize: <span class=\"hljs-number\">160<\/span>,\n   \t\t\t text: <span class=\"hljs-string\">'Getting Started With Cloudinary &amp; CldImage &amp; CldOgImage &amp; More'<\/span>\n   \t\t },\n   \t\t position: {\n   \t\t\t x: <span class=\"hljs-number\">50<\/span>,\n   \t\t\t y: <span class=\"hljs-number\">100<\/span>,\n   \t\t\t gravity: <span class=\"hljs-string\">'south_west'<\/span>\n   \t\t },\n   \t\t effects: &#91;\n   \t\t\t {\n   \t\t\t\t crop: <span class=\"hljs-string\">'fit'<\/span>,\n   \t\t\t\t width: <span class=\"hljs-number\">2100<\/span>\n   \t\t\t }\n   \t\t ]\n   \t }\n    ]}\n\/&gt;\n```<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"wp-block-image size-large\"><img width=\"1024\" height=\"535\" data-public-id=\"Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-4-1\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-4-1.png\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/w_1024,h_535,c_scale\/f_auto,q_auto\/v1704235949\/Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-4-1\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-4-1.png?_i=AA\" alt=\"\" class=\"wp-post-32317 wp-image-32323\" data-format=\"png\" data-transformations=\"f_auto,q_auto\" data-version=\"1704235949\" data-seo=\"1\" srcset=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1704235949\/Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-4-1\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-4-1.png?_i=AA 1200w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1704235949\/Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-4-1\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-4-1.png?_i=AA 300w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1704235949\/Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-4-1\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-4-1.png?_i=AA 768w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1704235949\/Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-4-1\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-4-1.png?_i=AA 1024w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>For more, see the <a href=\"https:\/\/svelte.cloudinary.dev\/cldogimage\/configuration\/\">CldOgImage docs<\/a>. <a href=\"https:\/\/svelte.cloudinary.dev\/cldimage\/examples\/\">The CldImage docs<\/a> also have a more extensive list of different transformation examples \u2014 anything you can apply to a CldImage, you can also apply to a CldOgImage.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Automating the Social Card Creation Process<\/h2>\n\n\n\n<p>The CldOgImage component is particularly useful when you want to automate your social card creation process. If you\u2019re publishing articles frequently, you don\u2019t want to create social images by hand every time. Instead, use this component and Cloudinary\u2019s APIs to dynamically generate social images based on your article metadata.<\/p>\n\n\n\n<p>For example, let\u2019s say you have a +page.svelte file for your blog posts.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\">```svelte\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">script<\/span>&gt;<\/span><span class=\"javascript\">\n\t<span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">let<\/span> data;\n<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">script<\/span>&gt;<\/span>\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">h1<\/span>&gt;<\/span>{data.title}<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">h1<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">p<\/span>&gt;<\/span>{data.author}<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">p<\/span>&gt;<\/span>\n\n{@html data.content}\n```<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>First, you can create an ArticleOgImage component that takes an article title and renders an OG image. We\u2019ll use the configuration from the previous example and pass a dynamic title.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\">```svelte\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">script<\/span>&gt;<\/span><span class=\"javascript\">\n    <span class=\"hljs-keyword\">import<\/span> { CldOgImage } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'svelte-cloudinary'<\/span>;\n    <span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">let<\/span> title;\n<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">script<\/span>&gt;<\/span>\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">CldOgImage<\/span>\n    <span class=\"hljs-attr\">src<\/span>=<span class=\"hljs-string\">\"galaxy\"<\/span>\n    <span class=\"hljs-attr\">overlays<\/span>=<span class=\"hljs-string\">{&#91;<\/span>\n   \t {\n   \t\t <span class=\"hljs-attr\">text:<\/span> {\n   \t\t\t <span class=\"hljs-attr\">color:<\/span> '<span class=\"hljs-attr\">white<\/span>',\n   \t\t\t <span class=\"hljs-attr\">fontFamily:<\/span> '<span class=\"hljs-attr\">Source<\/span> <span class=\"hljs-attr\">Sans<\/span> <span class=\"hljs-attr\">Pro<\/span>',\n   \t\t\t <span class=\"hljs-attr\">fontSize:<\/span> <span class=\"hljs-attr\">160<\/span>,\n   \t\t\t <span class=\"hljs-attr\">text:<\/span> <span class=\"hljs-attr\">title<\/span>\n   \t\t }\n        \t\t \/\/ <span class=\"hljs-attr\">the<\/span> <span class=\"hljs-attr\">rest<\/span> <span class=\"hljs-attr\">as<\/span> <span class=\"hljs-attr\">before<\/span>\n   \t }\n    ]}\n\/&gt;<\/span>\n```<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Then our article page can use that component so that each article has a dynamically generated social image.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\"><span class=\"hljs-string\">``<\/span><span class=\"hljs-string\">`svelte\n&lt;ArticleOgImage title={data.title} \/&gt;\n`<\/span><span class=\"hljs-string\">``<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>For example, if <code>data.title<\/code> was \u201cHow to use the CldOgImage component\u201d, the social image would look like this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img width=\"1024\" height=\"535\" data-public-id=\"Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-5\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-5.png\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/w_1024,h_535,c_scale\/f_auto,q_auto\/v1704235945\/Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-5\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-5.png?_i=AA\" alt=\"\" class=\"wp-post-32317 wp-image-32324\" data-format=\"png\" data-transformations=\"f_auto,q_auto\" data-version=\"1704235945\" data-seo=\"1\" srcset=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1704235945\/Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-5\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-5.png?_i=AA 1200w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1704235945\/Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-5\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-5.png?_i=AA 300w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1704235945\/Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-5\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-5.png?_i=AA 768w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1704235945\/Web_Assets\/blog\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-5\/Create-Dynamic-Social-Cards-for-Your-Svelte-App-5.png?_i=AA 1024w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>By using Cloudinary\u2019s cropping, the text will automatically wrap to the next line for long titles.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Wrapping Up<\/h2>\n\n\n\n<p>In this post, we showed how easy it is to create dynamic social images using Cloudinary\u2019s CldOgImage component in a SvelteKit app. These social images make your links stand out more when you share them, and with svelte-cloudinary you can generate them automatically instead of creating one manually for every article or link you post.<\/p>\n\n\n\n<p>While we focused on CldOgImage today, the svelte-cloudinary package comes with other built-in components to help you optimize and customize your images:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A <a href=\"https:\/\/svelte.cloudinary.dev\/cldimage\/usage\/\">CldImage<\/a> component for displaying optimized images from your Cloudinary library.<\/li>\n\n\n\n<li><a href=\"https:\/\/svelte.cloudinary.dev\/clduploadbutton\/usage\/\">CldUploadButton<\/a> and <a href=\"https:\/\/svelte.cloudinary.dev\/clduploadwidget\/usage\/\">CldUploadWidget<\/a> components to easily upload media to Cloudinary.<\/li>\n\n\n\n<li>A <a href=\"https:\/\/svelte.cloudinary.dev\/cldvideoplayer\/usage\/\">CldVideoPlayer<\/a> component to embed Cloudinary videos.<\/li>\n<\/ul>\n\n\n\n<p>Svelte continues to grow in popularity \u2013 if you haven\u2019t tried it before, check out <a href=\"https:\/\/learn.svelte.dev\">the official tutorial<\/a> and keep svelte-cloudinary in mind when you need to add images to your Svelte site.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>An important part of creating content is having an inviting social image that shows when people share the link. Not only can this image give people more of an idea what your article is about, it can also make people more likely to notice and click on the link. For example, here\u2019s what a previous [&hellip;]<\/p>\n","protected":false},"author":87,"featured_media":32326,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[134,370,376],"class_list":["post-32317","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-guest-post","tag-image","tag-svelte"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.6 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Social Images Made Easy With Cloudinary and Svelte<\/title>\n<meta name=\"description\" content=\"Creating social images using Cloudinary&#039;s component in a SvelteKit app makes your links stand out more when shared. Learn how.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cloudinary.com\/blog\/create-dynamic-social-cards-svelte-app\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Create Dynamic Social Cards for Your Svelte App With Cloudinary\" \/>\n<meta property=\"og:description\" content=\"Creating social images using Cloudinary&#039;s component in a SvelteKit app makes your links stand out more when shared. Learn how.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/create-dynamic-social-cards-svelte-app\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-01-02T15:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-08-15T23:51:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1702412318\/Svelte_dynamic_social_cards-Blog\/Svelte_dynamic_social_cards-Blog-jpg?_i=AA\" \/>\n\t<meta property=\"og:image:width\" content=\"2000\" \/>\n\t<meta property=\"og:image:height\" content=\"1100\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"melindapham\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"NewsArticle\",\"@id\":\"https:\/\/cloudinary.com\/blog\/create-dynamic-social-cards-svelte-app#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/create-dynamic-social-cards-svelte-app\"},\"author\":{\"name\":\"melindapham\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/0d5ad601e4c3b5be89245dfb14be42d9\"},\"headline\":\"Create Dynamic Social Cards for Your Svelte App With Cloudinary\",\"datePublished\":\"2024-01-02T15:00:00+00:00\",\"dateModified\":\"2024-08-15T23:51:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/create-dynamic-social-cards-svelte-app\"},\"wordCount\":810,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/create-dynamic-social-cards-svelte-app#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1702412318\/Svelte_dynamic_social_cards-Blog\/Svelte_dynamic_social_cards-Blog.jpg?_i=AA\",\"keywords\":[\"Guest Post\",\"Image\",\"Svelte\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2024\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/create-dynamic-social-cards-svelte-app\",\"url\":\"https:\/\/cloudinary.com\/blog\/create-dynamic-social-cards-svelte-app\",\"name\":\"Social Images Made Easy With Cloudinary and Svelte\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/create-dynamic-social-cards-svelte-app#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/create-dynamic-social-cards-svelte-app#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1702412318\/Svelte_dynamic_social_cards-Blog\/Svelte_dynamic_social_cards-Blog.jpg?_i=AA\",\"datePublished\":\"2024-01-02T15:00:00+00:00\",\"dateModified\":\"2024-08-15T23:51:03+00:00\",\"description\":\"Creating social images using Cloudinary's component in a SvelteKit app makes your links stand out more when shared. Learn how.\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/create-dynamic-social-cards-svelte-app#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/create-dynamic-social-cards-svelte-app\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/create-dynamic-social-cards-svelte-app#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1702412318\/Svelte_dynamic_social_cards-Blog\/Svelte_dynamic_social_cards-Blog.jpg?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1702412318\/Svelte_dynamic_social_cards-Blog\/Svelte_dynamic_social_cards-Blog.jpg?_i=AA\",\"width\":2000,\"height\":1100},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/create-dynamic-social-cards-svelte-app#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create Dynamic Social Cards for Your Svelte App With Cloudinary\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"name\":\"Cloudinary Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cloudinary.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\",\"name\":\"Cloudinary Blog\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"width\":312,\"height\":60,\"caption\":\"Cloudinary Blog\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/0d5ad601e4c3b5be89245dfb14be42d9\",\"name\":\"melindapham\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e6f989fa97fe94be61596259d8629c3df65aec4c7da5c0000f90d810f313d4f4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e6f989fa97fe94be61596259d8629c3df65aec4c7da5c0000f90d810f313d4f4?s=96&d=mm&r=g\",\"caption\":\"melindapham\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Social Images Made Easy With Cloudinary and Svelte","description":"Creating social images using Cloudinary's component in a SvelteKit app makes your links stand out more when shared. Learn how.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cloudinary.com\/blog\/create-dynamic-social-cards-svelte-app","og_locale":"en_US","og_type":"article","og_title":"Create Dynamic Social Cards for Your Svelte App With Cloudinary","og_description":"Creating social images using Cloudinary's component in a SvelteKit app makes your links stand out more when shared. Learn how.","og_url":"https:\/\/cloudinary.com\/blog\/create-dynamic-social-cards-svelte-app","og_site_name":"Cloudinary Blog","article_published_time":"2024-01-02T15:00:00+00:00","article_modified_time":"2024-08-15T23:51:03+00:00","og_image":[{"width":2000,"height":1100,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1702412318\/Svelte_dynamic_social_cards-Blog\/Svelte_dynamic_social_cards-Blog-jpg?_i=AA","type":"image\/jpeg"}],"author":"melindapham","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/create-dynamic-social-cards-svelte-app#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/create-dynamic-social-cards-svelte-app"},"author":{"name":"melindapham","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/0d5ad601e4c3b5be89245dfb14be42d9"},"headline":"Create Dynamic Social Cards for Your Svelte App With Cloudinary","datePublished":"2024-01-02T15:00:00+00:00","dateModified":"2024-08-15T23:51:03+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/create-dynamic-social-cards-svelte-app"},"wordCount":810,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/create-dynamic-social-cards-svelte-app#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1702412318\/Svelte_dynamic_social_cards-Blog\/Svelte_dynamic_social_cards-Blog.jpg?_i=AA","keywords":["Guest Post","Image","Svelte"],"inLanguage":"en-US","copyrightYear":"2024","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/create-dynamic-social-cards-svelte-app","url":"https:\/\/cloudinary.com\/blog\/create-dynamic-social-cards-svelte-app","name":"Social Images Made Easy With Cloudinary and Svelte","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/create-dynamic-social-cards-svelte-app#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/create-dynamic-social-cards-svelte-app#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1702412318\/Svelte_dynamic_social_cards-Blog\/Svelte_dynamic_social_cards-Blog.jpg?_i=AA","datePublished":"2024-01-02T15:00:00+00:00","dateModified":"2024-08-15T23:51:03+00:00","description":"Creating social images using Cloudinary's component in a SvelteKit app makes your links stand out more when shared. Learn how.","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/create-dynamic-social-cards-svelte-app#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/create-dynamic-social-cards-svelte-app"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/create-dynamic-social-cards-svelte-app#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1702412318\/Svelte_dynamic_social_cards-Blog\/Svelte_dynamic_social_cards-Blog.jpg?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1702412318\/Svelte_dynamic_social_cards-Blog\/Svelte_dynamic_social_cards-Blog.jpg?_i=AA","width":2000,"height":1100},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/create-dynamic-social-cards-svelte-app#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Create Dynamic Social Cards for Your Svelte App With Cloudinary"}]},{"@type":"WebSite","@id":"https:\/\/cloudinary.com\/blog\/#website","url":"https:\/\/cloudinary.com\/blog\/","name":"Cloudinary Blog","description":"","publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cloudinary.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cloudinary.com\/blog\/#organization","name":"Cloudinary Blog","url":"https:\/\/cloudinary.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","width":312,"height":60,"caption":"Cloudinary Blog"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/0d5ad601e4c3b5be89245dfb14be42d9","name":"melindapham","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e6f989fa97fe94be61596259d8629c3df65aec4c7da5c0000f90d810f313d4f4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e6f989fa97fe94be61596259d8629c3df65aec4c7da5c0000f90d810f313d4f4?s=96&d=mm&r=g","caption":"melindapham"}}]}},"jetpack_featured_media_url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1702412318\/Svelte_dynamic_social_cards-Blog\/Svelte_dynamic_social_cards-Blog.jpg?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/32317","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/users\/87"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/comments?post=32317"}],"version-history":[{"count":6,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/32317\/revisions"}],"predecessor-version":[{"id":35273,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/32317\/revisions\/35273"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/32326"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=32317"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=32317"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=32317"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}