<?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: Rishabh Raizada</title>
    <description>The latest articles on DEV Community by Rishabh Raizada (@rishabh510).</description>
    <link>https://dev.to/rishabh510</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%2F343390%2Fa74c66ad-e153-41f6-9de7-11cf209460a5.png</url>
      <title>DEV Community: Rishabh Raizada</title>
      <link>https://dev.to/rishabh510</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rishabh510"/>
    <language>en</language>
    <item>
      <title>LinkM3 ("Link Me") - Connect with Web3 builders on Web2 platforms (⚡AppWrite)</title>
      <dc:creator>Rishabh Raizada</dc:creator>
      <pubDate>Thu, 12 May 2022 23:52:25 +0000</pubDate>
      <link>https://dev.to/rishabh510/linkm3-link-me-connect-with-web3-builders-on-web2-platforms-appwrite-1kn2</link>
      <guid>https://dev.to/rishabh510/linkm3-link-me-connect-with-web3-builders-on-web2-platforms-appwrite-1kn2</guid>
      <description>&lt;h3&gt;
  
  
  Overview of My Submission
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Initial Thoughts 🤔
&lt;/h4&gt;

&lt;p&gt;So, first of all, a big 💝 to the AppWrite team for introducing me to AppWrite. It is really really easy. I have used Firebase before so I had a taste of BaaS but AppWrite has abstracted a lot of complication.&lt;/p&gt;

&lt;p&gt;I have started getting deeper into Web3 Dapps recently, in fact it has been half a year now 😆. There are definitely a lot of pros but everything comes with a cost (literally, it's called gas fees 😂). Moreover, if you want to build a decentralized application that would require a lot of transactions and storing data and cron jobs, you cannot do that in smart contracts without increasing complexity (we can do so using ChainLink, The Graph, etc but would add a lot of complications and extra cost). And after reading blogs on how you still require a backend service, I was convinced that this is the best time for me to get started with full stack Web3 Dapps which can scale without added complexity. And that would require a backend service, hence, aiming for the submission category "Web3 Wunderkinds"!.&lt;/p&gt;

&lt;h4&gt;
  
  
  Inspiration 😲
&lt;/h4&gt;

&lt;p&gt;The inspiration came from here&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GLeufN-p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nk2nk1fko0kziyg7aih6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GLeufN-p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nk2nk1fko0kziyg7aih6.png" alt="Inspiration" width="880" height="1245"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In one of my college Web3 groups, I saw this conversation about a simple and trivial tool that mapped a user's .eth domain to their Twitter account. In fact, why would anyone need a tool to do so - that's what I first thought. But what if we could map a user's wallet address with his/her/their Web2 social profiles like Twitter, Instagram, Discord, Github and what not. Interestingly, there wasn't any app or tool that already did so which I knew of. A simple and somewhat peculiar ideation process I would say!😂 But nonetheless, I was ready with my idea and had also thought of some more interesting features to promote the Web3 community. The project will be called "LinkM3" - pronounced as "Link Me" with the 3 signifying Web3 (Yeah, I know I am bad at names 😔).&lt;/p&gt;
&lt;h4&gt;
  
  
  Introducing &lt;a href="https://github.com/Rishabh510/LinkM3"&gt;LinkMe&lt;/a&gt; (🔗M3️⃣)
&lt;/h4&gt;
&lt;h5&gt;
  
  
  &lt;strong&gt;Features&lt;/strong&gt;🤩
&lt;/h5&gt;

&lt;ol&gt;
&lt;li&gt;LinkM3 (pronounced "link me") helps you connect on social Web2 profiles like Instagram, Discord, Twitter, LinkedIn, etc through your friend's wallet address/ETH domain.&lt;/li&gt;
&lt;li&gt;Moreover, LinkM3 also helps you discover other prominent Web3 players and connect with them.&lt;/li&gt;
&lt;li&gt;You can also bookmark &amp;amp; view real-time feeds of your favorite cryptos/tokens and directly open respective authentic sites of your favorite Dapps!&lt;/li&gt;
&lt;li&gt;Creator highlight system highlights the profile of a qualified creator (chosen randomly) once a week.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ag8Kw3KM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v7aoae55pvcjy7obaeqo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ag8Kw3KM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v7aoae55pvcjy7obaeqo.png" alt="features" width="880" height="400"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h5&gt;
  
  
  &lt;strong&gt;Project Flow&lt;/strong&gt;🖼️
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iTtoQMbR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pkoys7nwvg6fltdet49l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iTtoQMbR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pkoys7nwvg6fltdet49l.png" alt="0" width="880" height="410"&gt;&lt;/a&gt; This is the homepage of the project. Clicking on "Get Started" will redirect to the login screen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WGz2v7lO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8mo57ln4l9jy996kildw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WGz2v7lO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8mo57ln4l9jy996kildw.png" alt="1" width="880" height="440"&gt;&lt;/a&gt; The user can enter their e-mail and a magic login link will be sent to the user's email address. I am using AppWrite's Magic-Link Login &amp;amp; confirmation functionality for this and sending mails through SendInBlue SMTP. Clicking on the link in the email redirects the user to &lt;code&gt;/verify&lt;/code&gt; route for a split second and on verification redirects them to the profile screen. To manage the auth state, I am using PrivateRoute in react.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HJTZq_WS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ed6st0g0kvuadh409msc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HJTZq_WS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ed6st0g0kvuadh409msc.png" alt="2" width="880" height="454"&gt;&lt;/a&gt; This is the profile screen or the main screen the user sees after logging in. The Highlight of the week section changes weekly and for that I am using AppWrite's cloud functions (cron) which picks a random user once a week and highlights their profile at the top. Other users are displayed at the bottom will all the details and relevant links to their profiles.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0UuIuy1G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gfyccq3nnj0niwio147o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0UuIuy1G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gfyccq3nnj0niwio147o.png" alt="3" width="880" height="376"&gt;&lt;/a&gt; You can search for a particular user by typing their wallet address or ETH Domain which is done through querying and indexing in AppWrite's database. Clicking on the profile icon opens up options to edit your profile, logout, view your NFTs which can be fetched through your wallet address.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--H-Xj9BBr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9m7ehqjz8dy9bg9xzt71.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--H-Xj9BBr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9m7ehqjz8dy9bg9xzt71.png" alt="4" width="880" height="530"&gt;&lt;/a&gt; Clicking on the Edit Profile button opens up a dialog box where you can enter your relevant details and make changes. I am using AppWrite's storage functionality to store the images and add their id in the document for that particular user. Connect Wallet button can be used to connect to user's wallet and get their address or they can normally enter in the textfield if it's a short and memorable domain.&lt;/p&gt;
&lt;h5&gt;
  
  
  &lt;strong&gt;Tools &amp;amp; Technologies&lt;/strong&gt;⚙️
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;ReactJs + MaterialUI (Frontend)&lt;/li&gt;
&lt;li&gt;Appwrite (Backend-as-a-Service)&lt;/li&gt;
&lt;li&gt;NodeJs (Appwrite Cloud Functions)&lt;/li&gt;
&lt;li&gt;Digital Ocean (Deploying AppWrite Server)&lt;/li&gt;
&lt;li&gt;SendInBlue (SMTP service)&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;
  
  
  &lt;strong&gt;Environment Setup&lt;/strong&gt;
&lt;/h5&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Clone the repo &lt;a href="https://github.com/Rishabh510/LinkM3"&gt;here&lt;/a&gt;:&lt;br&gt;
(PS: I am really sorry, if you were wishing to test it out quickly, I haven't deployed it yet. Although, I am working on it and will edit this article as soon as the site it live.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Deploy your AppWrite Server:&lt;br&gt;
I have used Digital Ocean to configure my droplet for AppWrite. You can instead use Docker as well. The installation instructions can be found &lt;a href="https://appwrite.io/docs/installation"&gt;here&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Edit the environment variables:&lt;br&gt;
&lt;code&gt;cd&lt;/code&gt; in the location where you cloned the repo. Create project in AppWrite console and add your AppWrite credentials from the project settings page to &lt;code&gt;.env.example&lt;/code&gt;. Rename &lt;code&gt;.env.example&lt;/code&gt; to &lt;code&gt;.env&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set up SMTP service:&lt;br&gt;
I used &lt;a href="https://www.sendinblue.com/"&gt;SendInBlue&lt;/a&gt; for this but any other provider can also be used. Add the SMTP credentials in &lt;code&gt;appwrite/.env&lt;/code&gt; in droplet console.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vA1izwXo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/noze1wt4veyte29disg1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vA1izwXo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/noze1wt4veyte29disg1.png" alt="SMTP" width="880" height="328"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Configure AppWrite:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;a. Database Configuration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Create &lt;code&gt;users&lt;/code&gt; collection in database with the following details:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--z85c45Gy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pxdjykgbb5jpv3f3oa1t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--z85c45Gy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pxdjykgbb5jpv3f3oa1t.png" alt="attributes" width="880" height="574"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--w-5Sbyne--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y4tr1wwn3hgrxouytr5u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--w-5Sbyne--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y4tr1wwn3hgrxouytr5u.png" alt="indexes" width="880" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--T2BhK_RQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z4mcvl502p5ic0wdvqog.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--T2BhK_RQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z4mcvl502p5ic0wdvqog.png" alt="settings" width="880" height="667"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create &lt;code&gt;weekUser&lt;/code&gt; collection in database with these attributes:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KJ-yXza8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l0p9mbyefhhenaocettc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KJ-yXza8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l0p9mbyefhhenaocettc.png" alt="attributes2" width="880" height="194"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UpTj2oe0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/44gxowag5ctcoe7dp7az.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UpTj2oe0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/44gxowag5ctcoe7dp7az.png" alt="settings2" width="880" height="686"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;b. Storage Configuration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add &lt;code&gt;photos&lt;/code&gt; collection with the following settings:
  &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--c4LqSYz_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tlu0bbt35chp8ib8w2ww.png" alt="storage" width="880" height="409"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;c. Cloud Functions Configuration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add API Key as follow:
  &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vd_cXCeW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/koudaumhezr6hguouilp.png" alt="API Key" width="717" height="709"&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create cloud function in AppWrite console:&lt;br&gt;
  Name the function as &lt;code&gt;highlight&lt;/code&gt;, and assign &lt;code&gt;role:all&lt;/code&gt; permission to read &amp;amp; leave the write permission as &lt;code&gt;empty&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update env variables in function settings:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;APPWRITE_PROJECT_ID&lt;/code&gt; | [Your Project Id] &lt;/p&gt;

&lt;p&gt;&lt;code&gt;APPWRITE_ENDPOINT&lt;/code&gt; | [Your Project endpoint]&lt;/p&gt;

&lt;p&gt;&lt;code&gt;APPWRITE_API_KEY&lt;/code&gt; | [API Key we just created]&lt;/p&gt;

&lt;p&gt;&lt;code&gt;USERS_COLLECTION&lt;/code&gt; | users&lt;/p&gt;

&lt;p&gt;&lt;code&gt;WEEKUSER_COLLECTION&lt;/code&gt; | weekUser&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Initialize &amp;amp; deploy function using &lt;a href="mailto:appwrite-cli@15.0"&gt;appwrite-cli@15.0&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;Run the following code line by line in your project directory and follow the prompts -&lt;br&gt;
&lt;/p&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i -g appwrite-cli@15.0
appwrite -v
appwrite client --endpoint "http://&amp;lt;API endpoint&amp;gt;/v1"
appwrite login
appwrite init project
appwrite init function
appwrite deploy function
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PS: Name the function same as the one in the AppWrite console. For help, &lt;code&gt;highlight&lt;/code&gt; function is already present in the &lt;code&gt;functions&lt;/code&gt; directory.&lt;/p&gt;

&lt;h3&gt;
  
  
  Submission Category:
&lt;/h3&gt;

&lt;p&gt;Web3 Wunderkinds&lt;/p&gt;

&lt;h3&gt;
  
  
  Link to Code
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/Rishabh510/LinkM3"&gt;https://github.com/Rishabh510/LinkM3&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Additional Resources / Info
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Challenges Faced 😤
&lt;/h4&gt;

&lt;p&gt;There were very few challenges I faced this time. Honestly, AppWrite's SDKs are a breeze through along with the lucid documentation. I was easily able to figure out the errors and debugged them in respectable time. Though there are a few things I wished AppWrite's SDK had the support for. I hope to see these things getting implemented soon. To describe a few of them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Single call to upsert: Currently requires 2 different calls.&lt;/li&gt;
&lt;li&gt;Magic Link auto verify user: Need to send mail again to verify user whereas the same magic link could be used to do so.&lt;/li&gt;
&lt;li&gt;Search on multiple attributes in a single index: It does show support for multiple attributes in a single index but search query doesn't seem to function in that case.&lt;/li&gt;
&lt;li&gt;
&lt;a href="mailto:Appwrite-cli@16.0"&gt;Appwrite-cli@16.0&lt;/a&gt; deploy function problem: I downgraded to &lt;a href="mailto:appwrite-cli@15.0"&gt;appwrite-cli@15.0&lt;/a&gt; to deploy cloud functions which eventually solved the problem.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Future Scope 🔮
&lt;/h4&gt;

&lt;p&gt;Even when I am writing this article, I am buzzing with ideas. To describe a few:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adding data feeds and bookmark feature - favorite tokens, favorite users, favorite dapps etc.&lt;/li&gt;
&lt;li&gt;Option of users to fund/donate them in crypto to their wallet address.&lt;/li&gt;
&lt;li&gt;Option for users to add multiple wallets on different chains - Solana, Tezos, etc&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Closing Thoughts 🙏
&lt;/h4&gt;

&lt;p&gt;I am happy I discovered AppWrite and I will be probably using it more often in the future for my pet projects 😅. Again, thanks a lot to dev.to and AppWrite for this hackathon, got a good project, prototyped fast, wrote a blog and yeah I am a little tired now!&lt;/p&gt;

&lt;p&gt;Thanks for reading! &lt;/p&gt;

</description>
      <category>appwritehack</category>
      <category>web3</category>
      <category>opensource</category>
      <category>programming</category>
    </item>
    <item>
      <title>🎤Saydle - A Wordle clone that uses your voice to play!</title>
      <dc:creator>Rishabh Raizada</dc:creator>
      <pubDate>Mon, 11 Apr 2022 11:16:00 +0000</pubDate>
      <link>https://dev.to/rishabh510/saydle-a-wordle-clone-that-uses-your-voice-to-play-51lb</link>
      <guid>https://dev.to/rishabh510/saydle-a-wordle-clone-that-uses-your-voice-to-play-51lb</guid>
      <description>&lt;p&gt;Hey everyone👋, I am new to writing blogs and this one is going to be my first one on dev.to. Thanks to Deepgram and Dev.to for motivating me to start. This project is targeted for the "Build" challenge!&lt;/p&gt;

&lt;h3&gt;
  
  
  Overview of My Submission
&lt;/h3&gt;

&lt;h4&gt;
  
  
  What is &lt;a href="https://saydle.rishabh510.repl.co"&gt;Saydle&lt;/a&gt; 🔠
&lt;/h4&gt;

&lt;p&gt;I am obsessed with &lt;a href="https://www.nytimes.com/games/wordle/index.html"&gt;Wordle&lt;/a&gt; these days, which also is the inspiration for this project. Saydle is a fun project which I built to give a twist to normal Wordle. We normally use our keyboard to type the letters and guess the word, right? In this game, we can't type. In fact, there is no keyboard. Instead, you have to use your voice to speak the words rather than typing.&lt;/p&gt;

&lt;h4&gt;
  
  
  Tools and Technologies ⚙️
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;HTML/CSS/Javascript&lt;/li&gt;
&lt;li&gt;Hasura (GraphQL)&lt;/li&gt;
&lt;li&gt;Sawo (Authentication)&lt;/li&gt;
&lt;li&gt;Heroku Postgres (Database)&lt;/li&gt;
&lt;li&gt;Deepgram (AI speech-to-text)&lt;/li&gt;
&lt;li&gt;Replit (deploy)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Features 🤩
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;No keyboard means that you can't see which characters you have already used on the on-screen keyboard. Though, you can see the grid to make out the unused letters.&lt;/li&gt;
&lt;li&gt;Also, there is no Enter or Delete key concept in this game. That means, as soon as you speak a 5 letter word, it is automatically submitted 😈.&lt;/li&gt;
&lt;li&gt;Moreover, how are you gonna tackle homophones (same sound but different spelling)? (&lt;em&gt;Continue reading to get a hint&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;It uses passwordless authentication to authenticate users and maintain a history of the number of matches played and the number of matches won against each user.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Challenges I faced 😤
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;I have kept the code simple and intuitive with beginner-level technologies to make it easier for anyone to understand the codebase.&lt;/li&gt;
&lt;li&gt;This was also the first time I was working with Deepgram and thanks to the exemplar projects, I was able to integrate it in my code.&lt;/li&gt;
&lt;li&gt;It is difficult to tackle homophones (same sound different spelling and meaning) when playing. But using Deepgram, we can say sentences where the target word is the first word in sentence. For example: 

&lt;ul&gt;
&lt;li&gt;(1) &lt;strong&gt;There&lt;/strong&gt; is a house. // picks up the word &lt;strong&gt;THERE&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;(2) &lt;strong&gt;Their&lt;/strong&gt; family. // picks up the word &lt;strong&gt;THEIR&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Since I am new to blogging, it might not be up to the mark. Suggestions to improve &amp;amp; constructive criticism are welcome!&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Future Scope 🔮
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;This is a static web project and does not ensure the security of your API keys. I would be migrating this project to ReactJs with better management of secrets.&lt;/li&gt;
&lt;li&gt;Wordle has a very minimal UI and I wanted to retain the same. However, I would be making a better UX by adding themes, animations, transitions, etc.&lt;/li&gt;
&lt;li&gt;Adding features like a leaderboard, difficulty level, word length, time limit etc would make it even more fun.&lt;/li&gt;
&lt;li&gt;Just wondering what if on winning a match, your voice recording is minted as an NFT!? Would love to hear your opinions and suggestions, especially on this feature&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Submission Category:
&lt;/h3&gt;

&lt;p&gt;Wacky Wildcards&lt;/p&gt;

&lt;h3&gt;
  
  
  Link to Code on GitHub
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/Rishabh510/Saydle"&gt;https://github.com/Rishabh510/Saydle&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Additional Resources / Info
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://saydle.rishabh510.repl.co"&gt;Deployed App&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Rishabh510/Saydle"&gt;Github Repo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Screenshots 🖼️
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tWAqC1ii--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dzlpuu4fbt1fenl63h5z.png" alt="Login Page" width="880" height="649"&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VBuj8XUB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/336jedew5zonvjzwfeta.png" alt="Home Page" width="880" height="652"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;I got to learn a lot of new things by building this project! Would love to see your thoughts about the project Saydle! &lt;/p&gt;

</description>
      <category>hackwithdg</category>
      <category>deepgram</category>
      <category>programming</category>
      <category>wordle</category>
    </item>
  </channel>
</rss>
