<?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>Forem: Zernonia</title>
    <description>The latest articles on Forem by Zernonia (@zernonia).</description>
    <link>https://forem.com/zernonia</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%2F400444%2F8626e93e-1c07-44f2-8eab-1f0bbd87bfed.jpeg</url>
      <title>Forem: Zernonia</title>
      <link>https://forem.com/zernonia</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/zernonia"/>
    <language>en</language>
    <item>
      <title>Idea to Production in 2 days, thanks to...</title>
      <dc:creator>Zernonia</dc:creator>
      <pubDate>Wed, 18 May 2022 02:25:36 +0000</pubDate>
      <link>https://forem.com/zernonia/idea-to-production-in-2-days-thanks-to-372b</link>
      <guid>https://forem.com/zernonia/idea-to-production-in-2-days-thanks-to-372b</guid>
      <description>&lt;h1&gt;
  
  
  ...&lt;a href="https://v3.nuxtjs.org/"&gt;&lt;strong&gt;Nuxt 3&lt;/strong&gt;&lt;/a&gt;!
&lt;/h1&gt;

&lt;p&gt;If you are not familiar with Nuxt 3, it is build on top of the awesome Vue 3 + Vite (or Webpack if you like) + Typescript, which makes the process of development feels like a breeze. But before we jump right into the Nuxt awesomeness, let me show you the product I've built!&lt;/p&gt;

&lt;h1&gt;
  
  
  Showcase
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://tweetic.io"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Jj7JwE5Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q9vf7jp94mdolzg1ojjy.png" alt="Tweetic io cover" width="880" height="473"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Introducing &lt;a href="https://tweetic.io"&gt;Tweetic.io&lt;/a&gt;! It &lt;strong&gt;Convert Tweets to Static HTML&lt;/strong&gt;, where you can embed it on your landing page, blogs or anywhere you like.&lt;/p&gt;

&lt;p&gt;It was heavily inspired by Tweet embedded on &lt;a href="https://supabase.com"&gt;Supabase's&lt;/a&gt; landing page! I looked around the internet, but couldn't find any static tweet generator, thus created this tools!!!&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🤩 Free&lt;/li&gt;
&lt;li&gt;📖 &lt;a href="https://github.com/zernonia/tweetic"&gt;Open-Source&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🚀 API ready&lt;/li&gt;
&lt;li&gt;📋 Copy/Download Static HTML&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ok, enough showcasing, let's dive in to the real deal, Nuxt3!&lt;/p&gt;




&lt;h1&gt;
  
  
  Nuxt Features
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Auto Import
&lt;/h2&gt;

&lt;p&gt;Still wasting your time and effort naming every Vue component, then importing them one by one manually into your views components? Create view and import in Vue router one by one?&lt;/p&gt;

&lt;p&gt;Well, Nuxt auto-import components got you covered! Nuxt (even before Nuxt 3) has auto-import features that import all components in &lt;code&gt;./components&lt;/code&gt; folder, as well as creating routes based on your&lt;code&gt;./pages&lt;/code&gt; folder. &lt;/p&gt;

&lt;p&gt;Check out the &lt;code&gt;./pages/index.vue&lt;/code&gt; from Tweetic.io:&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;script &lt;/span&gt;&lt;span class="na"&gt;setup&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"ts"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="c1"&gt;// No need to import anything because Nuxt 3 does it automatically!!&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;template&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"mt-32 flex flex-col items-center overflow-hidden xl:overflow-visible"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      // some h1, h2

    &lt;span class="nt"&gt;&amp;lt;NuxtLink&lt;/span&gt; &lt;span class="na"&gt;to=&lt;/span&gt;&lt;span class="s"&gt;"/thank-you"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"flex flex-col items-center mt-8 text-gray-400"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;span&amp;gt;&lt;/span&gt;thank you everyone...&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;Underline&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"w-16 -mt-2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/Underline&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/NuxtLink&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"flex flex-col items-center space-y-4 md:relative mt-8 md:mt-32 w-full md:h-224"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"md:absolute flex items-center -top-20 left-10 text-gray-400"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Arrow&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"w-12"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/Arrow&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;span&amp;gt;&lt;/span&gt;Static HTML tweets&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;Tweet&lt;/span&gt;
        &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"md:absolute top-0 left-0"&lt;/span&gt;
        &lt;span class="na"&gt;url=&lt;/span&gt;&lt;span class="s"&gt;"https://twitter.com/zernonia/status/1513020247690809346"&lt;/span&gt;
        &lt;span class="na"&gt;layout=&lt;/span&gt;&lt;span class="s"&gt;"supabase"&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;gt;&amp;lt;/Tweet&amp;gt;&lt;/span&gt;
      // more tweets
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/template&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But that's not all, now the latest Nuxt 3 has even more auto-import features!&lt;/p&gt;

&lt;p&gt;TS/JS files in &lt;code&gt;plugins&lt;/code&gt; and &lt;code&gt;composables&lt;/code&gt; are auto-imported, so you don't need to export them, and manually import them into &lt;code&gt;nuxt.config.ts&lt;/code&gt;, or your function script! You can look at all the plugins for Tweetic.io &lt;a href="https://github.com/zernonia/tweetic/tree/master/plugins"&gt;here&lt;/a&gt;. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;this saves me soooooooo much time!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Server Engine (Nitro)
&lt;/h2&gt;

&lt;p&gt;Nuxt 3 is running on &lt;a href="https://v3.nuxtjs.org/guide/concepts/server-engine/"&gt;Nitro engine&lt;/a&gt;, which unlocks new full-stack capabilities to Nuxt server.  It generates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; server API by reading files in &lt;code&gt;server/api/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt; server middleware from &lt;code&gt;server/middleware/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt; server routes from &lt;code&gt;server/routes&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(YES everything is automatic again!!) &lt;/p&gt;

&lt;p&gt;Creating API endpoint is &lt;strong&gt;ridiculously easy&lt;/strong&gt;! You just need to &lt;code&gt;return&lt;/code&gt; a JSON data, and done! You have an API endpoint ready to go. Of course, we are free to create node based API as well if you choose to! &lt;/p&gt;

&lt;p&gt;Check out this super simple &lt;code&gt;server/api/hello.ts&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;defineEventHandler&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;api&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;world!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now calling &lt;code&gt;http://localhost:3000/api/hello&lt;/code&gt; will return JSON &lt;code&gt;{ "api": "world" }&lt;/code&gt; 🌎 to you 🔥 &lt;/p&gt;

&lt;p&gt;Furthermore, the smoothest experience of using this new Nitro engine is when &lt;strong&gt;deploying the app&lt;/strong&gt;! Nitro has cross-platform support for Node.js, Browsers, service-workers and more. It support serverless deployment out-of-the-box too! &lt;/p&gt;

&lt;p&gt;Tweetic.io is deployed on &lt;a href="https://vercel.com"&gt;Vercel&lt;/a&gt; with zero configuration! Nitro will auto-detect the platform, and generate the appropriate output for you. &lt;a href="https://v3.nuxtjs.org/guide/deploy/presets#supported-hosting-providers"&gt;Here&lt;/a&gt; are the list of supported hosting providers! &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;No need to mess with deployment, this is SMOOTH!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Fully Typed!!
&lt;/h2&gt;

&lt;p&gt;Nuxt 3 is fully typed and provides helpful shortcuts to ensure you have access to accurate type information when you are coding. If you are Typescript fans like me, you will be in love with coding once again! &lt;/p&gt;

&lt;p&gt;Nuxt 3 generates type-ready Vue components, so you can refers to &lt;code&gt;props&lt;/code&gt; and &lt;code&gt;emits&lt;/code&gt; easily without inspecting the components, or worried that you might be passing the wrong props into the components.&lt;/p&gt;

&lt;p&gt;Other than that, the response from &lt;code&gt;useFetch/useAsyncData&lt;/code&gt; provided by Nuxt 3 is also fully typed! You can use the response immediately without having to type cast it like using &lt;code&gt;fetch&lt;/code&gt;.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6h7LBhha--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1652803972652/0AsFdzHs-.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6h7LBhha--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1652803972652/0AsFdzHs-.png" alt="image.png" width="412" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The one thing that literally blew my mind, is this....&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--e3_J4PrR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1652803827847/6YA1Oho-g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e3_J4PrR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1652803827847/6YA1Oho-g.png" alt="Screenshot 2022-05-18 at 12.10.01 AM.png" width="412" height="195"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;... did you spot it?&lt;/p&gt;

&lt;p&gt;Is that Nuxt will auto suggest what Server API route is available to be called 🤯!!! &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This is super DX in it's finest!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Super fast load time
&lt;/h2&gt;

&lt;p&gt;Last but not least, the lightning fast Vite load time! Vite has been well-known for it's blazing fast initial load time, as well as it's build time. Nuxt 3 uses &lt;a href="https://vitejs.dev"&gt;Vite&lt;/a&gt; to bundle the application.  &lt;/p&gt;

&lt;p&gt;For my tiny apps, it took &lt;strong&gt;1401 milliseconds&lt;/strong&gt; to start the dev server. That is blazingly fast compared to Nuxt 2 with webpack.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GdmCGZE1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1652804460381/BTDHdIBQQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GdmCGZE1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1652804460381/BTDHdIBQQ.png" alt="image.png" width="411" height="181"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;code&gt;npx nuxi init &amp;lt;your-app&amp;gt;&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;Nuxt 3 really boosted my productivity, and my developing experience! I couldn't express enough how good the experience is, you just have to taste it on your own! 🍇&lt;/p&gt;

&lt;p&gt;So what are you waiting for? As Nuxt 3 is currently in the release candidate 3, I'm hopeful that the Nuxt environment will get richer with more awesome plugins and modules!&lt;/p&gt;

&lt;p&gt;While discussing a feature request for Nuxt 3 with my friend on Twitter, @&lt;a href="https://twitter.com/Atinux"&gt;Sébastien Chopin&lt;/a&gt; (CEO of NuxtLab) dropped by and take note of the thread that we were discussing! This indicates how proactive the team is, and how eager they are to build a product that will be loved by many!&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--w5gNp5iy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1042510623962275840/1Iw_Mvud_normal.jpg" alt="Sébastien Chopin profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Sébastien Chopin
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="mentioned-user" href="https://dev.to/atinux"&gt;@atinux&lt;/a&gt;
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      &lt;a href="https://twitter.com/zernonia"&gt;@zernonia&lt;/a&gt; &lt;a href="https://twitter.com/chrisbbreuer"&gt;@chrisbbreuer&lt;/a&gt; &lt;a href="https://twitter.com/nuxt_js"&gt;@nuxt_js&lt;/a&gt; I really like this thread
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      21:17 PM - 17 May 2022
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1526673182798794754" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1526673182798794754" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1526673182798794754" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;
 

&lt;p&gt;If you haven't tried out Nuxt 3, now is a good time! Give yourself a taste of Super DX  (made possible by Nuxt teams and the communities!) and share with me &lt;strong&gt;1 thing&lt;/strong&gt; you like the most about Nuxt 3 in the comment section down below!&lt;/p&gt;

&lt;p&gt;Thank you for your attention! 💛  May God bless you! &lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>showdev</category>
    </item>
    <item>
      <title>I Design, You Build! - Frontend Challenge #4 (Supabase version)</title>
      <dc:creator>Zernonia</dc:creator>
      <pubDate>Sat, 16 Apr 2022 01:50:24 +0000</pubDate>
      <link>https://forem.com/zernonia/i-design-you-build-frontend-challenge-4-supabase-version-2afm</link>
      <guid>https://forem.com/zernonia/i-design-you-build-frontend-challenge-4-supabase-version-2afm</guid>
      <description>&lt;h2&gt;
  
  
  Appreciation ❤️
&lt;/h2&gt;

&lt;p&gt;I'm loving every submission here on &lt;code&gt;Dev.to&lt;/code&gt; from the previous challenges! Really thank you everyone that participated, or bookmarked it! &lt;/p&gt;




&lt;h2&gt;
  
  
  New Challenge (Supabase version)
&lt;/h2&gt;

&lt;p&gt;Let's step up from the plain 1 pager, and static data! It's time for &lt;code&gt;fetch&lt;/code&gt; challenge! Challenger (you) would need to fetch data from API, then display the dynamic content! 🤩  &lt;/p&gt;

&lt;p&gt;But why is it called &lt;a href="https://supabase.com" rel="noopener noreferrer"&gt;Supabase&lt;/a&gt; version? Because we are going to leverage Supabase's super powerful auto generated &lt;strong&gt;REST API/Graphql&lt;/strong&gt; endpoint to query data. Not only simple query, you can even apply &lt;a href="https://supabase.com/docs/reference/javascript/range" rel="noopener noreferrer"&gt;pagination&lt;/a&gt;/&lt;a href="https://supabase.com/docs/reference/javascript/using-filters" rel="noopener noreferrer"&gt;filters&lt;/a&gt; into the query without writing a single backend code!&lt;/p&gt;

&lt;p&gt;Do not worry 😉! I created a tool, called &lt;a href="https://www.supadb.dev/" rel="noopener noreferrer"&gt;SupaDB&lt;/a&gt; that allow user to access all the data provided for &lt;strong&gt;FREE&lt;/strong&gt;! Just simply sign up to obtain the Authorization key, and initiate Supabase client and you are ready!&lt;/p&gt;

&lt;p&gt;Target:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎯 Target : Fetch from provided API&lt;/li&gt;
&lt;li&gt;🎯 Target : Search games by name&lt;/li&gt;
&lt;li&gt;🎯 Target : Sort games by "Price", "Name"&lt;/li&gt;
&lt;li&gt;🎯 Target : Carousel item&lt;/li&gt;
&lt;li&gt;🎯 Target : Responsive design&lt;/li&gt;
&lt;li&gt;🎯 Target : External link to game's page on Steam&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Extra:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌟 Extra : Loading state (loader/skeleton)&lt;/li&gt;
&lt;li&gt;🌟 Extra : Hover animation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📃 Supabase : &lt;a href="https://supabase.com/docs/reference/javascript/select" rel="noopener noreferrer"&gt;https://supabase.com/docs/reference/javascript/select&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📃 Icon : &lt;a href="https://icones.js.org/collection/all" rel="noopener noreferrer"&gt;https://icones.js.org/collection/all&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📃 Hosting : &lt;a href="https://vercel.com/" rel="noopener noreferrer"&gt;https://vercel.com/&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠ It will defeat the purpose of learning if you just copy and paste someone else's answer 😭!&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Prizes!
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/5GoVLqeAOo6PK/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/5GoVLqeAOo6PK/giphy.gif" alt="Excited for prizes"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As the title mentioned, this is the Supabase version of "I Design, You Build" challenge, so there will be &lt;strong&gt;AWESOME SWAG&lt;/strong&gt; prizes to rewards 5 winners that has the best submission (I will be the judge 😉) &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;del&gt;The judging period will be 1 month time from the today!&lt;/del&gt;&lt;br&gt;
&lt;del&gt;Dateline for submission will be &lt;strong&gt;7 May 2022&lt;/strong&gt;&lt;/del&gt;&lt;br&gt;
Submission ended! I will start the judging process 😊&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is the first prizes giveaway for "I Design, You Build" series, and definitely not the last! There will be more prizes in the future! So stay tuned, remember to bookmark this challenge, and follow me on &lt;code&gt;Dev.to&lt;/code&gt; and &lt;a href="https://twitter.com/zernonia" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; to stay up to date!&lt;/p&gt;




&lt;h2&gt;
  
  
  Start Coding!
&lt;/h2&gt;

&lt;p&gt;If you are ready to take on the challenge, then&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Help 💖 this design on &lt;a href="https://dribbble.com/shots/18027956-STAEM-Steam-Store-Re-Design-Challenge" rel="noopener noreferrer"&gt;Dribbble&lt;/a&gt;, and follow me! Please... 😳&lt;/li&gt;
&lt;li&gt;Bookmark this post so that you can submit it easier.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Right-click&lt;/strong&gt; &lt;a href="https://www.figma.com/file/v9WwrvuGFZHVLy4z3wxHGi/STAEM?node-id=3%3A2" rel="noopener noreferrer"&gt;here&lt;/a&gt; and open &lt;strong&gt;Open link in a New Tab&lt;/strong&gt; to see the Figma Design.&lt;/li&gt;
&lt;li&gt;Enjoy coding! 🤩&lt;/li&gt;
&lt;li&gt;Come back to submit!&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;All the &lt;strong&gt;images&lt;/strong&gt; and &lt;strong&gt;assets&lt;/strong&gt; are free to use, and can be exported from the Figma Design.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.figma.com/file/v9WwrvuGFZHVLy4z3wxHGi/STAEM?node-id=3%3A2" rel="noopener noreferrer"&gt;&lt;img src="https://media.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%2F47ij7e4rketxmtakxmkt.png" alt="Zernonia Frontend Challenge #4 Supabase version"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Submission
&lt;/h2&gt;

&lt;p&gt;Once you've completed, come back to this post, and submit your solution using the following &lt;code&gt;template&lt;/code&gt; in the comment section. You are encouraged to &lt;strong&gt;comment&lt;/strong&gt; and &lt;strong&gt;upvotes&lt;/strong&gt; other's answer!&lt;/p&gt;

&lt;p&gt;Thank you!💘&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Feedback: This is awesome!

Demo: &amp;lt;url&amp;gt;
Github: &amp;lt;url&amp;gt;
Tech-Stack: Vue, TailwindCSS
Learning Outcome: 
  1. 
  2.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Why?
&lt;/h2&gt;

&lt;p&gt;I share these design freely so that anyone who wanted to practice or challenge Web design be able to do so without paying other platform (&lt;em&gt;ahem) to get their **Figma Design&lt;/em&gt;*🎨 file. &lt;/p&gt;

&lt;p&gt;You are free to use the Design you've created in your portfolio. No copyright claims or anything.&lt;/p&gt;

&lt;p&gt;But if you are loving my work, you are most welcomed to follow me on &lt;code&gt;Dev.to&lt;/code&gt; and &lt;a href="https://twitter.com/zernonia" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; 😄&lt;/p&gt;

&lt;p&gt;Also, check out my own &lt;a href="https://zernonia.com" rel="noopener noreferrer"&gt;Website&lt;/a&gt;!&lt;/p&gt;

&lt;h3&gt;
  
  
  Thank you for your time and attention! Hope you'll enjoy!
&lt;/h3&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>showdev</category>
      <category>idesignyoubuild</category>
    </item>
    <item>
      <title>I Design, You Build! - Frontend Challenge #3</title>
      <dc:creator>Zernonia</dc:creator>
      <pubDate>Thu, 14 Oct 2021 02:18:13 +0000</pubDate>
      <link>https://forem.com/zernonia/i-design-you-build-frontend-challenge-3-gda</link>
      <guid>https://forem.com/zernonia/i-design-you-build-frontend-challenge-3-gda</guid>
      <description>&lt;h2&gt;
  
  
  Appreciation
&lt;/h2&gt;

&lt;p&gt;What an overwhelming response from the first two challenges! I know I said it before, but I really enjoy seeing every submission, and appreciate every feedback given. If you haven't give the challenge a try, I &lt;strong&gt;strongly encourage&lt;/strong&gt; you to join us in this fun challenge! 🤩✨&lt;/p&gt;

&lt;p&gt;I know everyone is in different level of HTML/CSS/Javascript, but don't worry, I will try to mix in different difficulties in the coming challenge, so stay tuned! 🔔&lt;/p&gt;




&lt;h2&gt;
  
  
  Challenge
&lt;/h2&gt;

&lt;p&gt;There's a few 1 pager (or should I say 1 section 😆) design previously, how about let's make a Homepage for a Modern Interior Furniture Store?&lt;/p&gt;

&lt;p&gt;So, in this challenge, we will be creating a &lt;strong&gt;minimalistic E-commerce Website&lt;/strong&gt; with the touch of modern UI. Create a homepage following the design. Fulfill Target and/or Extra below:&lt;/p&gt;

&lt;p&gt;Target:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎯 Target : User can see the similar design&lt;/li&gt;
&lt;li&gt;🎯 Target : Responsive design&lt;/li&gt;
&lt;li&gt;🎯 Target : Filter products&lt;/li&gt;
&lt;li&gt;🎯 Target : Multiple showcase (use arrow button to navigate)&lt;/li&gt;
&lt;li&gt;🎯 Target : On mobile, when I select the hamburger menu, I can see a navigation (use your own creativity)&lt;/li&gt;
&lt;li&gt;🎯 Target : On mobile, I can slide the products to left-right.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Extra:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌟 Extra : Add animation to the filtering&lt;/li&gt;
&lt;li&gt;🌟 Extra : Add animation when scrolling down the page&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📃 Icon : &lt;a href="https://icones.js.org/collection/all" rel="noopener noreferrer"&gt;https://icones.js.org/collection/all&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📃 Hosting: &lt;a href="https://vercel.com/" rel="noopener noreferrer"&gt;https://vercel.com/&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠ It will defeat the purpose of learning if you just copy and paste someone else's answer 😭!&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Start Coding!
&lt;/h2&gt;

&lt;p&gt;If you are ready to take on the challenge, then&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Help 💖 this design on &lt;a href="https://dribbble.com/shots/16649336-SHPX-Modern-Interior-Furniture-Store-Design" rel="noopener noreferrer"&gt;Dribbble&lt;/a&gt;, and follow me! Please... 😳&lt;/li&gt;
&lt;li&gt;Bookmark this post so that you can submit it easier.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Right-click&lt;/strong&gt; &lt;a href="https://www.figma.com/file/e7u4jp5OqyHybDZzRCTMvi/SHPX?node-id=0%3A1" rel="noopener noreferrer"&gt;here&lt;/a&gt; and open &lt;strong&gt;Open link in a New Tab&lt;/strong&gt; to see the Figma Design.&lt;/li&gt;
&lt;li&gt;Enjoy coding! 🤩&lt;/li&gt;
&lt;li&gt;Come back to submit!&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;All the &lt;strong&gt;images&lt;/strong&gt; and &lt;strong&gt;assets&lt;/strong&gt; are free to use, and can be exported from the Figma Design.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.figma.com/file/e7u4jp5OqyHybDZzRCTMvi/SHPX?node-id=0%3A1" rel="noopener noreferrer"&gt;&lt;img src="https://media.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%2Fmwacxb8wvrum5zy2swxm.png" alt="Zernonia Frontend Challenge #3"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Submission
&lt;/h2&gt;

&lt;p&gt;Once you've completed, come back to this post, and submit your solution using the following &lt;code&gt;template&lt;/code&gt; in the comment section. You are encouraged to &lt;strong&gt;comment&lt;/strong&gt; and &lt;strong&gt;upvotes&lt;/strong&gt; other's answer!&lt;/p&gt;

&lt;p&gt;Thank you!💘&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Feedback: This is awesome!

Demo: &amp;lt;url&amp;gt;
Github: &amp;lt;url&amp;gt;
Tech-Stack: Vue, TailwindCSS
Learning Outcome: 
  1. 
  2.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Why?
&lt;/h2&gt;

&lt;p&gt;I share these design freely so that anyone who wanted to practice or challenge Web design be able to do so without paying other platform (&lt;em&gt;ahem) to get their **Figma Design&lt;/em&gt;*🎨 file. &lt;/p&gt;

&lt;p&gt;You are free to use the Design you've created in your portfolio. No copyright claims or anything.&lt;/p&gt;

&lt;p&gt;But if you are loving my work, you are most welcomed to follow me on &lt;code&gt;Dev.to&lt;/code&gt; and &lt;a href="https://twitter.com/zernonia" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; 😄&lt;/p&gt;

&lt;p&gt;Also, check out my own &lt;a href="https://zernonia.com" rel="noopener noreferrer"&gt;Website&lt;/a&gt;!&lt;/p&gt;

&lt;h3&gt;
  
  
  Thank you for your time and attention! Hope you'll enjoy!
&lt;/h3&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>javascript</category>
      <category>idesignyoubuild</category>
    </item>
    <item>
      <title>Supabase Hacktoberfest Hackathon</title>
      <dc:creator>Zernonia</dc:creator>
      <pubDate>Fri, 01 Oct 2021 16:39:55 +0000</pubDate>
      <link>https://forem.com/zernonia/supabase-hacktoberfest-hackathon-21cf</link>
      <guid>https://forem.com/zernonia/supabase-hacktoberfest-hackathon-21cf</guid>
      <description>&lt;p&gt;It's the time of the year, where we Developer cave in to our Coding Dent and start coding again - &lt;strong&gt;Hacktoberfest&lt;/strong&gt;! &lt;/p&gt;

&lt;p&gt;As all developer are scavenging through tons and tons of Github repo just to find somewhere they belong, but sometimes to no avail. &lt;/p&gt;

&lt;p&gt;But fear not! &lt;a href="https://supabase.io/" rel="noopener noreferrer"&gt;Supabase&lt;/a&gt; is here to the rescue! Introducing....&lt;/p&gt;

&lt;h2&gt;
  
  
  Supabase Hacktoberfest Hackathon !
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://supabase.io/blog/2021/09/28/supabase-hacktoberfest-hackathon-2021" rel="noopener noreferrer"&gt;&lt;img src="https://media.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%2Fwwqgy68esv09ocnsjthr.png" alt="Supabase Hacktoberfest Hackathon "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the second &lt;strong&gt;Hackathon&lt;/strong&gt; hosted by Supabase, hosted alongside with the &lt;strong&gt;Hacktoberfest&lt;/strong&gt; event! &lt;/p&gt;

&lt;p&gt;If you'd missed out the first one, you can check all the submission &lt;a href="https://www.madewithsupabase.com/tag/Hackathon" rel="noopener noreferrer"&gt;here&lt;/a&gt;. Of course, you might be wondering who were the winners, and what was the prize for the first Hackathon? Here's the official blogpost for the &lt;a href="https://supabase.io/blog/2021/08/09/hackathon-winners" rel="noopener noreferrer"&gt;Medal Ceremony&lt;/a&gt;. I'm sure you wish you knew this earlier, right? 😆&lt;/p&gt;

&lt;h2&gt;
  
  
  Why does it matter?
&lt;/h2&gt;

&lt;p&gt;You might be thinking, why Supabase Hacktoberfest is hosted alongside with Hacktoberfest? It's because instead of having to code twice, each separately for each event, you can just -- &lt;strong&gt;Kill two birds with One stone&lt;/strong&gt;. (I'm sorry bird lover for using this idiom 😣) &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fypst17ne1z7ulljogm67.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fypst17ne1z7ulljogm67.png" alt="one stone two bird"&gt;&lt;/a&gt; &lt;/p&gt;
http://thejoysofjodi.com/kill-two-birds-with-one-stone-idioms-part-ii/



&lt;h2&gt;
  
  
  How it works?
&lt;/h2&gt;

&lt;p&gt;For Supabase Hacktoberfest Hackathon submission to be counted as valid, you need to build a &lt;strong&gt;New Open-Source&lt;/strong&gt; project with Supabase in the next 10 days.&lt;/p&gt;

&lt;p&gt;It can be whatever you want - a project, mobile app, tool, library, anything 😱!!! , as long as you are using Supabase in some way. You can either enter as an individual, or as a team of up to 5 people. &lt;/p&gt;

&lt;p&gt;You can check out the Official Post from Supabase &lt;a href="https://supabase.io/blog/2021/09/28/supabase-hacktoberfest-hackathon-2021" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚡ Do take note!&lt;br&gt;
Submission deadline is Sunday Oct 10th at 11:59pm PT&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But in order to kill two birds with one stone, you need to first &lt;a href="https://hacktoberfest.digitalocean.com/resources/maintainers" rel="noopener noreferrer"&gt;set up your Hackathon repo&lt;/a&gt;, then make at least 4 PR on that Hackathon project. &lt;/p&gt;

&lt;p&gt;That's it! Simple and easy steps that could possibly earn you Hacktoberfest T-Shirt and Supabase Swag with only one effort!&lt;/p&gt;




&lt;p&gt;If you are not planning (or too late) to participate in the Supabase Hacktoberfest Hackathon, you can also contribute to one of our &lt;strong&gt;Supabase community projects&lt;/strong&gt; that have the &lt;a href="https://github.com/supabase-community?q=topic%3Ahacktoberfest" rel="noopener noreferrer"&gt;hacktoberfest topic&lt;/a&gt; and earn yourself Hacktoberfest PR count.&lt;/p&gt;

&lt;h2&gt;
  
  
  Made with Supabase
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.producthunt.com/posts/made-with-supabase" rel="noopener noreferrer"&gt;&lt;img src="https://media.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%2F5zxa7jhwh1kurb582ils.png" alt="og"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's a collection of projects that &lt;a href="https://www.producthunt.com/posts/made-with-supabase" rel="noopener noreferrer"&gt;Made with Supabase&lt;/a&gt;! It was built by myself, and contributed by tons of Supabase lovers that wish to showcase their lovely project with the world!🌎&lt;/p&gt;

&lt;p&gt;And the most mind blowing fact is that, the &lt;strong&gt;Made with Supabase&lt;/strong&gt; is made with Supabase! &lt;/p&gt;

&lt;h2&gt;
  
  
  Join us now!
&lt;/h2&gt;

&lt;p&gt;So what are you waiting for? Join us on &lt;a href="https://discord.gg/bnncdqgBSS" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;, Hackathon channel to have fun, find your team, and start Coding!&lt;/p&gt;

&lt;p&gt;If you have any questions, feel free to ask me on the comment section below! 💚&lt;/p&gt;

&lt;p&gt;Happy Coding!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>hacktoberfest</category>
      <category>supabase</category>
    </item>
    <item>
      <title>I Design, You Build! - Frontend Challenge #2</title>
      <dc:creator>Zernonia</dc:creator>
      <pubDate>Thu, 30 Sep 2021 18:01:40 +0000</pubDate>
      <link>https://forem.com/zernonia/i-design-you-build-frontend-challenge-2-2egc</link>
      <guid>https://forem.com/zernonia/i-design-you-build-frontend-challenge-2-2egc</guid>
      <description>&lt;h2&gt;
  
  
  Appreciation
&lt;/h2&gt;

&lt;p&gt;What an overwhelming response from the first challenge! I really enjoy seeing every submission, and appreciate every feedback given. If you haven't give the challenge a try, I &lt;strong&gt;strongly encourage&lt;/strong&gt; you to join us in this fun challenge! 🤩✨&lt;/p&gt;

&lt;p&gt;I know everyone is in different level of HTML/CSS/Javascript, but don't worry, I will try to mix in different difficulties in the coming challenge, so stay tuned! 🔔&lt;/p&gt;




&lt;h2&gt;
  
  
  Challenge
&lt;/h2&gt;

&lt;p&gt;I have a confession to make, I'm kinda obsessed with Gradient Blob recently. If you check out my &lt;a href="https://www.zernonia.com/" rel="noopener noreferrer"&gt;website&lt;/a&gt;, you will know what I meant.&lt;/p&gt;

&lt;p&gt;So, in this challenge, we will be creating an awesome &lt;strong&gt;Gradient Blob and Text&lt;/strong&gt; Website for a web application. Create a homepage following the design. Fulfill Target and/or Extra below:&lt;/p&gt;

&lt;p&gt;Target:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎯 Target : User can see the similar design&lt;/li&gt;
&lt;li&gt;🎯 Target : Responsive design&lt;/li&gt;
&lt;li&gt;🎯 Target : Gradient text&lt;/li&gt;
&lt;li&gt;🎯 Target : Gradient background (gradient blob)&lt;/li&gt;
&lt;li&gt;🎯 Target : On mobile, when I select the hamburger menu, I can see a navigation (use your own creativity)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Extra:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌟 Extra : Add animation to the Gradient blob&lt;/li&gt;
&lt;li&gt;🌟 Extra : Add animation to the image&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📃 Icon : &lt;a href="https://icones.js.org/collection/all" rel="noopener noreferrer"&gt;https://icones.js.org/collection/all&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📃 Hosting: &lt;a href="https://vercel.com/" rel="noopener noreferrer"&gt;https://vercel.com/&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠ It will defeat the purpose of learning if you just copy and paste someone else's answer 😭!&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Start Coding!
&lt;/h2&gt;

&lt;p&gt;If you are ready to take on the challenge, then&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Help 💖 this design on &lt;a href="https://dribbble.com/shots/16561170-UNX-Slick-Gradient-Landing-Page" rel="noopener noreferrer"&gt;Dribbble&lt;/a&gt;, and follow me! Please... 😳&lt;/li&gt;
&lt;li&gt;Bookmark this post so that you can submit it easier.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Right-click&lt;/strong&gt; &lt;a href="https://www.figma.com/file/nJMqfSZI2HZGjWHWV4jCnG/UNX-Slick-App?node-id=0%3A1" rel="noopener noreferrer"&gt;here&lt;/a&gt; and open &lt;strong&gt;Open link in a New Tab&lt;/strong&gt; to see the Figma Design.&lt;/li&gt;
&lt;li&gt;Enjoy coding! 🤩&lt;/li&gt;
&lt;li&gt;Come back to submit!&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;All the &lt;strong&gt;images&lt;/strong&gt; and &lt;strong&gt;assets&lt;/strong&gt; are free to use, and can be exported from the Figma Design.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.figma.com/file/nJMqfSZI2HZGjWHWV4jCnG/UNX-Slick-App?node-id=0%3A1" rel="noopener noreferrer"&gt;&lt;img src="https://media.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%2Fv42ksciemobwm90rp2xj.png" alt="Zernonia Frontend Challenge #2"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Submission
&lt;/h2&gt;

&lt;p&gt;Once you've completed, come back to this post, and submit your solution using the following &lt;code&gt;template&lt;/code&gt; in the comment section. You are encouraged to &lt;strong&gt;comment&lt;/strong&gt; and &lt;strong&gt;upvotes&lt;/strong&gt; other's answer!&lt;/p&gt;

&lt;p&gt;Thank you!💘&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Feedback: This is awesome!

Demo: &amp;lt;url&amp;gt;
Github: &amp;lt;url&amp;gt;
Tech-Stack: Vue, TailwindCSS
Learning Outcome: 
  1. 
  2.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Why?
&lt;/h2&gt;

&lt;p&gt;I share these design freely so that anyone who wanted to practice or challenge Web design be able to do so without paying other platform (&lt;em&gt;ahem) to get their **Figma Design&lt;/em&gt;*🎨 file. &lt;/p&gt;

&lt;p&gt;You are free to use the Design you've created in your portfolio. No copyright claims or anything.&lt;/p&gt;

&lt;p&gt;But if you are loving my work, you are most welcomed to follow me on &lt;code&gt;Dev.to&lt;/code&gt; and &lt;a href="https://twitter.com/zernonia" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; 😄&lt;/p&gt;

&lt;h3&gt;
  
  
  Thank you for your time and attention! Hope you'll enjoy!
&lt;/h3&gt;

</description>
      <category>idesignyoubuild</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>javascript</category>
    </item>
    <item>
      <title>I Design, You Build! - Frontend Challenge #1</title>
      <dc:creator>Zernonia</dc:creator>
      <pubDate>Sat, 25 Sep 2021 07:03:59 +0000</pubDate>
      <link>https://forem.com/zernonia/i-design-you-build-frontend-challenge-1-158a</link>
      <guid>https://forem.com/zernonia/i-design-you-build-frontend-challenge-1-158a</guid>
      <description>&lt;h2&gt;
  
  
  Challenge
&lt;/h2&gt;

&lt;p&gt;Awesome &lt;strong&gt;Gradient, 3D&lt;/strong&gt; Space design with different kind of &lt;em&gt;Design Flavor&lt;/em&gt;. Create a homepage following the design. Fulfill Target and/or Extra below:&lt;/p&gt;

&lt;p&gt;Target:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎯 Target : User can see the similar design&lt;/li&gt;
&lt;li&gt;🎯 Target : Responsive design&lt;/li&gt;
&lt;li&gt;🎯 Target : On mobile, when I select the hamburger menu, I can see a navigation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Extra:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌟 Extra : Background blur  &lt;code&gt;tips: backdrop-filter: blur();&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;🌟 Extra : Animation, hover animation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📃 Icon : &lt;a href="https://icones.js.org/collection/all" rel="noopener noreferrer"&gt;https://icones.js.org/collection/all&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📃 Hosting: &lt;a href="https://vercel.com/" rel="noopener noreferrer"&gt;https://vercel.com/&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠ It will defeat the purpose of learning if you just copy and paste someone else's answer 😭!&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Start Coding!
&lt;/h2&gt;

&lt;p&gt;If you are ready to take on the challenge, then&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Love 💖 this design on &lt;a href="https://dribbble.com/shots/15698554-Space-Landing-Page-Web-Design" rel="noopener noreferrer"&gt;Dribbble&lt;/a&gt; and follow me!&lt;/li&gt;
&lt;li&gt;Bookmark this post so that you can submit it easier.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Right-click&lt;/strong&gt; &lt;a href="https://www.figma.com/file/hDcipE9zMuiDsYAkjcQuKw/Space?node-id=0%3A1" rel="noopener noreferrer"&gt;here&lt;/a&gt; and open &lt;strong&gt;Open link in a New Tab&lt;/strong&gt; to see the Figma Design.&lt;/li&gt;
&lt;li&gt;Enjoy coding! 🤩&lt;/li&gt;
&lt;li&gt;Come back to submit!&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;All the &lt;strong&gt;images&lt;/strong&gt; and &lt;strong&gt;assets&lt;/strong&gt; are free to use, and can be exported from the Figma Design.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.figma.com/file/hDcipE9zMuiDsYAkjcQuKw/Space?node-id=0%3A1" rel="noopener noreferrer"&gt;&lt;img src="https://media.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%2Fakqho6affec7298p6hu7.png" alt="Zernonia Space Design"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Submission
&lt;/h2&gt;

&lt;p&gt;Once you've completed, come back to this post, and submit your solution using the following &lt;code&gt;template&lt;/code&gt; in the comment section. You are encouraged to &lt;strong&gt;comment&lt;/strong&gt; and &lt;strong&gt;upvotes&lt;/strong&gt; other's answer!&lt;/p&gt;

&lt;p&gt;Thank you!💘&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Feedback: This is awesome!

Demo: &amp;lt;url&amp;gt;
Github: &amp;lt;url&amp;gt;
Tech-Stack: Vue, TailwindCSS
Learning Outcome: 
  1. 
  2.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Why?
&lt;/h2&gt;

&lt;p&gt;I share these design freely so that anyone who wanted to practice or challenge Web design be able to do so without paying other platform (&lt;em&gt;ahem) to get their **Figma Design&lt;/em&gt;*🎨 file. &lt;/p&gt;

&lt;p&gt;You are free to use the Design you've created in your portfolio. No copyright claims or anything.&lt;/p&gt;

&lt;p&gt;But if you are loving my work, you are most welcomed to follow me on &lt;code&gt;Dev.to&lt;/code&gt; and &lt;a href="https://twitter.com/zernonia" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; 😄&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1441770639606439940-920" src="https://platform.twitter.com/embed/Tweet.html?id=1441770639606439940"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1441770639606439940-920');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1441770639606439940&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h3&gt;
  
  
  Thank you for your time and attention!
&lt;/h3&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>javascript</category>
      <category>idesignyoubuild</category>
    </item>
    <item>
      <title>Supabase/Postgres SQL Cheatsheet - Curated List of SQL</title>
      <dc:creator>Zernonia</dc:creator>
      <pubDate>Tue, 21 Sep 2021 14:48:36 +0000</pubDate>
      <link>https://forem.com/zernonia/supabase-postgres-sql-cheatsheet-curated-list-of-sql-62f</link>
      <guid>https://forem.com/zernonia/supabase-postgres-sql-cheatsheet-curated-list-of-sql-62f</guid>
      <description>&lt;h2&gt;
  
  
  Hey!
&lt;/h2&gt;

&lt;p&gt;If you are  a &lt;strong&gt;PostgreSQL&lt;/strong&gt; user, you are missing out on Big Thing!!! You could spin up a Backend Server, with PostgreSQL as Database in just 2 minutes! How? That is using &lt;a href="https://supabase.io/" rel="noopener noreferrer"&gt;Supabase&lt;/a&gt;. Supabase has raised &lt;a href="https://techcrunch.com/2021/09/09/supabase-raises-30m-for-its-open-source-insta-backend/" rel="noopener noreferrer"&gt;30 million&lt;/a&gt; as an Open Source Backend-as-a-Service (BaaS) startup. Mind blown!!!! 🤯&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsupabase.io%2Fnew%2Fimages%2Fblog%2F2021-august%2Fsupabase-series-a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsupabase.io%2Fnew%2Fimages%2Fblog%2F2021-august%2Fsupabase-series-a.png" alt="Supabase raised 30 million"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Built on Top, problem?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsupabase.io%2Fnew%2Fimages%2Fblog%2Fpg13%2Fpostgres-13-og.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsupabase.io%2Fnew%2Fimages%2Fblog%2Fpg13%2Fpostgres-13-og.jpg" alt="Postgres 13 with Supabase"&gt;&lt;/a&gt;&lt;br&gt;
Supabase is indeed build on top of Postgres, and thus enabled developers to utilize all the awesome and stable &lt;a href="https://supabase.io/docs/guides/database/extensions" rel="noopener noreferrer"&gt;extension&lt;/a&gt;/scripts that has been around the industry for years! You agree with me... right? 😂&lt;/p&gt;

&lt;p&gt;Because of the continuous updates by Postgres (and I heard &lt;a href="https://www.postgresql.org/about/news/postgresql-14-beta-1-released-2213/" rel="noopener noreferrer"&gt;v14&lt;/a&gt; is drawing near!), many of the scripts on &lt;strong&gt;Stackoverflow&lt;/strong&gt; has outdated, and causes Supabase users, including &lt;em&gt;myself&lt;/em&gt; (which switch from Firebase - NoSQL) to encounter some problem when running SQL query. Thus, we need Postgres expert like &lt;strong&gt;you&lt;/strong&gt; to give Supabase a try, and join the Supabase community, &lt;a href="https://discord.com/invite/AYybku5cUz" rel="noopener noreferrer"&gt;Discord&lt;/a&gt; and most importantly make Open Source better! &lt;/p&gt;

&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;
  
  
  Solution - Cheatsheets
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://database.dev" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdatabase.dev%2Fog.png" alt="Supabase SQL"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Due to the reason mentioned previously, I've curated some of the SQL scripts, to aid Supabase users, or Postgres users in finding the relevant, up-to-date, and tested SQL scripts. &lt;/p&gt;

&lt;p&gt;Where's the list, here it is!!!! -&amp;gt; &lt;a href="https://database.dev/" rel="noopener noreferrer"&gt;Supabase SQL&lt;/a&gt; 🎉🙌&lt;/p&gt;

&lt;p&gt;If you - find it useful, please spare a 🌟 at the &lt;a href="https://github.com/supabase-community/supabase-sql" rel="noopener noreferrer"&gt;Github Repo&lt;/a&gt;&lt;br&gt;
If you - found any issue/bug, create &lt;code&gt;issues&lt;/code&gt; is much appreciated.&lt;br&gt;
If you - wanted to contribute the SQL scripts, PR is even more welcomed!&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;
  
  
  That's it
&lt;/h2&gt;

&lt;p&gt;That's all the good news I wanna share with you today. If you are a Supabase user, hope you'll like it. If you are a Postgres user, I hope you'll give &lt;a href="https://supabase.io" rel="noopener noreferrer"&gt;Supabase&lt;/a&gt; a try. If you are none of the above, then you are really missing out on &lt;strong&gt;GREAT&lt;/strong&gt; things! &lt;/p&gt;

&lt;p&gt;Until next time, bye! 👋&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;
  
  
  Follow me
&lt;/h2&gt;

&lt;p&gt;🐤 Bird app - &lt;a href="https://twitter.com/zernonia" rel="noopener noreferrer"&gt;@zernonia&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1438767175515271176-531" src="https://platform.twitter.com/embed/Tweet.html?id=1438767175515271176"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1438767175515271176-531');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1438767175515271176&amp;amp;theme=dark"
  }



&lt;/p&gt;

</description>
      <category>supabase</category>
      <category>postgres</category>
      <category>showdev</category>
      <category>vue</category>
    </item>
    <item>
      <title>Supabase Storage CDN and Transformation with Serverless function (Unofficial)</title>
      <dc:creator>Zernonia</dc:creator>
      <pubDate>Sat, 11 Sep 2021 02:47:45 +0000</pubDate>
      <link>https://forem.com/zernonia/supabase-storage-cdn-and-transformation-with-serverless-function-unofficial-go</link>
      <guid>https://forem.com/zernonia/supabase-storage-cdn-and-transformation-with-serverless-function-unofficial-go</guid>
      <description>&lt;p&gt;This tutorial is just a temporary alternative, while &lt;strong&gt;Supabase&lt;/strong&gt; team is working hard to ship more and more features, where Storage CDN and Transformation is in their pipeline.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1631279067782%2F63nFl5KeN.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1631279067782%2F63nFl5KeN.png" alt="image.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;source: &lt;a href="https://supabase.io/storage" rel="noopener noreferrer"&gt;https://supabase.io/storage&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  ⭐🎉🎊
&lt;/h2&gt;

&lt;p&gt;On that note, congratulations Supabase team on raising &lt;a href="https://techcrunch.com/2021/09/09/supabase-raises-30m-for-its-open-source-insta-backend/" rel="noopener noreferrer"&gt;$30M&lt;/a&gt; as an open source backend-as-a-service startup!!&lt;/p&gt;




&lt;h1&gt;
  
  
  Get started!
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Take note ⚠:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;We will be using &lt;strong&gt;Vercel&lt;/strong&gt; Serverless function to make this magic happens, the code might be different but the logic is the same.&lt;/li&gt;
&lt;li&gt;We will be serving and transforming &lt;code&gt;Public&lt;/code&gt; bucket only. If you wish to see how to implement these magic with Supabase Auth for RLS, remember to follow me for more tutorial.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With that said, we will go through just a few simple steps to implement this magic on &lt;br&gt;
our Supabase Storage's images.&lt;/p&gt;
&lt;h2&gt;
  
  
  1. Getting Image bucket &amp;amp; name
&lt;/h2&gt;

&lt;p&gt;We will be using &lt;code&gt;bucket_name&lt;/code&gt; and &lt;code&gt;file_name&lt;/code&gt; variable to call the serverless function, instead of the full public url. If not, your image link would be super-duper long, and unneccessary.&lt;/p&gt;

&lt;p&gt;Here are some of the way you could prepare the &lt;code&gt;bucket_name&lt;/code&gt; and/or &lt;code&gt;file_name&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;1.If you are allowing your users to upload static content to &lt;code&gt;Public&lt;/code&gt; bucket, then take note of the &lt;code&gt;bucket_name&lt;/code&gt; and &lt;code&gt;file_name&lt;/code&gt; users keyed-in.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bucket_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;static&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;    &lt;span class="c1"&gt;// your bucket name&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;file_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;avatar.png&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;    &lt;span class="c1"&gt;// name for the file&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;avatarFile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;files&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;supabase&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;storage&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;avatars&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;upload&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt; &lt;span class="nx"&gt;bucket_name&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt; &lt;span class="nx"&gt;file_name&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;avatarFile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;cacheControl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;3600&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;upsert&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2.You can get use &lt;a href="https://supabase.io/docs/reference/javascript/storage-from-list" rel="noopener noreferrer"&gt;from.list()&lt;/a&gt; to retrieve the images you want in a &lt;code&gt;bucket&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In this case, I will simply just list everything in my &lt;code&gt;bucket_name&lt;/code&gt; bucket.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;supabase&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bucket_name&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;file_names&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;names&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3.If you already have the public URL fetch together in another query, with link such as &lt;code&gt;https://asdasaeipbvsvnr.supabase.co/storage/v1/object/public/static/avatar.png&lt;/code&gt;, then you can quickly get the &lt;code&gt;bucket_name&lt;/code&gt; and &lt;code&gt;file_name&lt;/code&gt; using&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;link&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://asdasaeipbvsvnr.supabase.co/storage/v1/object/public/static/avatar.png&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="nx"&gt;bucket_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;file_name&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;public/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Alright, now we have our appropriate variable, we can start construct our new link to slot into &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; tag! 🙌&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Construct new link
&lt;/h2&gt;

&lt;p&gt;Because we are using Vercel serverless function, we need to wrap our img url around the &lt;code&gt;api&lt;/code&gt; route. &lt;/p&gt;

&lt;p&gt;If you are using Vercel for your current project, you can simply use the following code to generate new link for your &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;URLSearchParams&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;file_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;bucket_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="c1"&gt;// params we haven't mentioned...&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;new_link&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;  &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;origin&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/resize?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you are not using, Vercel as deployment, you can easily &lt;a href="https://github.com/zernonia/supabase-cdn-transformation" rel="noopener noreferrer"&gt;forked this repo&lt;/a&gt; that I created for this tutorial. You just have to follow the steps and setup your &lt;code&gt;.env&lt;/code&gt; on Vercel. If you wanted to learn more on how this function works, continue follow along!&lt;/p&gt;

&lt;h2&gt;
  
  
  Serverless function
&lt;/h2&gt;

&lt;p&gt;This part is where the magic happens, let's create a new file in your project root, named &lt;code&gt;api/resize.ts&lt;/code&gt; (be default Vercel will convert all files in api folder into serverless function).&lt;/p&gt;

&lt;p&gt;Then, you have to install a few packages &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I'm using yarn and typescript, you can use npm, and plain Javascript if you like&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn add sharp axios
yarn add &lt;span class="nt"&gt;-D&lt;/span&gt; @vercel/node @types/sharp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, create a basic function as such:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;VercelRequest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;VercelResponse&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@vercel/node&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;sharp&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sharp&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;axios&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;VercelRequest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;VercelResponse&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;end&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To quickly test out the &lt;code&gt;api&lt;/code&gt;, run &lt;code&gt;vercel dev&lt;/code&gt; to spin up Vercel Development Server.&lt;br&gt;
Then visit &lt;code&gt;http://localhost:3000/api/resize&lt;/code&gt;, it should response with 'Hi'.&lt;/p&gt;

&lt;p&gt;After that , replace the function with this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;VercelRequest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;VercelResponse&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;q&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;

  &lt;span class="c1"&gt;// this tricks to deconstruct all the nested query into it's own variable.&lt;/span&gt;
  &lt;span class="c1"&gt;// parameters&lt;/span&gt;
  &lt;span class="c1"&gt;//   w: width   (pixel)&lt;/span&gt;
  &lt;span class="c1"&gt;//   h: height   (pixel)&lt;/span&gt;
  &lt;span class="c1"&gt;//   f: file_name&lt;/span&gt;
  &lt;span class="c1"&gt;//   b: bucket_name&lt;/span&gt;
  &lt;span class="c1"&gt;//   q: quality  (0 to 100)&lt;/span&gt;

  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;end&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Remember we have created a new link for the image just now?? Now we have to construct it back to original url, then convert it to Buffer. Thankfully, axios make this job so easy.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;VercelRequest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;VercelResponse&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="p"&gt;...&lt;/span&gt;

  &lt;span class="c1"&gt;// check if `bucket_name` and `file_name` are available, else return error&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;f&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SUPABASE_URL&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/storage/v1/object/public/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt; &lt;span class="nx"&gt;f&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;buffer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;responseType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;arraybuffer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;})).&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;Buffer&lt;/span&gt;

     &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;statusCode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;
     &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;image/png&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
     &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;end&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;statusCode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text/html&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;end&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;h1&amp;gt;Internal Error&amp;lt;/h1&amp;gt;&amp;lt;p&amp;gt;Sorry, there was a problem&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can now test this api endpoint as such &lt;code&gt;http://localhost:3000/api/resize?f=avatar.png&amp;amp;b=static&lt;/code&gt; (Of course you need to have the image in your bucket) to see if your image is generated. If it works, let continue on the longest script in this tutorial, where we use sharp to transfrom our image to the desire width, height or quality.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;VercelRequest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;VercelResponse&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="p"&gt;...&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;f&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="p"&gt;...&lt;/span&gt;

   &lt;span class="c1"&gt;// here we create a new_params object to convert string to number, and also set default value&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;new_params&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;w&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;800&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// set default 800px&lt;/span&gt;
      &lt;span class="na"&gt;h&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="c1"&gt;// set to null if not provided, so that Sharp automatically keep the aspect ratio&lt;/span&gt;
      &lt;span class="na"&gt;q&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;q&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;      &lt;span class="c1"&gt;// set default 80% quality&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// here's where the Transformation happens&lt;/span&gt;
    &lt;span class="nf"&gt;sharp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;resize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;new_params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;new_params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;jpeg&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;quality&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;new_params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;q&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;     &lt;span class="c1"&gt;// change to .webp() if you want to serve as webp&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toBuffer&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// here's where set the cache&lt;/span&gt;
        &lt;span class="c1"&gt;// I set to cache the media for 1 week, 60seconds * 60minutes * 24hours * 7days&lt;/span&gt;
        &lt;span class="c1"&gt;// remove setHeader('Cache-Control') if you wish not to cache it&lt;/span&gt;
        &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;statusCode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;
        &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Cache-Control&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;`public, immutable, no-transform, s-maxage=604800, max-age=604800`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  
        &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;image/jpeg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;end&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;})&lt;/span&gt;

  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;statusCode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text/html&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;end&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;h1&amp;gt;Internal Error&amp;lt;/h1&amp;gt;&amp;lt;p&amp;gt;Sorry, there was a problem&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it! Just a few line of codes and you have your own CDN and Transformation for Supabase Storage ready to go!!!! But! Don't forget the &lt;code&gt;new_link&lt;/code&gt; we created at our frontend.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lastly!
&lt;/h2&gt;

&lt;p&gt;This is the last step for this tutorial, we generated &lt;code&gt;new_link&lt;/code&gt; previously, but now it is ready to add more parameter.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Set a few width so that cache is more efficient, and need not to create so many cache when different browser visit your website.&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;windowWidth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerWidth&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;1200&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;windowWidth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerWidth&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;800&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;windowWidth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;800&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;windowWidth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;600&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;URLSearchParams&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;file_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;bucket_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;w&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;windowWidth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;h&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="c1"&gt;// set to null to keep image's aspect ratio&lt;/span&gt;
    &lt;span class="na"&gt;q&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt;      
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;new_link&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;  &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;origin&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/resize?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;// set the src to new link&lt;/span&gt;
&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;myImg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;new_link&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And we are DONE!!!&lt;br&gt;
All source code for this tutorial can be found &lt;a href="https://github.com/zernonia/supabase-cdn-transformation" rel="noopener noreferrer"&gt;here&lt;/a&gt;!&lt;/p&gt;
&lt;h2&gt;
  
  
  Showcase
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.madewithsupabase.com" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1631288642681%2FvmrXvTB30.png" alt="image.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check out  &lt;a href="https://www.madewithsupabase.com/" rel="noopener noreferrer"&gt;Made With Supabase&lt;/a&gt;, and inspect the &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt;, you will see the similar code there, with slight minor change. &lt;/p&gt;

&lt;p&gt;What is Made With Supabase? It is a collection of projects that &lt;strong&gt;made with Supabase&lt;/strong&gt;! Feel free to submit your Supabase project, share the awesome-ness of Supabase with the world!&lt;/p&gt;
&lt;h1&gt;
  
  
  Before you go
&lt;/h1&gt;

&lt;p&gt;If you find this tutorial helpful, and wish to lean more, then follow me here, and follow my Twitter!&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1428379387863306241-609" src="https://platform.twitter.com/embed/Tweet.html?id=1428379387863306241"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1428379387863306241-609');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1428379387863306241&amp;amp;theme=dark"
  }



&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>supabase</category>
      <category>serverless</category>
      <category>webdev</category>
    </item>
    <item>
      <title>10 Amazing og:image Inspiration 🎨✨</title>
      <dc:creator>Zernonia</dc:creator>
      <pubDate>Tue, 07 Sep 2021 10:05:14 +0000</pubDate>
      <link>https://forem.com/zernonia/10-amazing-og-image-inspiration-5h67</link>
      <guid>https://forem.com/zernonia/10-amazing-og-image-inspiration-5h67</guid>
      <description>&lt;p&gt;Designing an eye-capturing &lt;code&gt;og:image&lt;/code&gt; can be easy, and can be difficult.&lt;br&gt;
That's why, let's look at some of the awesome design that I've curated here. But before that, just in case you don't know what is &lt;code&gt;og:*&lt;/code&gt;, here's a small preview of what og can do to display your website beautifully on Facebook.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fbd9c6edpeb1ko47n3j0v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fbd9c6edpeb1ko47n3j0v.png" alt="Facebook display OG"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So, what is og? Well, we will leave it for another article.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  10 list of &lt;code&gt;og:image&lt;/code&gt; inspiration
&lt;/h1&gt;

&lt;h2&gt;
  
  
  SaaS
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Calendly
&lt;/h3&gt;

&lt;p&gt;As a popular software, &lt;strong&gt;&lt;a href="https://calendly.com/" rel="noopener noreferrer"&gt;Calendly&lt;/a&gt;&lt;/strong&gt; no doubt has one of the most simple and beautiful &lt;code&gt;og:image&lt;/code&gt;. Just a simple screenshot of your landing page is sufficed. If you are building a Software-as-a-Service, this approach is highly encouraged!&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Fk0lk9kiuza3o%2F6GX3BEB2StTLRWYuFW9UBj%2F23d815c203c7f9dbd25a024ce1842ee8%2FHomepage.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Fk0lk9kiuza3o%2F6GX3BEB2StTLRWYuFW9UBj%2F23d815c203c7f9dbd25a024ce1842ee8%2FHomepage.png" alt="Calendly og:image"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  2. Billi
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://billi.app/" rel="noopener noreferrer"&gt;Billi&lt;/a&gt;&lt;/strong&gt; is another software that has a beautiful preview link when shared on social media.(Facebook, Twitter, Discord, etc.). The emphasis on &lt;strong&gt;Mobile Device&lt;/strong&gt; as shown in the og already provides the visitors that this is a mobile apps before landing on their websites. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fbilli.app%2Fstatic%2Fimg%2Fbilli%2Fshare.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fbilli.app%2Fstatic%2Fimg%2Fbilli%2Fshare.png" alt="Billi og:image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Notion
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.notion.so/" rel="noopener noreferrer"&gt;Notion&lt;/a&gt;&lt;/strong&gt;, is well-known for its minimalistic design, and flexible integrations with a tons of software. The monotone art, with white background style really distinguished them from the other SaaS.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpbs.twimg.com%2Fcard_img%2F1431822999066316800%2FvDVmITIR%3Fformat%3Djpg%26name%3Dlarge" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpbs.twimg.com%2Fcard_img%2F1431822999066316800%2FvDVmITIR%3Fformat%3Djpg%26name%3Dlarge" alt="Notion og:image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Portfolio (Agency/Personal)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  4. Unshift
&lt;/h3&gt;

&lt;p&gt;For a agency/personal website, first impression is always the key to client's heart. When you share your website on social media. &lt;strong&gt;&lt;a href="https://unshift.jp" rel="noopener noreferrer"&gt;Unshift&lt;/a&gt;&lt;/strong&gt; has a very unique design, which intrigued the client/visitor to find out who is the awesome designer behind that banner.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Funshift.jp%2Fimg%2Fcommon%2Fogp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Funshift.jp%2Fimg%2Fcommon%2Fogp.png" alt="Unshift og:image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Ali Ali
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://alitwotimes.com/" rel="noopener noreferrer"&gt;AliAli&lt;/a&gt;&lt;/strong&gt;, as a commercials director showcase their masterpiece straight from their &lt;code&gt;og:image&lt;/code&gt;. Check it out!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Falitwotimes.com%2Fwp-content%2Fthemes%2Faliali%2Fsrc%2Fassets%2Fimg%2Fog-image.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Falitwotimes.com%2Fwp-content%2Fthemes%2Faliali%2Fsrc%2Fassets%2Fimg%2Fog-image.jpg" alt="Aliali og:image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Julia Johnson
&lt;/h3&gt;

&lt;p&gt;Another awesome screenshot of landing page as &lt;code&gt;og:image&lt;/code&gt;, who says that style only applicable to SaaS? 😉&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.juliajohnson.com%2Fresources%2Fimages%2Fsocial-share.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.juliajohnson.com%2Fresources%2Fimages%2Fsocial-share.png" alt="Julia John og:image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Blog
&lt;/h2&gt;

&lt;h3&gt;
  
  
  7. How Many Plants
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://howmanyplants.com/" rel="noopener noreferrer"&gt;How Many Plants&lt;/a&gt;&lt;/strong&gt;, if you are a plant lover, are you intrigued to click on it? I'm sure you do!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuploads-ssl.webflow.com%2F5f4e8114a9640d4aa2c637c4%2F606612f5dece3e9f9f64e387_home%2520metatag-export.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuploads-ssl.webflow.com%2F5f4e8114a9640d4aa2c637c4%2F606612f5dece3e9f9f64e387_home%2520metatag-export.png" alt="How many plants og:image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  8. Dev.to
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://dev.to/"&gt;Dev.to&lt;/a&gt;&lt;/strong&gt; is a Developer focused community.&lt;br&gt;
This is not the normal &lt;code&gt;og:image&lt;/code&gt;, this is the dynamic image that auto-generated for every blogpost that has no cover photo. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fhcti.io%2Fv1%2Fimage%2F67314343-007c-423c-93e9-fdfdf20506f8" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fhcti.io%2Fv1%2Fimage%2F67314343-007c-423c-93e9-fdfdf20506f8" alt="Devto og:image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  9. IndieHackers
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.indiehackers.com/" rel="noopener noreferrer"&gt;Indiehackers&lt;/a&gt;&lt;/strong&gt;, let developers and entrepreneur to share they strategies and revenue, thus &lt;code&gt;og:image&lt;/code&gt; design is so awesome in attracting anyone scrolling through social media.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Findie-hackers.appspot.com%2Fshareable-images%2Fposts%2Fab51c3d51c" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Findie-hackers.appspot.com%2Fshareable-images%2Fposts%2Fab51c3d51c" alt="Indiehacker og:image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  10. Daily Dev
&lt;/h3&gt;

&lt;p&gt;Lastly, another dynamic &lt;code&gt;og:image&lt;/code&gt; that showcase the blog easily. Check out &lt;strong&gt;&lt;a href="https://daily.dev/" rel="noopener noreferrer"&gt;Daily Dev&lt;/a&gt;&lt;/strong&gt; to see the awesome design.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.website-files.com%2F5e0f1144930a8bc8aace526c%2F5ef3ba7c65db641419abf576_ffbjjh3yv9u8ue6zp954.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.website-files.com%2F5e0f1144930a8bc8aace526c%2F5ef3ba7c65db641419abf576_ffbjjh3yv9u8ue6zp954.png" alt="Daily Dev og:image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  That's it!
&lt;/h1&gt;

&lt;p&gt;If you are interested to see more information regarding &lt;code&gt;og:*&lt;/code&gt; (Open Graph Protocol), follow me!!!&lt;/p&gt;

&lt;p&gt;See ya! Cheers!&lt;/p&gt;




</description>
      <category>webdev</category>
      <category>design</category>
      <category>website</category>
      <category>javascript</category>
    </item>
    <item>
      <title>NextConf Clone (Supabase Realtime) - Introduction</title>
      <dc:creator>Zernonia</dc:creator>
      <pubDate>Sat, 19 Jun 2021 05:34:17 +0000</pubDate>
      <link>https://forem.com/zernonia/nextconf-clone-supabase-realtime-introduction-14pl</link>
      <guid>https://forem.com/zernonia/nextconf-clone-supabase-realtime-introduction-14pl</guid>
      <description>&lt;h2&gt;
  
  
  Next Conf Realtime Playground
&lt;/h2&gt;

&lt;p&gt;Have you seen the awesome Realtime Playground for &lt;a href="https://nextjs.org/conf" rel="noopener noreferrer"&gt;Next Conf&lt;/a&gt;? I believe most of you did. I thought this is just a fun playground for &lt;code&gt;React/Next Dev&lt;/code&gt; to play around when they are claiming their tickets, but it turns out to be something much BIGGER! &lt;a href="https://nextjs.org/live" rel="noopener noreferrer"&gt;⚠ Risk of jaw dropping&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Then, the &lt;code&gt;Frontend Dev&lt;/code&gt; in me started to wonder how they implement such features. I &lt;code&gt;Right Click -&amp;gt; Inspect&lt;/code&gt; and started to dig and study how the magic works.&lt;/p&gt;




&lt;h2&gt;
  
  
  Realtime sync (Replicache)
&lt;/h2&gt;

&lt;p&gt;It turns out their magic is backed by the &lt;code&gt;Backstage assistant&lt;/code&gt;, &lt;a href="https://replicache.dev" rel="noopener noreferrer"&gt;Replicache&lt;/a&gt;. &lt;strong&gt;Replicache&lt;/strong&gt; makes it easy to add realtime collaboration, lag-free UI, and offline support to web apps. Most importantly, it works with any backend stack 🤯.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you are planning to add Realtime Collaboration into your project/products, be sure to check it out&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Too Complicated?
&lt;/h2&gt;

&lt;p&gt;But, if you find it too complicated 😫 and involves too many steps just to add Realtime Collaboration into your project, then the following guide and series will definitely help you.&lt;/p&gt;

&lt;p&gt;We won't dig too deep into Replicache, but trying to replicate similar features by using &lt;a href="https://supabase.io/" rel="noopener noreferrer"&gt;Supabase⚡&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Be sure to &lt;strong&gt;Bookmark&lt;/strong&gt;🔖 and follow my steps in this Series&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Preview
&lt;/h2&gt;

&lt;p&gt;If you are intrigued and want to know where this series will bring you to, you check it out &lt;a href="https://supabase-realtime-nextconf-clone.vercel.app/" rel="noopener noreferrer"&gt;Here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://supabase-realtime-nextconf-clone.vercel.app/" rel="noopener noreferrer"&gt;&lt;img src="https://media.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%2Frhxz3q7wo8ubsa302llr.PNG" alt="Supabase Realtime NextConf Clone"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;OR &lt;/p&gt;

&lt;p&gt;If you just wanna read codes and ignore the rest of the post, no worry, here's the &lt;a href="https://github.com/zernonia/supabase-realtime-nextconf-clone" rel="noopener noreferrer"&gt;Github Repo&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/zernonia" rel="noopener noreferrer"&gt;
        zernonia
      &lt;/a&gt; / &lt;a href="https://github.com/zernonia/supabase-realtime-playground" rel="noopener noreferrer"&gt;
        supabase-realtime-playground
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;br&gt;
&lt;p&gt;
  &lt;a href="https://github.com/zernonia/supabase-realtime-playground" rel="noopener noreferrer"&gt;
    &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fzernonia%2Fsupabase-realtime-playgroundimages%2Fmain.svg" alt="Logo" width="80" height="80"&gt;
  &lt;/a&gt;
  &lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Supabase Realtime Playground&lt;/h3&gt;
&lt;/div&gt;
  &lt;p&gt;
    Fun &amp;amp; Simple &lt;strong&gt;&lt;a href="https://supabase.io/" rel="nofollow noopener noreferrer"&gt;Supabase&lt;/a&gt; Realtime Demo.&lt;/strong&gt;
    &lt;br&gt;
    Realtime Play Button • Realtime Chat
    &lt;br&gt;
    &lt;br&gt;
    &lt;a href="https://supabase-realtime-playground.vercel.app/" rel="nofollow noopener noreferrer"&gt;View Demo&lt;/a&gt;
    ·
    &lt;a href="https://github.com/zernonia/supabase-realtime-playground/issues" rel="noopener noreferrer"&gt;Report Bug&lt;/a&gt;
    ·
    &lt;a href="https://github.com/zernonia/supabase-realtime-playground/issues" rel="noopener noreferrer"&gt;Request Feature&lt;/a&gt;
  &lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/zernonia/supabase-realtime-playgroundimages/main.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fzernonia%2Fsupabase-realtime-playgroundimages%2Fmain.png" alt="Supabase Schema"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;
⚠️ Archived&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;This repo has been archive in favor of the new Multiplayer features that is coming soon on Supabase.
Read more about it &lt;a href="https://supabase.com/blog/2022/04/01/supabase-realtime-with-multiplayer-features" rel="nofollow noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🚀 Features&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;🐤 Twitter Auth&lt;/li&gt;
&lt;li&gt;🎉 Play around with other user across the internet&lt;/li&gt;
&lt;li&gt;⌚ Realtime update Cursor and Button Count&lt;/li&gt;
&lt;li&gt;⛅ Realtime chat&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📇 About The Project&lt;/h2&gt;

&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;TLDR&lt;/em&gt; - &lt;strong&gt;NextConf Realtime Clone using Supabase Realtime&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I was heavily inspired by &lt;a href="https://nextjs.org/conf#room-9q0s8" rel="nofollow noopener noreferrer"&gt;Next Conf&lt;/a&gt; realtime ⌚ functionalities, and take some time on learning how Next implement it. Seems like they are using &lt;a href="https://doc.replicache.dev/how-it-works" rel="nofollow noopener noreferrer"&gt;Replicache&lt;/a&gt; to implement the &lt;code&gt;Push/Pull&lt;/code&gt; realtime functionalities.&lt;/p&gt;
&lt;p&gt;Then I look around the internet and couldn't find any similar example, thus inspired me to take on the challenge, and utilizing &lt;a href="https://supabase.io/docs/reference/javascript/subscribe" rel="nofollow noopener noreferrer"&gt;Supabase Realtime ⚡&lt;/a&gt; to replicate similar effect.&lt;/p&gt;
&lt;p&gt;After long hour of studying…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/zernonia/supabase-realtime-playground" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;





&lt;h2&gt;
  
  
  Ready ❓
&lt;/h2&gt;

&lt;p&gt;In the next post, I will start sharing about How Supabase Realtime can achieve this features, Why I decided to use Supabase, and etc.&lt;/p&gt;

&lt;p&gt;Feel free to follow my Twitter: &lt;br&gt;
&lt;code&gt;@zernonia&lt;/code&gt;&lt;/p&gt;

</description>
      <category>vue</category>
      <category>nextjs</category>
      <category>supabase</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Supabase Schema Visualizer - No installation/login</title>
      <dc:creator>Zernonia</dc:creator>
      <pubDate>Mon, 10 May 2021 03:45:51 +0000</pubDate>
      <link>https://forem.com/zernonia/supabase-schema-visualizer-no-installation-login-49kg</link>
      <guid>https://forem.com/zernonia/supabase-schema-visualizer-no-installation-login-49kg</guid>
      <description>&lt;h1&gt;
  
  
  The Idea and Inspiration 💡
&lt;/h1&gt;

&lt;p&gt;Recently, I got addicted to &lt;a href="https://supabase.io/" rel="noopener noreferrer"&gt;Supabase ⚡&lt;/a&gt; as an &lt;strong&gt;Open-Source Firebase Alternative&lt;/strong&gt;, and I'm having so much fun with it. It has such wonderful UI, and well-written documentation, that allows me to spin up a project easily.&lt;/p&gt;

&lt;p&gt;Because of that, I've started to learn &lt;strong&gt;PostgreSQL&lt;/strong&gt;, which Supabase built on top of. I quickly realized that how great would it be if I can easily visualize all my tables, and the relationship with one another (since PostgreSQL is a relational DB), and there's when I found out about &lt;strong&gt;Database Schema&lt;/strong&gt;🔥.&lt;/p&gt;

&lt;p&gt;😥 Unfortunately I found many Database Schema Visualizer online which either requires me to install database software, or login with email, which I do not want to . Thus, this gave me the idea to code it myself, since I'm a Web Developer💻.&lt;/p&gt;

&lt;h1&gt;
  
  
  Showcase 🌟
&lt;/h1&gt;

&lt;p&gt;If you are Supabase user, or interested in using the visualizer, here's the link to it: &lt;a href="https://supabase-schema.vercel.app/" rel="noopener noreferrer"&gt;Supabase Schema Visualizer&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/zernonia" rel="noopener noreferrer"&gt;
        zernonia
      &lt;/a&gt; / &lt;a href="https://github.com/zernonia/supabase-schema" rel="noopener noreferrer"&gt;
        supabase-schema
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Secured &amp;amp; Simple Supabase Schema Visualizer
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;br&gt;
&lt;p&gt;
  &lt;a href="https://github.com/zernonia/supabase-schema" rel="noopener noreferrer"&gt;
    &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fzernonia%2Fsupabase-schemasrc%2Fassets%2Flogo.svg" alt="Logo" width="80" height="80"&gt;
  &lt;/a&gt;
  &lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Supabase Schema&lt;/h3&gt;
&lt;/div&gt;
  &lt;p&gt;
    Secured &amp;amp; Simple &lt;strong&gt;&lt;a href="https://supabase.io/" rel="nofollow noopener noreferrer"&gt;Supabase&lt;/a&gt; Schema Visualizer.&lt;/strong&gt;
    &lt;br&gt;
    No installations • No Database password required
    &lt;br&gt;
    &lt;br&gt;
    &lt;a href="https://supabase-schema.vercel.app/" rel="nofollow noopener noreferrer"&gt;View Demo&lt;/a&gt;
    ·
    &lt;a href="https://github.com/zernonia/supabase-schema/issues" rel="noopener noreferrer"&gt;Report Bug&lt;/a&gt;
    ·
    &lt;a href="https://github.com/zernonia/supabase-schema/issues" rel="noopener noreferrer"&gt;Request Feature&lt;/a&gt;
  &lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/zernonia/supabase-schemaimages/main.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fzernonia%2Fsupabase-schemaimages%2Fmain.png" alt="Supabase Schema"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🚀 Features&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;🔨 No installations&lt;/li&gt;
&lt;li&gt;🔒 Persistent State in LocalStorage&lt;/li&gt;
&lt;li&gt;🚪 Login-less&lt;/li&gt;
&lt;li&gt;👀 No Sensitive info required&lt;/li&gt;
&lt;li&gt;🤚 Moveable Schema for own design&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📇 About The Project&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;I look around the internet and found many Database Schema Visualizers that require me to either download the software, or login to view my Database Schema. I feel like there's too many unneccessary steps, just to view the schema.&lt;/p&gt;
&lt;p&gt;Thus, I've decided to take this opportunity to build this &lt;strong&gt;Open Source, Free, Login-less and Secured&lt;/strong&gt; Supabase Schema Visualizer 🔥&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;🔨 Built With&lt;/h3&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://v3.vuejs.org/" rel="nofollow noopener noreferrer"&gt;Vue 3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://vitejs.dev/" rel="nofollow noopener noreferrer"&gt;Vite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://windicss.org/" rel="nofollow noopener noreferrer"&gt;WindiCSS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🐾 Instructions&lt;/h2&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://app.supabase.io/" rel="nofollow noopener noreferrer"&gt;Supabase App&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Select your Project&lt;/li&gt;
&lt;li&gt;Go to &lt;code&gt;Settings&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;In Settings tab, Go to &lt;code&gt;API&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Under &lt;code&gt;Config&lt;/code&gt;, copy &lt;code&gt;URL&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Under &lt;code&gt;API Keys&lt;/code&gt;, copy &lt;code&gt;anon&lt;/code&gt; &lt;code&gt;public&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Paste both value into…&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/zernonia/supabase-schema" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;em&gt;If you find this useful, remember to 🌟 it on Github&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Lend me a Hand ✋
&lt;/h1&gt;

&lt;p&gt;When you navigate through the App, you might notice some bugs or possible improvement, feel free to contribute to this project.💘 &lt;/p&gt;

&lt;h1&gt;
  
  
  Ultimate Hope 🔮
&lt;/h1&gt;

&lt;p&gt;My Vision for this project is hopefully that it might be absorbed  into official &lt;a href="https://app.supabase.io/" rel="noopener noreferrer"&gt;Supabase App&lt;/a&gt;, where developer can quickly manage their project's schema visually without leaving the app. So if you find it helpful and wish to have this features, a star on Github would be very much appreciated.&lt;/p&gt;

&lt;h1&gt;
  
  
  Follow me 🐤
&lt;/h1&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1391430752462508042-696" src="https://platform.twitter.com/embed/Tweet.html?id=1391430752462508042"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1391430752462508042-696');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1391430752462508042&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h1&gt;
  
  
  Thank you 🙏
&lt;/h1&gt;

</description>
      <category>showdev</category>
      <category>vue</category>
      <category>vite</category>
      <category>supabase</category>
    </item>
  </channel>
</rss>
