<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Bookland</title>
    <description>The latest articles on DEV Community by Bookland (@russeii).</description>
    <link>https://dev.to/russeii</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1117097%2Ff0f05e92-51f1-40d5-a7e1-d68257e8f711.jpeg</url>
      <title>DEV Community: Bookland</title>
      <link>https://dev.to/russeii</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/russeii"/>
    <language>en</language>
    <item>
      <title>Creating an Immutable Blog</title>
      <dc:creator>Bookland</dc:creator>
      <pubDate>Tue, 15 Aug 2023 18:09:15 +0000</pubDate>
      <link>https://dev.to/russeii/creating-an-immutable-blog-lli</link>
      <guid>https://dev.to/russeii/creating-an-immutable-blog-lli</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Originally posted on &lt;a href="https://blog.dappling.network/i11g-updating-an-immutable-blog/"&gt;https://blog.dappling.network/i11g-updating-an-immutable-blog/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We needed a blog for &lt;a href="https://dappling.network"&gt;dAppling&lt;/a&gt;. One of our important marketing efforts revolves around writing engaging and helpful content. The aim of this is to show two things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;We know things.&lt;/li&gt;
&lt;li&gt;We share things.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Not only that, but we like to help people in ways that we can. Sharing knowledge, for me, gives great joy. &lt;/p&gt;

&lt;h2&gt;
  
  
  High-level Goals
&lt;/h2&gt;

&lt;p&gt;So the question is, how can we use the things we know to host and share those things in a way that is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search Engine Optimization (SEO)&lt;/li&gt;
&lt;li&gt;Pretty&lt;/li&gt;
&lt;li&gt;Easy to update&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Search Engine Optimization (SEO)
&lt;/h3&gt;

&lt;p&gt;We have posted articles on &lt;a href="https://dev.to/dappling"&gt;dev.to&lt;/a&gt;, but wanted stronger search on our own domain. The ideation started a few days ago because dev.to does not allow us to use a custom domain. After reading an article advocating to &lt;a href="https://indieweb.org/POSSE"&gt;Publish (on your) Own Site, Syndicate Elsewhere&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;the practice of posting content on your own site first, then publishing copies or sharing links to third parties (like &lt;a href="https://indieweb.org/social_media"&gt;social media&lt;/a&gt; silos) with &lt;a href="https://indieweb.org/original_post_link"&gt;original post links&lt;/a&gt; to provide viewers a path to directly interacting with your content.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So the site is hosted on our domain, that's wonderful. Further, the content is statically generated, which means easier to crawl.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pretty
&lt;/h3&gt;

&lt;p&gt;I went through the templates on the 11ty &lt;a href="https://www.11ty.dev/docs/starter/"&gt;starter projects&lt;/a&gt; page and found this awesome &lt;a href="https://github.com/lwojcik/eleventy-template-bliss"&gt;"Bliss" template&lt;/a&gt; by &lt;a href="https://github.com/lwojcik"&gt;Łukasz Wójcik&lt;/a&gt; on GitHub. I think it's pretty. Thanks, Łukasz!&lt;/p&gt;

&lt;h3&gt;
  
  
  Easy to Update
&lt;/h3&gt;

&lt;p&gt;This was a consideration because if other people on our team want to update the blog, it needs to be straightforward enough to not get in anyone's way. Since this is all Markdown, along with this &lt;a href="https://github.com/alwaysbegrowing/blog/commit/7c4562bee9b4c2962cf47f4c747d8c5751ee82c1"&gt;blog post commit&lt;/a&gt;, it should be pretty self-explanatory to duplicate an article. &lt;/p&gt;

&lt;h3&gt;
  
  
  Don't Get me wrong!
&lt;/h3&gt;

&lt;p&gt;I know there are many options to write blogs that are more optimized than what I'm suggesting here. There's Medium, Substack, the aforementioned dev.to, Ghost, the list really goes on, but there's a desire of mine to make something that'll be compatible with our current infrastructure at dAppling, and I'm having fun. This is the best I have come up with, but do note, I've not exhausted all the web's offerings!&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementing this yourself
&lt;/h2&gt;

&lt;p&gt;I'm using this blog post as a way to explain-by-doing. Here's my workflow, from concept to creation. &lt;/p&gt;

&lt;h3&gt;
  
  
  Create your Content
&lt;/h3&gt;

&lt;p&gt;One can obsess over the best way to display information, and that display can be in many different formats, but what most people have seemed to converge on is &lt;a href="https://www.markdownguide.org/getting-started/"&gt;Markdown&lt;/a&gt;. Because of its portability, writing the content in markdown first and finding where to host it later is a great strategy. To that end, I am writing this in my favorite editor, &lt;a href="https://obsidian.md"&gt;Obsidian&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="/images/11ty-on-ipfs/obsidian-editor.png" class="article-body-image-wrapper"&gt;&lt;img src="/images/11ty-on-ipfs/obsidian-editor.png" alt="Obsidian editor with the above content written"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Manage your Files
&lt;/h3&gt;

&lt;p&gt;First, clone the &lt;a href="https://github.com/lwojcik/eleventy-template-bliss"&gt;"Bliss" template&lt;/a&gt; and open it up locally in your favorite file editor. When managing the files while writing the blog post, it will be helpful to run the website in development mode.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i &lt;span class="c"&gt;# first install dependencies&lt;/span&gt;
npm run dev &lt;span class="c"&gt;# start a local server&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To manage the files, you have images and content.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For images, I created a folder for the specific blog post and the related images go into this dedicated folder. The image above is then referenced as: &lt;code&gt;![Obsidian editor with the above content written](/images/11ty-on-ipfs/obsidian-editor.png)&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Content goes into the posts' folder with the markdown, saved as &lt;code&gt;07-19-11ty-on-ipfs.md&lt;/code&gt;, the date and title.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="/images/11ty-on-ipfs/file-system.png" class="article-body-image-wrapper"&gt;&lt;img src="/images/11ty-on-ipfs/file-system.png" alt="vscode showing the file structure of the blog"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And that's it! After running the server, the content with images should now be viewable at &lt;code&gt;http://localhost:8080/&amp;lt;post title&amp;gt;/&lt;/code&gt; because the template we are using, thanks to 11ty, creates that route for us.&lt;/p&gt;

&lt;p&gt;&lt;a href="/images/11ty-on-ipfs/rendered-website.png" class="article-body-image-wrapper"&gt;&lt;img src="/images/11ty-on-ipfs/rendered-website.png" alt="rendered website"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Create your dAppling Project
&lt;/h2&gt;

&lt;p&gt;Now this should be the easy part. Head over to &lt;a href="https://dappling.network"&gt;dAppling Network&lt;/a&gt;, sign in, and create a new project. The steps for this are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sign-up and authorize the GitHub App.&lt;/li&gt;
&lt;li&gt;Create a new project and select your blog repo.&lt;/li&gt;
&lt;li&gt;Accept the build settings, they should be automatically detected.&lt;/li&gt;
&lt;li&gt;Hit that big deploy button, and wait!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="/images/11ty-on-ipfs/deploy-project.png" class="article-body-image-wrapper"&gt;&lt;img src="/images/11ty-on-ipfs/deploy-project.png" alt="deployment steps on dAppling"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You'll wait a bit while the code is deployed, and you should get a link to the site deployed on IPFS. We have a friendly URL like &lt;a href="https://blog-xn6nf4.dappling.network"&gt;blog-xn6nf4.dappling.network&lt;/a&gt; and the template should show up!&lt;/p&gt;

&lt;p&gt;&lt;a href="/images/11ty-on-ipfs/live-on-dappling.png" class="article-body-image-wrapper"&gt;&lt;img src="/images/11ty-on-ipfs/live-on-dappling.png" alt="live site on dAppling"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Update your dAppling Project
&lt;/h2&gt;

&lt;p&gt;Now, to update a new blog post, you can either update your "main" branch, by either pushing directly or by creating a PR and merging it. I will be pushing directly to the branch and let dAppling deploy the site. After that, the site should be live!&lt;/p&gt;

&lt;h3&gt;
  
  
  Artifacts
&lt;/h3&gt;

&lt;p&gt;I pushed it after writing that paragraph, and it created a &lt;a href="https://gardener-ivy-jfecm0i.dappling.network/ipfs-11ty-dappling-i11g/"&gt;preview URL&lt;/a&gt; for me. You can view the &lt;a href="https://www.dappling.network/projects/4f6bf966-989f-434c-b1e1-739967f3de4d/BuildImage74257FD8-Ag37vnjYXUuu:b9627f25-d7d1-46a9-8892-40fc1327458b"&gt;deployment on dAppling&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="/images/11ty-on-ipfs/deployment-page.png" class="article-body-image-wrapper"&gt;&lt;img src="/images/11ty-on-ipfs/deployment-page.png" alt="deployment page on dAppling"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And the &lt;a href="https://github.com/alwaysbegrowing/blog/commit/7c4562bee9b4c2962cf47f4c747d8c5751ee82c1"&gt;Commit on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="/images/11ty-on-ipfs/commit.png" class="article-body-image-wrapper"&gt;&lt;img src="/images/11ty-on-ipfs/commit.png" alt="commit on github with changes"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Did I learn?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The creation of this blog post was slower than using an editor online. This is mainly from images. I have to take screenshots and then save them locally. I prefer this over hosting them on a website because having them hosted alongside the website guarantees they will always be available, whereas an online service might be down.&lt;/li&gt;
&lt;li&gt;Introducing changes to the blog layout is harder than, say Notion, as there aren't many controls over the typed markdown. Luckily, I like the way the site looks out-of-the-box. &lt;/li&gt;
&lt;li&gt;I dare conclude that this blog post took me about 4 hours. That is long! I hope it was because of the do-as-I-go approach.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclude
&lt;/h2&gt;

&lt;p&gt;I think this set-up with writing and updating in a single place and having deployment handled by dAppling will be convenient enough to use right now. There are some changes I still need to make, like branding on the site. Of course, we also miss out on features like comments and engagement. I guess we will learn more when I make the next post trying to figure out how the heck I syndicate this everywhere.&lt;/p&gt;

&lt;p&gt;Thank you for your time, and if you have any questions, do reach out.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Originally posted on &lt;a href="https://blog.dappling.network/i11g-updating-an-immutable-blog/"&gt;https://blog.dappling.network/i11g-updating-an-immutable-blog/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
    </item>
    <item>
      <title>Poetry in Imagery • Meta Image Generation in Next.js</title>
      <dc:creator>Bookland</dc:creator>
      <pubDate>Tue, 15 Aug 2023 18:06:25 +0000</pubDate>
      <link>https://dev.to/russeii/poetry-in-imagery-meta-image-generation-in-nextjs-1ddi</link>
      <guid>https://dev.to/russeii/poetry-in-imagery-meta-image-generation-in-nextjs-1ddi</guid>
      <description>&lt;p&gt;When I stroll through the web without intention, every link, title, and image vies for my attention.  With a goal in mind, those same links, titles, and images seem to lack dimension. I struggle to find the information I seek; behind each possible link lacking context, I'm left blind.&lt;/p&gt;

&lt;p&gt;Meta tags of a website are a helpful guide. Used to share information about potential content behind a link, these small tags can hold enormous amounts of useful data. As long as they are used correctly, that is. I hope their use is expanded and can help and inspire creators to put more energy into their own site's images.&lt;/p&gt;

&lt;h2&gt;
  
  
  Essence of Representation
&lt;/h2&gt;

&lt;p&gt;Meta tags provide glimpses into the content without requiring users to visit the page itself. These tags can articulate essential details like the title, description, and intended size of the site. Open Graph tags (og), introduced by Facebook, define a way to share a summary of the content, location data, media information, and &lt;a href="https://ogp.me/"&gt;more&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;The tag for an arbitrary image, &lt;code&gt;og:image&lt;/code&gt;, I think has the most potential. These images are not mere visual aids; they are the distilled essence of the web page they represent. A visual haiku. For our app &lt;a href="https://www.dappling.network"&gt;dAppling&lt;/a&gt;, I wanted to follow GitHub's lead with a desire to give the user as much information as possible. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--a7XITPAB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.blog/wp-content/uploads/2021/06/framework-open-graph-images_fig-1-GitHub-twitter-card.png%3Fresize%3D2400%252C1260" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--a7XITPAB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.blog/wp-content/uploads/2021/06/framework-open-graph-images_fig-1-GitHub-twitter-card.png%3Fresize%3D2400%252C1260" alt="" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By way of example, GItHub's meta images. Explained more in their &lt;a href="https://github.blog/2021-06-22-framework-building-open-graph-images/"&gt;A framework for building Open Graph images&lt;/a&gt; article, the image succinctly and, in my opinion, beautifully explains what you will see before you see it. I love these images. From this little representation, I have been able to quickly gather information and confidently ignore or navigate into the site.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Alchemist's Wand
&lt;/h2&gt;

&lt;p&gt;Creating these visual haiku is a craft, a magical art. With tools like &lt;a href="https://vercel.com/blog/introducing-vercel-og-image-generation-fast-dynamic-social-card-images"&gt;@vercel/og&lt;/a&gt; and &lt;a href="https://github.com/vercel/next.js"&gt;Next.js&lt;/a&gt;, I started my journey.&lt;/p&gt;

&lt;p&gt;A flick of the wrist and a small creation appeared &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--d-QUgxm2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.dappling.network/api/og%3Fid%3Dblog" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--d-QUgxm2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.dappling.network/api/og%3Fid%3Dblog" alt="" width="800" height="420"&gt;&lt;/a&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cKJdI2sB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.dappling.network/api/og%3Fid%3Ddog" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cKJdI2sB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.dappling.network/api/og%3Fid%3Ddog" alt="" width="800" height="420"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cS-r-xNd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.dappling.network/api/og%3Fid%3Dbog" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cS-r-xNd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.dappling.network/api/og%3Fid%3Dbog" alt="" width="800" height="420"&gt;&lt;/a&gt;&lt;br&gt;
Each project, tied to a unique gradient, becomes recognizable at a glance. To look under the leaves, &lt;a href="https://gist.github.com/Namaskar-1F64F/c851789c4df7d528c6c08ec60a9c90f8"&gt;here's a gist of the generator&lt;/a&gt;. The examples above use different IDs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;top &lt;code&gt;https://www.dappling.network/api/og?id=blog&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;middle &lt;code&gt;https://www.dappling.network/api/og?id=dog&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;bottom &lt;code&gt;https://www.dappling.network/api/og?id=bog&lt;/code&gt;, &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Another gesture of the wand; a motion with emotion. Two new cards materialize. You can see the pretty gradient for each of them is consistent (The ID for the following two are &lt;code&gt;meow&lt;/code&gt;).&lt;br&gt;
&lt;a href="/images/dynamic-meta-images/project-card.png" class="article-body-image-wrapper"&gt;&lt;img src="/images/dynamic-meta-images/project-card.png" alt=""&gt;&lt;/a&gt;&lt;br&gt;
Our beautiful project card contains a preview at a glance. The deployment card adds two more elements.&lt;br&gt;
&lt;a href="/images/dynamic-meta-images/deployment-card.png" class="article-body-image-wrapper"&gt;&lt;img src="/images/dynamic-meta-images/deployment-card.png" alt=""&gt;&lt;/a&gt;&lt;br&gt;
You can see, without navigating to the site, if your deployment passed or failed. You can get the "verified" badge after someone signs the deployment, attesting its legitimacy. &lt;/p&gt;
&lt;h3&gt;
  
  
  The Poetry and the Pitfalls • Next.js
&lt;/h3&gt;

&lt;p&gt;Now we come to the unfortunate story. I would love to say these things all worked perfectly, but the real-time creation of these images posed performance challenges. The metaphysical had to meet the physical world of server responses and loading times. You see, when apps like telegram, slack, discord, and the like try to get these images, the data must be created on the fly. This causes a few problems like, how do we get the information for the page on load? &lt;/p&gt;

&lt;p&gt;This is solved by &lt;a href="https://nextjs.org/docs/pages/building-your-application/data-fetching/get-server-side-props"&gt;&lt;code&gt;getServerSideProps&lt;/code&gt;&lt;/a&gt;, but also causes the performance hit. In the new app router, the &lt;a href="https://nextjs.org/docs/app/api-reference/functions/generate-image-metadata"&gt;&lt;code&gt;generateImageMetadata&lt;/code&gt;&lt;/a&gt; function should work nicely. However, when browsing the site normally, one must wait for the metadata to load, even though they are not concerned with the meta image, after all, they're already on the site.&lt;/p&gt;

&lt;p&gt;We scaled back, yet the essence remains. The images still capture the spirit, albeit in a more simplistic form.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---7_uG86K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.dappling.network/api/og%3Ftype%3Dproject%26id%3Dmeow" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---7_uG86K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.dappling.network/api/og%3Ftype%3Dproject%26id%3Dmeow" alt="" width="800" height="420"&gt;&lt;/a&gt; &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vj_gAFrs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.dappling.network/api/og%3Fid%3Dmeow%26type%3Ddeployment" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vj_gAFrs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.dappling.network/api/og%3Fid%3Dmeow%26type%3Ddeployment" alt="" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Learnings and Such
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Meta tags are first come first used. That means, if you have multiple meta tags on the page, it'll probably use the first one encountered. This confused me because instead of being able to define site-wide metadata, I had to use Next.js's &lt;a href="https://nextjs.org/docs/pages/api-reference/components/head"&gt;&lt;code&gt;&amp;lt;Head&amp;gt;&lt;/code&gt;&lt;/a&gt; element on every page.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;Head&amp;gt;
    &amp;lt;meta ...&amp;gt;
    &amp;lt;meta ...&amp;gt;
&amp;lt;/Head&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Having an &lt;code&gt;svg&lt;/code&gt; as a meta image will silently fail and ruin your day. Make them &lt;code&gt;png&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Using metadata website checkers do not accurately reflect exactly what will happen on each individual social media platform. They all have their own way to display the images. 

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://en.rakko.tools/tools/9/"&gt;open graph debugger&lt;/a&gt; - see if the images work&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://chrome.google.com/webstore/detail/meta-debugger/jfpdemgdamgplelnlmaecbonkfgfgomp#:~:text=Meta%20Debugger&amp;amp;text=Debug%20the%20head%20section%20of,icons%20and%20many%20more%20things."&gt;meta debugger&lt;/a&gt; - view tags in chrome dev tools useful for duplicates&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Using local metadata debugging does not accurately reflect the first load of your page. There is a chance the meta tags change as hooks return data. Keep this in mind when using extensions like &lt;a href="https://chrome.google.com/webstore/detail/localhost-open-graph-debu/kckjjmiilgndeaohcljonedmledlnkij"&gt;localhost open graph debugger&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;twitter:&lt;/code&gt; tags are used by more than just twitter.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The full list of image related tags used:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;meta property="og:url" content={url} /&amp;gt;
&amp;lt;meta itemProp="url" content={url} /&amp;gt;
&amp;lt;meta itemProp="image" content={imageUrl} /&amp;gt;
&amp;lt;meta name="image" content={imageUrl} /&amp;gt;
&amp;lt;meta property="og:image" content={imageUrl} /&amp;gt;
&amp;lt;meta property="og:image:alt" content="dAppling" /&amp;gt;
&amp;lt;meta property="og:image:type" content="image/png" /&amp;gt;
&amp;lt;meta property="og:image:width" content="1200" /&amp;gt;
&amp;lt;meta property="og:image:height" content="630" /&amp;gt;
&amp;lt;meta property="twitter:image" content={imageUrl} /&amp;gt;
&amp;lt;meta property="twitter:image:src" content={imageUrl} /&amp;gt;
&amp;lt;meta property="twitter:card" content="summary_large_image" /&amp;gt;
&amp;lt;meta name="twitter:site" content="@dApplingNetwork" /&amp;gt;
&amp;lt;meta name="twitter:creator" content="@dApplingNetwork" /&amp;gt;
&amp;lt;meta property="twitter:url" content="https://www.dappling.network" /&amp;gt;
&amp;lt;meta property="twitter:title" content="..." /&amp;gt;
&amp;lt;meta property="twitter:description" content="..." /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;If I were to start over, the process simply is:&lt;/li&gt;
&lt;li&gt;start ideating, sketching, and playing with &lt;a href="https://og-playground.vercel.app"&gt;the og playground&lt;/a&gt; until you have struck inspiration and want to start migrating to your actual code.&lt;/li&gt;
&lt;li&gt;create either a new Next.js project or add the og endpoint to your existing project.&lt;/li&gt;
&lt;li&gt;modify the meta tags of your site to include the dynamic url. e.g. &lt;code&gt;https://www.dappling.network/api/og?type=project&amp;amp;id=${projectId}&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;test with the tools above&lt;/li&gt;
&lt;li&gt;cross your fingers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're interested in our exact implementation, the full code can be found in &lt;a href="https://gist.github.com/Namaskar-1F64F/f499c85c286eaae6b2e6a7854539c140"&gt;this gist&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Art of the Web
&lt;/h2&gt;

&lt;p&gt;Meta image generation is both a technical task and an art form. How one can translate the complex into the simple while maintaining beauty. Like a haiku captures a moment, a well-crafted meta image reminds that even in the technical world of web development, there's room for poetry, beauty, and a touch of the metaphysical. &lt;/p&gt;

&lt;p&gt;Thank you for your time. If you need help, please reach out to me &lt;a href="https://t.me/folded_hands"&gt;on telegram&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;🙏❤️🌱 What a great day to be alive!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Originally posted on &lt;a href="https://blog.dappling.network/poetry-in-imagery-meta-image-generation-in-nextjs/"&gt;https://blog.dappling.network/poetry-in-imagery-meta-image-generation-in-nextjs/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
    </item>
  </channel>
</rss>
