<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Fayaz Ahmed</title>
    <description>The latest articles on DEV Community by Fayaz Ahmed (@fayaz).</description>
    <link>https://dev.to/fayaz</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%2F125491%2F3aefd6dc-38c2-4a1e-b52a-44942a04283a.png</url>
      <title>DEV Community: Fayaz Ahmed</title>
      <link>https://dev.to/fayaz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fayaz"/>
    <language>en</language>
    <item>
      <title>Supersaas - A fast, modern, and easy to use Nuxt 3 starter kit.</title>
      <dc:creator>Fayaz Ahmed</dc:creator>
      <pubDate>Mon, 12 Aug 2024 20:08:55 +0000</pubDate>
      <link>https://dev.to/fayaz/supersaas-a-fast-modern-and-easy-to-use-nuxt-3-starter-kit-lh2</link>
      <guid>https://dev.to/fayaz/supersaas-a-fast-modern-and-easy-to-use-nuxt-3-starter-kit-lh2</guid>
      <description>&lt;p&gt;&lt;a href="https://supersaas.dev" rel="noopener noreferrer"&gt;Supersas.dev&lt;/a&gt; A fast, modern, and easy to use Nuxt 3 starter kit. Made for people who want to build fast &lt;/p&gt;

&lt;p&gt;🔒 Authentication - Email/Password, OTP, Magic Link, Passkeys, Social Logins&lt;br&gt;
💳 Stripe &amp;amp; Lemonsqueezy payments - Unified payment hook usePayment&lt;br&gt;
📁 File storage - S3, Local files, Nuxthub R2&lt;br&gt;
📦 Database - Turso, Postgres, Cloudflare D1, Drizzle ORM&lt;br&gt;
✉️ Emails &lt;br&gt;
🌎 Works on the Edge - Cloudflare workers, Nuxthub, vercel&lt;/p&gt;

&lt;p&gt;I had actually built a bare minimum version of Supersaas a couple of months ago, dog fooded it with my clients products and I learned what it lacked. Rewrote it again from scratch and made several improvements, now its feature packed and I have literally a lot of time trying to make this as easy as possible to start new projects.&lt;/p&gt;

&lt;p&gt;I talked to users on how to improve it and added lemonsqueezy support, made it nuxthub ready and I even went ahead and purchased a bunch of boilerplates to understand what they lacked, most of those templates tried too hard and made it too complex to understand, which kinda makes me proud of how simple I made mine&lt;/p&gt;

&lt;p&gt;No trpc, no complex types, just plain old rest apis with a solid foundation and architecture which I have learned working at multiple companies over the years.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>programming</category>
      <category>vue</category>
    </item>
    <item>
      <title>Almost every project I posted on dev.to has been acquired, here's another one.</title>
      <dc:creator>Fayaz Ahmed</dc:creator>
      <pubDate>Sun, 27 Aug 2023 09:19:46 +0000</pubDate>
      <link>https://dev.to/fayaz/almost-every-project-i-posted-on-devto-has-been-acquired-heres-another-one-3ki6</link>
      <guid>https://dev.to/fayaz/almost-every-project-i-posted-on-devto-has-been-acquired-heres-another-one-3ki6</guid>
      <description>&lt;p&gt;So almost every single project I have announced on dev.to has been acquired for a decent amount of money, these projects were used by thousands of users around the world. &lt;/p&gt;

&lt;p&gt;Here's another one.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://feedful.app"&gt;https://feedful.app&lt;/a&gt; is a modern news reader in tweet deck style. &lt;/p&gt;

&lt;p&gt;Please support on Producthunt if you liked feedful - &lt;a href="https://www.producthunt.com/posts/feedful"&gt;https://www.producthunt.com/posts/feedful&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's a demo - &lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/osAwp_rchBM"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>My last project I launched on Dev.to got acquired. Here's a new one</title>
      <dc:creator>Fayaz Ahmed</dc:creator>
      <pubDate>Sat, 25 Mar 2023 08:24:31 +0000</pubDate>
      <link>https://dev.to/fayaz/my-last-project-i-launched-on-devto-got-acquired-heres-a-new-one-5158</link>
      <guid>https://dev.to/fayaz/my-last-project-i-launched-on-devto-got-acquired-heres-a-new-one-5158</guid>
      <description>&lt;p&gt;I had made and launched fluenticons last year and it got acquired. So today I am launching a new one, Let's see if the magic works for this too.&lt;/p&gt;

&lt;p&gt;Introducing PostPerfect - Improve your tweets right from Twitter - I am launching it on Producthunt - do check it out and upvote, leave a comment if you like it.&lt;br&gt;
&lt;a href="https://postperfect.xyz" rel="noopener noreferrer"&gt;https://postperfect.xyz&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.producthunt.com/posts/postperfect-ai" rel="noopener noreferrer"&gt;https://www.producthunt.com/posts/postperfect-ai&lt;/a&gt;&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%2Fip82zx12v8bap827zx6m.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%2Fip82zx12v8bap827zx6m.png" alt="PostPerfect"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is built with Vue, Vite, Crxjs, building a chrome extension was quite challenging for me, but this was such an interesting product to build&lt;/p&gt;

&lt;p&gt;Been using ChatGPT for everything and I finally thought of building something with it. I will keep building more things over time.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>vue</category>
      <category>vite</category>
    </item>
    <item>
      <title>I made an extremely fast, fully static rss reader</title>
      <dc:creator>Fayaz Ahmed</dc:creator>
      <pubDate>Sun, 30 Jan 2022 18:55:29 +0000</pubDate>
      <link>https://dev.to/fayaz/i-made-an-extremely-fast-fully-static-rss-reader-11fa</link>
      <guid>https://dev.to/fayaz/i-made-an-extremely-fast-fully-static-rss-reader-11fa</guid>
      <description>&lt;p&gt;So, I always wanted a rss reader, which had images for all the articles and I wanted it fast, hence came this idea, I have been using this for my personal use for a very long time now, finally making it open source.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://feedful.vercel.app" rel="noopener noreferrer"&gt;https://feedful.vercel.app&lt;/a&gt; - do star on github if you find it good. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note, this is still a work in progress.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;How did I make it static?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A github action scrapes data and commits the data every 4 hours&lt;/li&gt;
&lt;li&gt;Vercel deploys it whenever a new commit is pushed.&lt;/li&gt;
&lt;/ol&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%2F66qyjn0shnqmsrqzdgf0.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%2F66qyjn0shnqmsrqzdgf0.png" alt="Feedful - light"&gt;&lt;/a&gt;&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%2Fhz4honwiougm4gg171c1.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%2Fhz4honwiougm4gg171c1.png" alt="Feedful - dark"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
      <category>vue</category>
    </item>
    <item>
      <title>Sideproject Update - Fluenticons v2</title>
      <dc:creator>Fayaz Ahmed</dc:creator>
      <pubDate>Wed, 08 Dec 2021 08:46:18 +0000</pubDate>
      <link>https://dev.to/fayaz/sideproject-update-fluenticons-v2-np</link>
      <guid>https://dev.to/fayaz/sideproject-update-fluenticons-v2-np</guid>
      <description>&lt;p&gt;So, last February I had made a small weekend project and last month I released a version 2 of it. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://fluenticons.co"&gt;Fluenticons&lt;/a&gt; is an icon viewer for Microsoft fluent icons. It has over 4000+ open beautiful icons which you can use in your projects.&lt;/p&gt;

&lt;p&gt;Fluenticons is now sponsored by Iconfinder, sign up and get $10 worth of credits (via the banner in fluenticons).&lt;/p&gt;

&lt;h3&gt;
  
  
  What's new in v2?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;No more hacks, I've used actual SVG's now, so I was able to add some new features like manipulating them.&lt;/li&gt;
&lt;li&gt;You can copy snippets for SVGs, Vue component, React Component, HTML Image.&lt;/li&gt;
&lt;li&gt;You can download SVGs, PNGs, WEBP, Vue component, React Component now.&lt;/li&gt;
&lt;li&gt;Manipulate colors to see how the icon looks.&lt;/li&gt;
&lt;li&gt;More performant, loads way too fast now. (Scores 100 on Lighthouse Yay!!). Was surprised to see the site loading in 600ms when I moved from vercel to cloudflare pages.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What's next?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Make an advanced editor like adding frames behind the icons. Inspiration - Bakery &amp;amp; Iconscout's Icon Editor (requires a lot a math, which I am not good at.)&lt;/li&gt;
&lt;li&gt;Make a npm package for others to use the components in their own web projects, probably looking a web component, maybe like boxicons.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tech stack
&lt;/h3&gt;

&lt;p&gt;Nuxt.js&lt;br&gt;
Tailwind Css.&lt;br&gt;
Hosted on cloudflare pages.&lt;/p&gt;

</description>
      <category>vue</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Making a custom toggle/switch button with Tailwindcss and Vue.js</title>
      <dc:creator>Fayaz Ahmed</dc:creator>
      <pubDate>Sun, 30 May 2021 10:00:50 +0000</pubDate>
      <link>https://dev.to/fayaz/making-a-custom-toggle-switch-button-with-tailwindcss-and-vue-js-9cm</link>
      <guid>https://dev.to/fayaz/making-a-custom-toggle-switch-button-with-tailwindcss-and-vue-js-9cm</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/RhXMtdymVnU"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Not sure what you call them, toggles or switches, but here's how you make a toggle button with Tailwindcss and Vue.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://tailwindcss-toggle.vercel.app/" rel="noopener noreferrer"&gt;Here's how it looks and works.&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&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%2Fa1onow0bh9awk08t7u3c.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%2Fa1onow0bh9awk08t7u3c.png" alt="UI"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's make a new component called &lt;code&gt;toggle.vue&lt;/code&gt; and add the below code&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;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;"w-14 h-8 flex items-center bg-gray-300 rounded-full p-1 duration-300 cursor-pointer"&lt;/span&gt;
    &lt;span class="na"&gt;:class=&lt;/span&gt;&lt;span class="s"&gt;"{ 'bg-green-500': value }"&lt;/span&gt;
    &lt;span class="na"&gt;:aria-checked=&lt;/span&gt;&lt;span class="s"&gt;"value.toString()"&lt;/span&gt;
    &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;click=&lt;/span&gt;&lt;span class="s"&gt;"toggle"&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;"bg-white w-6 h-6 rounded-full shadow-md transform duration-300"&lt;/span&gt;
      &lt;span class="na"&gt;:class=&lt;/span&gt;&lt;span class="s"&gt;"{ 'translate-x-6': value }"&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;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;span class="nt"&gt;&amp;lt;script&amp;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="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;default&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;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;methods&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;toggle&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;$emit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;input&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&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="p"&gt;};&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, use the component in your code, whoever you'd like to.&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;template&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;toggle&lt;/span&gt; &lt;span class="na"&gt;v-model=&lt;/span&gt;&lt;span class="s"&gt;"toggleValue"&lt;/span&gt; &lt;span class="nt"&gt;/&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;span class="nt"&gt;&amp;lt;script&amp;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="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&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;toggleValue&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;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="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's break down the component and try to understand.&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%2Fi.imgur.com%2FPU7H67c.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%2Fi.imgur.com%2FPU7H67c.png" alt="Toggle Component"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sorry for the bad image quality, not sure why is dev reducing the quality, even if it's hosted somewhere else, here's the &lt;a href="https://i.imgur.com/PU7H67c.png" rel="noopener noreferrer"&gt;link&lt;/a&gt; to a higher resolution pic&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;An outer which acts as a container for our toggle button, styled with rounded corners, and &lt;code&gt;display: flex&lt;/code&gt; properties.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Here's the thing when we want to add &lt;code&gt;v-model&lt;/code&gt; to custom events, there are two important things involved, a prop named &lt;strong&gt;value&lt;/strong&gt; and a event named &lt;strong&gt;input&lt;/strong&gt; to emit. so technically you custom component should look like this.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&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;custom-component&lt;/span&gt; &lt;span class="na"&gt;:value=&lt;/span&gt;&lt;span class="s"&gt;"variable"&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;input=&lt;/span&gt;&lt;span class="s"&gt;"doSomething"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The interesting thing is &lt;code&gt;v-model&lt;/code&gt; directive is a shorthand for the above attributes, which would make our component markup like this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;custom-component&lt;/span&gt; &lt;span class="na"&gt;v-model=&lt;/span&gt;&lt;span class="s"&gt;"variable"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is exactly what we're doing here with our toggle component.&lt;/p&gt;

&lt;p&gt;3.. Add a rounded div and bind this class to it &lt;code&gt;translate-x-6&lt;/code&gt; so it is gets slided to the right when &lt;code&gt;value === true&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;:class="{ 'translate-x-6': value }"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;4.. The final thing, just add a receive a prop with name &lt;code&gt;value&lt;/code&gt;, which is very important that it be named &lt;strong&gt;value&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;We now have a working custom toggle component. Just call it wherever you need like below.&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%2Fi.imgur.com%2F6czBgGl.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%2Fi.imgur.com%2F6czBgGl.png" alt="Index.vue"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's a &lt;a href="https://tailwindcss-toggle.vercel.app/" rel="noopener noreferrer"&gt;demo&lt;/a&gt; if you'd like to test it and here's the &lt;a href="https://github.com/fayazara/tailwindcss-toggle" rel="noopener noreferrer"&gt;source code&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Shameless plug, do follow me on &lt;a href="https://twitter.com/fayazara" rel="noopener noreferrer"&gt;twitter&lt;/a&gt; for more articles and announcements&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>vue</category>
    </item>
    <item>
      <title>I made a small weekend project, thoughts?</title>
      <dc:creator>Fayaz Ahmed</dc:creator>
      <pubDate>Sun, 25 Apr 2021 11:01:06 +0000</pubDate>
      <link>https://dev.to/fayaz/i-made-a-small-weekend-project-thoughts-3155</link>
      <guid>https://dev.to/fayaz/i-made-a-small-weekend-project-thoughts-3155</guid>
      <description>&lt;p&gt;So, someone I knew had a google sheet of a lot of youtube channels that are live and I thought, hey we can make a small website out of this. &lt;/p&gt;

&lt;p&gt;Introducing &lt;a href="https://yt-live.vercel.app/"&gt;YT Live&lt;/a&gt;, it has a list of all the youtube channels mostly news channels, that are live. &lt;/p&gt;

&lt;p&gt;It's made with Nuxt, Firebase, and Nuxt content module.&lt;/p&gt;

&lt;p&gt;The code is &lt;a href="https://github.com/fayazara/YT-Live"&gt;open source&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Let me know if this is helpful, or just another small project that will I will be forgetting soon.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Accepting payments with Stripe, Nuxt. js and vercel</title>
      <dc:creator>Fayaz Ahmed</dc:creator>
      <pubDate>Wed, 21 Apr 2021 05:52:35 +0000</pubDate>
      <link>https://dev.to/fayaz/accepting-payments-with-stripe-nuxt-js-and-vercel-1m14</link>
      <guid>https://dev.to/fayaz/accepting-payments-with-stripe-nuxt-js-and-vercel-1m14</guid>
      <description>&lt;p&gt;It's been a long time since my last post and I wanted to write a small article on how to accept payments with Stripe, as I was integrating Stripe into my SaaS project, which I am currently building. &lt;/p&gt;

&lt;p&gt;Accepting payments is not that difficult and you don't even need a server.&lt;/p&gt;

&lt;p&gt;I will be building this app with Nuxt.js, Tailwindcss and host it on vercel.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;TLDR; the code and the live demo can be found at the bottom of this post&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The site I have made is not complete and not responsive, but if someone wants to raise a PR and get it working, please go ahead.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;Scaffold a new Nuxt project with &lt;code&gt;yarn create nuxt-app stripe-nuxt&lt;/code&gt; and you can select a CSS framework of your choice, I chose Tailwindcss, choose axios and I have also used nuxt-content for this, for storing the products database.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Clear the index.vue page and remove styles from default.vue files.&lt;/p&gt;

&lt;p&gt;Add this markup and the script in index.vue, this will show a grid of products on the home page.&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;template&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;main&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"min-h-screen"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"p-8 max-w-4xl mx-auto"&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;"grid grid-cols-1 lg:grid-cols-3 xl:grid-cols-3 gap-6"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;nuxt-link&lt;/span&gt;
          &lt;span class="na"&gt;:to=&lt;/span&gt;&lt;span class="s"&gt;"product.slug"&lt;/span&gt;
          &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"overflow-hidden text-center"&lt;/span&gt;
          &lt;span class="na"&gt;v-for=&lt;/span&gt;&lt;span class="s"&gt;"(product, p) in products"&lt;/span&gt;
          &lt;span class="na"&gt;:key=&lt;/span&gt;&lt;span class="s"&gt;"p"&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;:src=&lt;/span&gt;&lt;span class="s"&gt;"product.images[0]"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"product.name"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"mb-4"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"font-semibold text-gray-700 mb-1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            {{ product.name }}
          &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-sm"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;$ {{ product.amount }}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/nuxt-link&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;/section&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/main&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;script&amp;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="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fade&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;asyncData&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;$content&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;products&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;$content&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;products&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;fetch&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="nx"&gt;products&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="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The above code will be rendered and look something like this.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftjme19qzngi5qwxwx94z.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftjme19qzngi5qwxwx94z.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Make a new file and name it &lt;code&gt;_slug.vue&lt;/code&gt; in the same directory as index.vue, this will act as our product page and fill it with the below code.&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;template&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;main&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"&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;"w-1/2 h-screen flex items-center justify-center"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;:src=&lt;/span&gt;&lt;span class="s"&gt;"product.images[0]"&lt;/span&gt; &lt;span class="na"&gt;:alt=&lt;/span&gt;&lt;span class="s"&gt;"product.name"&lt;/span&gt; &lt;span class="nt"&gt;/&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;div&lt;/span&gt;
            &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"w-1/2 h-screen text-white flex items-center justify-center p-8 relative"&lt;/span&gt;
            &lt;span class="na"&gt;:style=&lt;/span&gt;&lt;span class="s"&gt;"{ backgroundColor: `#${product.color.hex}` }"&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;nuxt-link&lt;/span&gt;
               &lt;span class="na"&gt;to=&lt;/span&gt;&lt;span class="s"&gt;"/"&lt;/span&gt;
               &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"flex items-center space-x-2 absolute top-8 left-8"&lt;/span&gt;
               &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
               &lt;span class="nt"&gt;&amp;lt;svg&lt;/span&gt;
                  &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"w-5 h-5"&lt;/span&gt;
                  &lt;span class="na"&gt;fill=&lt;/span&gt;&lt;span class="s"&gt;"none"&lt;/span&gt;
                  &lt;span class="na"&gt;stroke=&lt;/span&gt;&lt;span class="s"&gt;"currentColor"&lt;/span&gt;
                  &lt;span class="na"&gt;viewBox=&lt;/span&gt;&lt;span class="s"&gt;"0 0 24 24"&lt;/span&gt;
                  &lt;span class="na"&gt;xmlns=&lt;/span&gt;&lt;span class="s"&gt;"http://www.w3.org/2000/svg"&lt;/span&gt;
                  &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                  &lt;span class="nt"&gt;&amp;lt;path&lt;/span&gt;
                     &lt;span class="na"&gt;stroke-linecap=&lt;/span&gt;&lt;span class="s"&gt;"round"&lt;/span&gt;
                     &lt;span class="na"&gt;stroke-linejoin=&lt;/span&gt;&lt;span class="s"&gt;"round"&lt;/span&gt;
                     &lt;span class="na"&gt;stroke-width=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
                     &lt;span class="na"&gt;d=&lt;/span&gt;&lt;span class="s"&gt;"M7 16l-4-4m0 0l4-4m-4 4h18"&lt;/span&gt;
                     &lt;span class="nt"&gt;&amp;gt;&amp;lt;/path&amp;gt;&lt;/span&gt;
               &lt;span class="nt"&gt;&amp;lt;/svg&amp;gt;&lt;/span&gt;
               &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Home&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/nuxt-link&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;"space-y-4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
               &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-2xl font-bold"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;{{ product.name }}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
               &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;$ {{ product.amount }}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
               &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-gray-100 text-sm"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;{{ product.description }}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
               &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt;
                  &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;click=&lt;/span&gt;&lt;span class="s"&gt;"buy()"&lt;/span&gt;
                  &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"w-full py-3 bg-white text-gray-800 font-semibold flex items-center justify-center space-x-2"&lt;/span&gt;
                  &lt;span class="na"&gt;:class=&lt;/span&gt;&lt;span class="s"&gt;"{ 'opacity-50 cursor-not-allowed': loading }"&lt;/span&gt;
                  &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                  &lt;span class="nt"&gt;&amp;lt;btn-loader&lt;/span&gt; &lt;span class="na"&gt;v-if=&lt;/span&gt;&lt;span class="s"&gt;"loading"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Buy Now&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
               &lt;span class="nt"&gt;&amp;lt;/button&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;/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;/main&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;script&amp;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="p"&gt;{&lt;/span&gt;
     &lt;span class="na"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fade&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;asyncData&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;$content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;params&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;product&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;$content&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;products&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;fetch&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="nx"&gt;product&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
     &lt;span class="p"&gt;},&lt;/span&gt;
     &lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&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;stripe&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="na"&gt;loading&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;span class="p"&gt;};&lt;/span&gt;
     &lt;span class="p"&gt;},&lt;/span&gt;
     &lt;span class="na"&gt;methods&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;buy&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
         &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
           &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;loading&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&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="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;$axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/checkout&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="na"&gt;order&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
               &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
               &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;description&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
               &lt;span class="na"&gt;images&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;images&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
               &lt;span class="na"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
               &lt;span class="na"&gt;currency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currency&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
               &lt;span class="na"&gt;quantity&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="p"&gt;},&lt;/span&gt;
             &lt;span class="na"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;$route&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="p"&gt;});&lt;/span&gt;
           &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stripe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;redirectToCheckout&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;sessionId&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;id&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
         &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
           &lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
           &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;loading&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&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="p"&gt;},&lt;/span&gt;
     &lt;span class="nf"&gt;mounted&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stripe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Stripe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pk_test_ZaFKDdkCzVR4hCmDsUKWodm200fZIzrcmf&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;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will make a page looking like this, not very fancy, but looks good (not responsive).&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%2Fxy6hq9zbojgnmg8r03yy.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxy6hq9zbojgnmg8r03yy.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We need to add the stripe checkout script in the &lt;code&gt;nuxt.config.js&lt;/code&gt; file, add this in the head object.&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="nx"&gt;script&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://js.stripe.com/v3/&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;Let's focus on the script and see what's going on.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnwnqq12ts7h0rebz0pbh.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%2Fnwnqq12ts7h0rebz0pbh.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Create an empty stripe object, this is where we will initialize the stripe object.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now pass the stripe public key to the Stripe method(the one we added in our head tag), you can get your public key from stripe &lt;a href="https://dashboard.stripe.com/dashboard" rel="noopener noreferrer"&gt;dashboard&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Let's make a checkout API and use Vercels serverless functions. Any js file we add under a folder called &lt;code&gt;api&lt;/code&gt; will act as a serverless function in Vercel, pretty cool right. So, I made one called checkout.js and wrote a small script.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&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;stripe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;stripe&lt;/span&gt;&lt;span class="dl"&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;STRIPE_TEST_SK&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;hostUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;http://localhost:3000&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&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;res&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="nx"&gt;session&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;stripe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;checkout&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sessions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;payment_method_types&lt;/span&gt;&lt;span class="p"&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;card&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;line_items&lt;/span&gt;&lt;span class="p"&gt;:&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;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;order&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;success_url&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;hostUrl&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;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;?session_id={CHECKOUT_SESSION_ID}`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;cancel_url&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;hostUrl&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;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;?failed=true`&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;return&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;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;session&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 need to install the stripe package and import it and this is all you need to create a checkout session (the secret key can be found in the stripe dashboard).&lt;br&gt;
The success URL and the cancel URL as the name suggest, tell stripe where to redirect respectively.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Now that we have received a session id, just pass it the stripe redirect method
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stripe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;redirectToCheckout&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;sessionId&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;id&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here's the &lt;a href="https://github.com/fayazara/nuxt-stripe" rel="noopener noreferrer"&gt;code&lt;/a&gt; and here's the live &lt;a href="https://nuxt-stripe-amber.vercel.app/" rel="noopener noreferrer"&gt;demo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you like my work and want to get updates, please subscribe to my &lt;a href="https://www.getrevue.co/profile/fayaz" rel="noopener noreferrer"&gt;newsletter&lt;/a&gt; or if you'd like to buy me some coffee, you can donate &lt;a href="https://fayazz.co/coffee" rel="noopener noreferrer"&gt;here&lt;/a&gt;, we could have a online session over coffee.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>programming</category>
      <category>vue</category>
    </item>
    <item>
      <title>Personal blogs from awesome developers</title>
      <dc:creator>Fayaz Ahmed</dc:creator>
      <pubDate>Thu, 01 Apr 2021 05:16:39 +0000</pubDate>
      <link>https://dev.to/fayaz/personal-blogs-from-awesome-developers-2caj</link>
      <guid>https://dev.to/fayaz/personal-blogs-from-awesome-developers-2caj</guid>
      <description>&lt;p&gt;Dev community, I have been trying to collect some awesome personal blogs from amazing developers.&lt;/p&gt;

&lt;p&gt;I have been trying to make my own and was looking for some inspiration. Care to share some amazing links if you have any.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://joshwcomeau.com"&gt;https://joshwcomeau.com&lt;/a&gt; from &lt;a href="https://twitter.com/JoshWComeau"&gt;Josh Comeau&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://leerob.io"&gt;https://leerob.io&lt;/a&gt; from &lt;a href="https://twitter.com/leeerob"&gt;Lee Rob&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://flaviocopes.com"&gt;https://flaviocopes.com&lt;/a&gt; from &lt;a href="https://twitter.com/flaviocopes"&gt;@flaviocopes&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://arun.is"&gt;https://arun.is&lt;/a&gt; from &lt;a href="https://twitter.com/zhenpixels"&gt;@zhenpixels&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
    </item>
    <item>
      <title>Writing from the hospital and bored, suggest me something to do</title>
      <dc:creator>Fayaz Ahmed</dc:creator>
      <pubDate>Wed, 31 Mar 2021 04:22:25 +0000</pubDate>
      <link>https://dev.to/fayaz/writing-from-the-hospital-and-bored-suggest-me-something-to-do-9c2</link>
      <guid>https://dev.to/fayaz/writing-from-the-hospital-and-bored-suggest-me-something-to-do-9c2</guid>
      <description>&lt;p&gt;It's been 4 days since I had touched my computer and honestly,  I have never been this bored in my entire life. This is not what I meant when I said I needed a break.&lt;/p&gt;

&lt;p&gt;I got hospitalised recently and haven't left the room in 3 days. Hospitals suck, the food sucks, it's depressing and gets quite spooky at nights. &lt;/p&gt;

&lt;p&gt;People call me a workaholic and I might be. I am not sure what I am even supposed to do sitting idle for this long.&lt;/p&gt;

&lt;p&gt;My friends suggested me to chill and watch Netflix, I tried but it gets boring at some point. I am sure I am going to reach the end of my Twitter feed sometime today 😅.&lt;/p&gt;

&lt;p&gt;So, #devcommunity please suggest something you'd do to utilise this time. I like writing, but I cannot write a lot due to the drip.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>webdev</category>
    </item>
    <item>
      <title>A list of actually useful Nocode tools and I am not talking about site builders.</title>
      <dc:creator>Fayaz Ahmed</dc:creator>
      <pubDate>Sun, 03 Jan 2021 08:31:36 +0000</pubDate>
      <link>https://dev.to/fayaz/a-list-of-actually-useful-nocode-tools-and-i-am-not-talking-about-site-builders-3m4g</link>
      <guid>https://dev.to/fayaz/a-list-of-actually-useful-nocode-tools-and-i-am-not-talking-about-site-builders-3m4g</guid>
      <description>&lt;p&gt;There's a lot of buzz going around the web dev world regarding Nocode, but a ton of these do the same thing and kind of miss the point of why they are to be used in the first place.&lt;/p&gt;

&lt;p&gt;These tools are not just another Website/App builder, but actual tools that will help you develop/scale your existing apps/websites which solve production use cases.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.  &lt;a href="https://www.pwabuilder.com/" rel="noopener noreferrer"&gt;PWABuilder&lt;/a&gt;
&lt;/h3&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%2Fi%2Fdyubax3rxhmdbxkks01i.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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fdyubax3rxhmdbxkks01i.jpg" alt="PWA Builder"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have used this and you will be surprised how well it works. The name says PWA Builder, but in fact it makes your PWAs - actual android apps which you can host on the Google play store, these are small light weight apps which are hardly like 1 - 2 MB in size.&lt;/p&gt;

&lt;p&gt;PS, they even have a neat PWA component library, like Auth, Contact Picker, Install component, which you can use in your PWAs.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;a href="https://www.appsmith.com/" rel="noopener noreferrer"&gt;Appsmith&lt;/a&gt;
&lt;/h3&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%2Fi%2F6ocoi9yqcgv3q12zp6ef.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%2Fi%2F6ocoi9yqcgv3q12zp6ef.png" alt="Appsmith"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another tool that I have fallen in love with recently, imagine building internal admin panels without code with charts, APIs, form collections, all with a drag and drop interface.&lt;/p&gt;

&lt;p&gt;You can even connect it directly to your Mysql, PGSQL databased right within this tool.&lt;/p&gt;

&lt;p&gt;I am surprised by how many complex use cases it handles.&lt;/p&gt;

&lt;p&gt;PS - it's all &lt;a href="https://github.com/appsmithorg/appsmith" rel="noopener noreferrer"&gt;open source&lt;/a&gt; and they even have the hosted version for free(for now).&lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;a href="https://nocodeapi.com" rel="noopener noreferrer"&gt;NoCodeApi&lt;/a&gt;
&lt;/h3&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%2Fi%2Frfh9qz3j3y0xdprv4at8.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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Frfh9qz3j3y0xdprv4at8.jpg" alt="NoCodeApi"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have been seeing NoCodeApi being built and grow since the beginning and I cannot stress enough how useful and polished this tool is, you need not read the docs of third party APIs, set up separate servers, write code, handle auth, tokens, API keys etc. All you need is an account and just get started using APIs from Google, Instagram, Twitter, Airtable, Slack and there are literally tons of other platform APIs you can use in your projects.&lt;/p&gt;

&lt;p&gt;PS, I have seen the next update of NoCodeApi and Danish is making something really amazing for developers called Dev APIs.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. &lt;a href="https://pipedream.com/" rel="noopener noreferrer"&gt;Pipedream&lt;/a&gt;
&lt;/h3&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%2Fi%2Fnbqgrummqd2hn6q553wf.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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fnbqgrummqd2hn6q553wf.jpg" alt="Pipedream"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I am not exactly sure what to call this platform, because it does so many things you won't believe. Think of it like Zapier + IFTTT + Glitch + Firebase Database combines.&lt;/p&gt;

&lt;p&gt;It has all the automation magic and it gives you the complete flexibility of writing code, it even lets you add/edit their own hooks. Pipedream even allows you to save data on an actual database&lt;/p&gt;

&lt;h3&gt;
  
  
  5. &lt;a href="https://letter.so/" rel="noopener noreferrer"&gt;Letter&lt;/a&gt;
&lt;/h3&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%2Fi%2Fv0meu9w6nbejt3j302bo.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%2Fi%2Fv0meu9w6nbejt3j302bo.png" alt="Letter"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;People sending newsletters, you know how hard it is to make good looking emails, letter is simple yet powerful, it can import data like images, titles, descriptions from links. right in their builder&lt;/p&gt;

&lt;h3&gt;
  
  
  6. &lt;a href="https://github.com/freeCodeCamp/mail-for-good" rel="noopener noreferrer"&gt;Mail 4 Good&lt;/a&gt;
&lt;/h3&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%2Fi%2F138x41e3jrovr0kw9m1a.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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F138x41e3jrovr0kw9m1a.jpg" alt="Mail4Good"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For sending 10,000 emails, Mailchimp charges you $200, Mail4Good does it for $1 (I am not kidding). The thing is you need to host it yourself, it is open source and it uses Amazon SES behind the curtains which makes it so cheap.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. &lt;a href="https://www.descript.com/" rel="noopener noreferrer"&gt;Descript&lt;/a&gt;
&lt;/h3&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%2Fi%2Flptg15qvh2wdjr9618mn.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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Flptg15qvh2wdjr9618mn.jpg" alt="Descript"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Descript is like magic for Independent video makers, it generates a transcript, editing videos is a breeze with this platform. Their website says &lt;strong&gt;video editor that works like a doc&lt;/strong&gt; and I could not agree more.&lt;/p&gt;

&lt;p&gt;Just look at their demo video and you will understand what I am talking about.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.&lt;a href="https://www.bannerbear.com/" rel="noopener noreferrer"&gt;BannerBear&lt;/a&gt;
&lt;/h3&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%2Fi%2Fp8bi4unoac92kteh4i4n.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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fp8bi4unoac92kteh4i4n.jpg" alt="BannerBear"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;BannerBear automates Image generation for you, you just need to pass along some parameters to its API, and it will make the poster, image, text embedding, image resizing on the fly. &lt;/p&gt;

&lt;p&gt;You can even generate these images on the bulk by uploading them to Airtable or google sheets.&lt;/p&gt;

&lt;h3&gt;
  
  
  9. &lt;a href="https://super.so/" rel="noopener noreferrer"&gt;Super&lt;/a&gt;
&lt;/h3&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%2Fi%2Fx44sqbydbb79m8eb07z8.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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fx44sqbydbb79m8eb07z8.jpg" alt="Super"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Super lets you use Notion as your CMS. It even lets you connect custom domains to the site that is generated.&lt;/p&gt;

&lt;p&gt;Do consider supporting me by buying &lt;a href="https://fayazz.co/coffee" rel="noopener noreferrer"&gt;coffees&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you like my content do follow me on &lt;a href="https://twitter.com/fayazara" rel="noopener noreferrer"&gt;twitter&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For paid articles on Javascript, APIs, SDK Integrations etc just DM on my twitter handle.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>programming</category>
    </item>
    <item>
      <title>Got bored and made iPhone 12 with Tailwindcss</title>
      <dc:creator>Fayaz Ahmed</dc:creator>
      <pubDate>Tue, 29 Dec 2020 16:52:49 +0000</pubDate>
      <link>https://dev.to/fayaz/got-bored-and-made-iphone-12-with-tailwindcss-l4p</link>
      <guid>https://dev.to/fayaz/got-bored-and-made-iphone-12-with-tailwindcss-l4p</guid>
      <description>&lt;p&gt;I coded the iPhone 12. Just because.&lt;/p&gt;

&lt;p&gt;The code can be found &lt;a href="https://play.tailwindcss.com/s5N1OQrvBq?layout=preview" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's mostly, layers of divs and some grid utilities. I have used a custom class for the frosted glass effect and some minor configuration changes to support the positioning of buttons.&lt;br&gt;
It's all HTML except the icons.&lt;/p&gt;

&lt;p&gt;Here's how it looked at the end.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F2ru8n1t8ed9769e5vkal.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%2Fi%2F2ru8n1t8ed9769e5vkal.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>css</category>
    </item>
  </channel>
</rss>
