<?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: Dragan Atanasov</title>
    <description>The latest articles on DEV Community by Dragan Atanasov (@datanasov).</description>
    <link>https://dev.to/datanasov</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2237%2F2790702.png</url>
      <title>DEV Community: Dragan Atanasov</title>
      <link>https://dev.to/datanasov</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/datanasov"/>
    <language>en</language>
    <item>
      <title>We built a free tool that generates an Open Graph image from your page</title>
      <dc:creator>Dragan Atanasov</dc:creator>
      <pubDate>Sat, 01 Aug 2026 22:14:50 +0000</pubDate>
      <link>https://dev.to/datanasov/we-built-a-free-tool-that-generates-an-open-graph-image-from-your-page-4a18</link>
      <guid>https://dev.to/datanasov/we-built-a-free-tool-that-generates-an-open-graph-image-from-your-page-4a18</guid>
      <description>&lt;p&gt;Open Graph images are one of those things that are easy to forget until you share a link and notice that the preview looks wrong.&lt;/p&gt;

&lt;p&gt;Maybe the image is missing, the title is cut off, or the preview uses something generic that does not really explain the page.&lt;/p&gt;

&lt;p&gt;I’ve worked in e-commerce for more than 15 years, and social sharing previews are still one of the most commonly neglected parts of a website.&lt;/p&gt;

&lt;p&gt;Teams usually spend a lot of time improving product pages, SEO, performance, and checkout flows, while the image shown when someone shares a link is often missing, outdated, or reused across the entire website.&lt;/p&gt;

&lt;p&gt;On a few projects where we implemented even a relatively simple Open Graph image, we observed an increase in conversion from shared traffic.&lt;/p&gt;

&lt;p&gt;It was not a complicated redesign. The preview simply communicated the product or page more clearly before the visitor clicked.&lt;/p&gt;

&lt;p&gt;That experience is one of the reasons we added two free tools to Mosaicora: an &lt;a href="https://mosaicora.io/tools/open-graph-checker" rel="noopener noreferrer"&gt;Open Graph Checker&lt;/a&gt; and an &lt;a href="https://mosaicora.io/tools/og-image-designer" rel="noopener noreferrer"&gt;Open Graph Image Designer&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What makes a useful Open Graph preview?
&lt;/h2&gt;

&lt;p&gt;A social preview should quickly tell someone:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What the page is about&lt;/li&gt;
&lt;li&gt;Why it may be relevant to them&lt;/li&gt;
&lt;li&gt;Which website or brand it belongs to&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For an e-commerce product page, that might mean showing the product image, product name, brand, price, or a short benefit.&lt;/p&gt;

&lt;p&gt;For an article, it might include the title, category, author, and a relevant visual.&lt;/p&gt;

&lt;p&gt;A basic Open Graph setup usually includes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:title"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"A clear title for the page"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:description"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"A short description of the page"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:image"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/social-preview.jpg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:url"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/page"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:type"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"website"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A commonly used image size is &lt;strong&gt;1200 × 630 pixels&lt;/strong&gt;, with an aspect ratio of approximately &lt;strong&gt;1.91:1&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It is also a good idea to keep important text, logos, and subjects away from the outer edges because different platforms may crop or resize the preview.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check your page first
&lt;/h2&gt;

&lt;p&gt;Before creating a new image, it helps to see what is already configured.&lt;/p&gt;

&lt;p&gt;Paste a public URL into the free &lt;a href="https://mosaicora.io/tools/open-graph-checker" rel="noopener noreferrer"&gt;Mosaicora Open Graph Checker&lt;/a&gt;, and it will show you the metadata found on the page and how the social preview is configured.&lt;/p&gt;

&lt;p&gt;It checks information such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open Graph title and description&lt;/li&gt;
&lt;li&gt;The current social image&lt;/li&gt;
&lt;li&gt;Image dimensions and metadata&lt;/li&gt;
&lt;li&gt;X/Twitter Card tags&lt;/li&gt;
&lt;li&gt;Duplicate or conflicting declarations&lt;/li&gt;
&lt;li&gt;Other metadata that may affect the preview&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The checker can also use the content found on the page to create a proposed Open Graph image, so you do not have to start with a blank canvas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd5pj671r4gaduf36gp4w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd5pj671r4gaduf36gp4w.png" alt="OG image proposal generated from page content" width="800" height="210"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can &lt;a href="https://mosaicora.io/tools/open-graph-checker" rel="noopener noreferrer"&gt;check any public page and generate an image proposal here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftwchi8xbz3ssdxv7e15x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftwchi8xbz3ssdxv7e15x.png" alt="Open Graph Checker showing page metadata" width="800" height="334"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a social preview can still be wrong
&lt;/h2&gt;

&lt;p&gt;Even when a page contains an &lt;code&gt;og:image&lt;/code&gt; tag, the image displayed by a platform may be missing or unexpected.&lt;/p&gt;

&lt;p&gt;Some common causes are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The page contains multiple &lt;code&gt;og:image&lt;/code&gt; tags.&lt;/li&gt;
&lt;li&gt;The image URL redirects or returns an error.&lt;/li&gt;
&lt;li&gt;The image requires authentication.&lt;/li&gt;
&lt;li&gt;The image is generated too slowly.&lt;/li&gt;
&lt;li&gt;The social platform has cached an older version.&lt;/li&gt;
&lt;li&gt;The image dimensions or format are unsupported.&lt;/li&gt;
&lt;li&gt;The metadata is added only after client-side JavaScript runs.&lt;/li&gt;
&lt;li&gt;Open Graph and X/Twitter tags contain conflicting values.&lt;/li&gt;
&lt;li&gt;A firewall or bot-protection rule blocks social crawlers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For JavaScript applications, it is especially important that crawlers can find the metadata in the initial HTML response.&lt;/p&gt;

&lt;p&gt;This is safer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:title"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Example page"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt;
    &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:image"&lt;/span&gt;
    &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/og/example.png"&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;than adding the tags later using browser-side JavaScript.&lt;/p&gt;

&lt;p&gt;Many social crawlers do not render a page in the same way as a normal browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  Customize the generated image
&lt;/h2&gt;

&lt;p&gt;When the checker generates a proposal, you can open it in the &lt;a href="https://mosaicora.io/tools/og-image-designer" rel="noopener noreferrer"&gt;Open Graph Image Designer&lt;/a&gt; and adjust it before downloading.&lt;/p&gt;

&lt;p&gt;You can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Change the title and supporting text&lt;/li&gt;
&lt;li&gt;Choose another template&lt;/li&gt;
&lt;li&gt;Update the colors&lt;/li&gt;
&lt;li&gt;Add your branding&lt;/li&gt;
&lt;li&gt;Add or replace an image&lt;/li&gt;
&lt;li&gt;Preview the result immediately&lt;/li&gt;
&lt;li&gt;Export a 1200 × 630 PNG&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr863bsq7p5wmwjbjdat0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr863bsq7p5wmwjbjdat0.png" alt="Open Graph Image Designer" width="799" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The designer can also be used independently as a free &lt;a href="https://mosaicora.io/tools/og-image-designer" rel="noopener noreferrer"&gt;Open Graph image generator&lt;/a&gt; when you already know what you want to create.&lt;/p&gt;

&lt;p&gt;Both tools are free and do not require an account.&lt;/p&gt;

&lt;p&gt;Images added manually to the designer stay in the browser and are not uploaded to Mosaicora.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical workflow
&lt;/h2&gt;

&lt;p&gt;The complete workflow looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Enter a public URL into the &lt;a href="https://mosaicora.io/tools/open-graph-checker" rel="noopener noreferrer"&gt;Open Graph Checker&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Review the current Open Graph and X/Twitter metadata.&lt;/li&gt;
&lt;li&gt;Confirm which image is currently being used.&lt;/li&gt;
&lt;li&gt;Generate an image proposal from the page content.&lt;/li&gt;
&lt;li&gt;Open the proposal in the &lt;a href="https://mosaicora.io/tools/og-image-designer" rel="noopener noreferrer"&gt;Open Graph Image Designer&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Customize and export the final image.&lt;/li&gt;
&lt;li&gt;Upload the image to a stable public URL.&lt;/li&gt;
&lt;li&gt;Add or update the page metadata.&lt;/li&gt;
&lt;li&gt;Check the page again.&lt;/li&gt;
&lt;li&gt;Refresh the cached preview on the platforms where the page will be shared.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A more complete implementation might look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:title"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Your page title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt;
  &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:description"&lt;/span&gt;
  &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"A short explanation of the page"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt;
  &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:image"&lt;/span&gt;
  &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/images/page-preview.png"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:image:width"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"1200"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:image:height"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"630"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:url"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/page"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:type"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"website"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"twitter:card"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"summary_large_image"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"twitter:title"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Your page title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt;
  &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"twitter:description"&lt;/span&gt;
  &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"A short explanation of the page"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt;
  &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"twitter:image"&lt;/span&gt;
  &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/images/page-preview.png"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Quick checklist before sharing
&lt;/h2&gt;

&lt;p&gt;Before publishing or sharing a page, verify that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The title makes sense without additional context.&lt;/li&gt;
&lt;li&gt;The description does not simply repeat the title.&lt;/li&gt;
&lt;li&gt;The image clearly represents the page.&lt;/li&gt;
&lt;li&gt;Text remains readable in a small preview.&lt;/li&gt;
&lt;li&gt;The image URL returns a successful response.&lt;/li&gt;
&lt;li&gt;The URL does not require cookies or authentication.&lt;/li&gt;
&lt;li&gt;The metadata exists in the initial HTML response.&lt;/li&gt;
&lt;li&gt;The image is not blocked by &lt;code&gt;robots.txt&lt;/code&gt;, a firewall, or bot protection.&lt;/li&gt;
&lt;li&gt;The canonical URL and &lt;code&gt;og:url&lt;/code&gt; point to the intended page.&lt;/li&gt;
&lt;li&gt;Old platform previews have been refreshed after an update.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fevz107ki13u5bbukxium.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fevz107ki13u5bbukxium.png" alt="Example Open Graph image" width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We built these tools mainly for developers, website owners, and content teams who need a quick way to inspect and improve social previews without opening a larger design application.&lt;/p&gt;

&lt;p&gt;You can start by &lt;a href="https://mosaicora.io/tools/open-graph-checker" rel="noopener noreferrer"&gt;checking one of your existing pages&lt;/a&gt;, or go directly to the &lt;a href="https://mosaicora.io/tools/og-image-designer" rel="noopener noreferrer"&gt;Open Graph Image Designer&lt;/a&gt; if you already know what you want to create.&lt;/p&gt;

&lt;p&gt;I would be interested to hear how well the generated proposals work for your pages, especially for product pages and articles.&lt;/p&gt;

&lt;p&gt;Suggestions for additional checks, templates, or customization options are also welcome.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>seo</category>
      <category>productivity</category>
      <category>opengraph</category>
    </item>
    <item>
      <title>Omnilingual AI - Talk with AI in your language</title>
      <dc:creator>Dragan Atanasov</dc:creator>
      <pubDate>Fri, 12 Apr 2024 21:30:57 +0000</pubDate>
      <link>https://dev.to/datanasov/omnilingual-ai-29la</link>
      <guid>https://dev.to/datanasov/omnilingual-ai-29la</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc5amorqzitsrsm05qtz7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc5amorqzitsrsm05qtz7.png" alt="Omnilingual AI in action" width="800" height="665"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/devteam/join-us-for-the-cloudflare-ai-challenge-3000-in-prizes-5f99"&gt;Cloudflare AI Challenge&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;"&lt;strong&gt;Omnilingual AI&lt;/strong&gt;" - Your Multilingual Conversation Companion! &lt;br&gt;
Talk with AI in your preferred language and receive responses translated instantly. You can customize the AI model, the input and the output language.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Try out the demo at: &lt;a href="https://omnilingual-ai.dragan.workers.dev/" rel="noopener noreferrer"&gt;https://omnilingual-ai.dragan.workers.dev/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The UI frontend, powered by &lt;strong&gt;Flutter&lt;/strong&gt;, ensures a consistent user experience across all devices, including browsers, mobile phones, tablets, and desktops.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Code
&lt;/h2&gt;

&lt;p&gt;Check the code on GitHub: &lt;a href="https://github.com/drashmk/omnilingual-ai" rel="noopener noreferrer"&gt;https://github.com/drashmk/omnilingual-ai&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;The journey of building "Omnilingual AI" was an interesting and challenging one. Most AI LLMs work best in English, which can be challenging for many, especially kids, whose primary language isn't English. "Omnilingual AI" solves this by understanding and responding in multiple languages, making AI accessible to everyone, regardless of their language.&lt;/p&gt;

&lt;p&gt;To make it work, the worker utilizes the &lt;a href="https://developers.cloudflare.com/workers-ai/models/m2m100-1.2b/" rel="noopener noreferrer"&gt;@cf/meta/m2m100-1.2b&lt;/a&gt; translation model. It translates the input into English, sends it to the selected text generation LLM and then translates the response in the selected language. &lt;/p&gt;

&lt;p&gt;I chose Flutter for the UI frontend due to its versatility and ability to run on various platforms. &lt;br&gt;
Its widget library makes crafting visually appealing and responsive user interfaces a breeze(also because my day job is backend developer, this helped me to make the prototype faster while ensuring it didn't look like made by a BE dev😁).&lt;/p&gt;

&lt;p&gt;Each bubble contains an "&lt;strong&gt;Original-&amp;gt;&lt;/strong&gt;" button, which reveals the original response from the LLM before translation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multiple Models and/or Triple Task Types&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://developers.cloudflare.com/workers-ai/models/#text-generation" rel="noopener noreferrer"&gt;Text Generation&lt;/a&gt; Models for the conversation with AI, configurable from the dropdown in the ⚙️Settings menu&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developers.cloudflare.com/workers-ai/models/m2m100-1.2b/" rel="noopener noreferrer"&gt;@cf/meta/m2m100-1.2b&lt;/a&gt; for translating between the user and AI&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cloudflarechallenge</category>
      <category>devchallenge</category>
      <category>ai</category>
      <category>flutter</category>
    </item>
  </channel>
</rss>
