<?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: Tanay Dwivedi</title>
    <description>The latest articles on DEV Community by Tanay Dwivedi (@tanay_dwivedi9098).</description>
    <link>https://dev.to/tanay_dwivedi9098</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2818945%2F79d1db89-beae-4352-a0d1-0b966ca2b64b.png</url>
      <title>DEV Community: Tanay Dwivedi</title>
      <link>https://dev.to/tanay_dwivedi9098</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tanay_dwivedi9098"/>
    <language>en</language>
    <item>
      <title>I developed an App that can k!ll you.</title>
      <dc:creator>Tanay Dwivedi</dc:creator>
      <pubDate>Sat, 20 Jun 2026 07:57:26 +0000</pubDate>
      <link>https://dev.to/tanay_dwivedi9098/i-developed-an-app-that-can-kll-you-2oad</link>
      <guid>https://dev.to/tanay_dwivedi9098/i-developed-an-app-that-can-kll-you-2oad</guid>
      <description>&lt;p&gt;Now as I got all the attention, I would like to tell it's not like that😆. Recently, I watched a Kdrama, &lt;strong&gt;"If wishes could kill"&lt;/strong&gt;. Taking inspiration from that, I built &lt;strong&gt;Girigo&lt;/strong&gt;(app's name in the show).&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;GitHub repo&lt;/strong&gt;: &lt;a href="https://github.com/tanay9098/Girigo" rel="noopener noreferrer"&gt;https://github.com/tanay9098/Girigo&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;App live link&lt;/strong&gt;: &lt;a href="https://girigofrontend.netlify.app/" rel="noopener noreferrer"&gt;https://girigofrontend.netlify.app/&lt;/a&gt;   &lt;/p&gt;

&lt;h2&gt;
  
  
  Tech stacks used 🤖
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Web Frontend&lt;/td&gt;
&lt;td&gt;React 19, Vite 8, PWA (Workbox), Web Crypto API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;Node.js, Express 5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;Supabase (PostgreSQL + Storage + Auth)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Job Queue&lt;/td&gt;
&lt;td&gt;BullMQ, Redis, IORedis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Push Notifications&lt;/td&gt;
&lt;td&gt;Web Push API (VAPID), web-push&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Encryption&lt;/td&gt;
&lt;td&gt;AES-256-GCM, PBKDF2 (310k iterations)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deployment&lt;/td&gt;
&lt;td&gt;Netlify (frontend), Render.com (backend + worker)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Project Directory 📖
&lt;/h2&gt;

&lt;p&gt;Girigo/&lt;br&gt;
├── frontend/          # React + Vite SPA&lt;br&gt;
│   └── src/&lt;br&gt;
│       ├── components/    # VideoRecorder, WishForm, CountDown, …&lt;br&gt;
│       ├── hooks/         # useMediaRecorder, useCountdown, usePush&lt;br&gt;
│       ├── lib/           # crypto.js, api.js, supabase.js&lt;br&gt;
│       └── pages/         # AuthPage, DashboardPage&lt;br&gt;
├── backend/           # Express API + BullMQ worker&lt;br&gt;
│   ├── routes/        # wishes.js, push.js&lt;br&gt;
│   ├── jobs/          # worker.js (scheduled notifications)&lt;br&gt;
│   ├── middleware/    # auth.js (Supabase JWT)&lt;br&gt;
│   └── lib/           # queue.js, storage.js, webpush.js, supabase.js&lt;br&gt;
└── supabase/&lt;br&gt;
    └── migrations/    # SQL schema migrations&lt;/p&gt;

&lt;h2&gt;
  
  
  Struggles and learnings 🎓
&lt;/h2&gt;

&lt;p&gt;It was my one of the few apps that I put in production so I had to resolve production issues which many AI and LLM tools were not able to do so,it helps me to improve my debugging skills to a great extent and most importantly, I learnt how to prompt properly.&lt;/p&gt;

&lt;p&gt;I also knew what &lt;strong&gt;.toml&lt;/strong&gt; and &lt;strong&gt;.yaml&lt;/strong&gt; files are, and how it saves our time for configuring our application for deployment.&lt;/p&gt;

&lt;p&gt;Earlier I didn't knew much about security concepts but building this application pushed me to learn security concepts to prevent users to access someone's else data and video-encryption. Few of these concepts are, &lt;strong&gt;Row-Level-Security&lt;/strong&gt;, &lt;strong&gt;SHA-256&lt;/strong&gt;,&lt;strong&gt;PBKDF-2&lt;/strong&gt;, and, &lt;strong&gt;AES 256 GCM&lt;/strong&gt; for video encryption. Now explaining these security concepts and how they work in tandem with each other deserves its own dedicated blog, which I will share next time.&lt;/p&gt;

&lt;p&gt;Thanks for reading :)&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>opensource</category>
      <category>web</category>
    </item>
    <item>
      <title>PokeDex: A pokemon based NFT platform</title>
      <dc:creator>Tanay Dwivedi</dc:creator>
      <pubDate>Sun, 07 Jun 2026 21:17:48 +0000</pubDate>
      <link>https://dev.to/tanay_dwivedi9098/pokedex-a-pokemon-based-nft-platform-1352</link>
      <guid>https://dev.to/tanay_dwivedi9098/pokedex-a-pokemon-based-nft-platform-1352</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-05-21"&gt;GitHub Finish-Up-A-Thon Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Pokémon and all Pokémon character names are trademarks of Nintendo. This project is intended for educational purposes only.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;I built a full stack Pokemon based NFT platform where you can trade, collect and battle Pokemon based NFT cards hosted on Polygon blockchain. All the Pokemon based digital collectibles properties is fetched from &lt;a href="https://pokeapi.co/" rel="noopener noreferrer"&gt;PokeApi&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Tech stacks I used 🤖
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Smart Contracts&lt;/td&gt;
&lt;td&gt;Solidity 0.8.25, Hardhat, OpenZeppelin v5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blockchain&lt;/td&gt;
&lt;td&gt;Polygon (Amoy Testnet / Mainnet)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web Frontend&lt;/td&gt;
&lt;td&gt;React 19, TypeScript, Vite 5, ethers.js v6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mobile App&lt;/td&gt;
&lt;td&gt;Expo ~54, React Native 0.81, Expo Router&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data&lt;/td&gt;
&lt;td&gt;PokéAPI (pokemon data), Pinata (IPFS metadata; planned for future release)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

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

&lt;p&gt;&lt;strong&gt;GitHub repo:&lt;/strong&gt;&lt;a href="https://github.com/tanay9098/PokeDex" rel="noopener noreferrer"&gt;https://github.com/tanay9098/PokeDex&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Web app version:&lt;/strong&gt;&lt;a href="https://pokedex9098.netlify.app/" rel="noopener noreferrer"&gt;https://pokedex9098.netlify.app/&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Mobile version(Android build stable version):&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://expo.dev/accounts/tanay9098/projects/PokeDex/builds/53d0f4cf-14a8-4856-bcb4-12d5314cf417" rel="noopener noreferrer"&gt;https://expo.dev/accounts/tanay9098/projects/PokeDex/builds/53d0f4cf-14a8-4856-bcb4-12d5314cf417&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/BTO3eJf65rg"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  The Comeback Story 🏋️‍♂️
&lt;/h2&gt;

&lt;p&gt;Few months ago, I was learning React Native from &lt;a href="https://www.linkedin.com/in/betomoedano/" rel="noopener noreferrer"&gt;Alberto Moedano&lt;/a&gt; on one of his  &lt;a href="https://www.youtube.com/watch?v=BUXnASp_WyQ&amp;amp;t=1502s" rel="noopener noreferrer"&gt;tutorial&lt;/a&gt; video on his &lt;a href="https://www.youtube.com/@codewithbeto" rel="noopener noreferrer"&gt;Youtube channel&lt;/a&gt; where he taught React Native by building an application named, PokeDex, hence lazy me named it just like that 😂. Now coming to the main part, it was just a simple React Native project which used to fetch Pokemons from &lt;a href="https://pokeapi.co/" rel="noopener noreferrer"&gt;PokeApi&lt;/a&gt; and later I thought of improvising and adding new changes such as building a Pokemon based NFT trading card platform or Pokemon based battle game but I procrastinated and almost gave up on it, until one day I saw a mail from DEV.to for GitHub Finish-Up-A-Thon challenge which ignited a fire🔥 in me to complete it. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ahm81n9kld0cmlhtq3d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ahm81n9kld0cmlhtq3d.png" alt="Earlier static version of PokeDex" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
          &lt;em&gt;Earlier static version of PokeDex&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How GitHub Copilot helped me ❤️‍🩹
&lt;/h2&gt;

&lt;p&gt;GitHub Copilot helped me to save a lot of time by rewriting a separate version for web which otherwise would take a hell lot of time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs5feqlq09uteiws01pfw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs5feqlq09uteiws01pfw.png" alt="Separate version web" width="799" height="513"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It also helped me with Blockchain implementation wherever necessary&lt;/p&gt;

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

&lt;p&gt;It critiqued my development approach and corrected me wherever I was going wrong&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Struggles and learning 😣
&lt;/h2&gt;

&lt;p&gt;This was my first web3/blockchain project and at that time I just had a surface level knowledge of it, hence I had to learn web3/blockchain-based technologies especially &lt;strong&gt;Solidity&lt;/strong&gt; programming language.&lt;/p&gt;

&lt;p&gt;I was using claude Haiku model in GitHub copilot free tier and there were times when it was generating hallucinated codes so I had  go through the code structure and read each code line by line which enabled me to debug the issues and make few contextual changes. &lt;/p&gt;

&lt;p&gt;Also I encountered several build errors related to android and I learned a lesson the hard way, that always keep a separate branch for preview and production and don't push everything to main/production branch.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Limitations and Future Enhancements 📚
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Unintentional Technical Trade-offs
&lt;/h3&gt;

&lt;p&gt;This project demonstrates the web 3 enabled frontend and how it interacts with wallet integration(Metamask), Smart Contracts and Blockchain based transactions, but I didn't fully implement NFT based market architecture. Instead of that, I implemented the logic of NFT like ownership such that it can be simulated locally on your machine. Other trade-offs were no integration of multiplayer battle mode, rudimentary implementation of Mobile app and zero synchronization between mobile and web app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limitations due to Technical Trade-offs&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Ownership is not stored on-chain as purchased pokemons are tracked locally.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Non transferable assests as Pokemon cards aren't minted as NFTs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Purchased collectibles are stored locally on browser and mobile device hence if you clear the browsing data,cache, or switch devices then it will reset the collection.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The application only demonstrates the purchase flow but doesn't demonstrate peer-to-peer trade or transactions. The transaction gets send to a hardcoded deployer address only(which is me).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No sync between mobile and web due to changes being implemented locally.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pokemon battle feature includes battle logic(single player only) but doesn't have multiplayer feature.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Right now there are few issues with respect to wallet connection in mobile version as for it I am using &lt;a href="https://thirdweb.com/" rel="noopener noreferrer"&gt;thirdweb&lt;/a&gt; whose few package is in conflict with few of react-native packages hence need to find a workaround. Hence implementation is pretty much rudimentary in nature.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It's all because of few things that I didn't factor in while starting this project. One of the few thing I thought to implement was minted NFT Pokemon cards(or purchased Pokemon cards) can be used in Battles but due to lack of technical knowledge for now, I wasn't able to implement multiplayer mode. Another issue is there is no synchronization between web and mobile due to absence of a unified backend and blockchain services to keep track of changes remotely, which brings me to the last part, that &lt;a href="https://pokeapi.co/" rel="noopener noreferrer"&gt;PokeApi&lt;/a&gt; being a read only public API, it has no such concept of ownership because it is accessible to everyone for public use. Hence for example, if one have to purchase Bulbasaur NFT card from my app, its data will be fetched from &lt;a href="https://pokeapi.co/" rel="noopener noreferrer"&gt;PokeApi&lt;/a&gt;, hence the question would be who owns the Bulbasaur NFT before a user buys it? Someone has to mint it and put it for sale and that someone has to have a proof of an actual ownership of the Bulbasaur NFT but as mentioned that data is being fetched from a public API.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Future Enhancements and Solutions
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Adding multiplayer battle mode by implementing socket.io or WebRTC&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enabling sync between mobile and web&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To support actual NFT ownership and trading, I would need to design and maintain my own data layer consisting of a dedicated database for Pokémon assets, user inventories, marketplace listings, transaction records, and metadata. This would also require implementing custom read and write APIs, backend services, authentication, and synchronization between the database and blockchain smart contracts. Inculcating all these changes just would expand the scope and complexity of the project further which is why it has a dedicated space for itself for a full-scale project which I will implement it in future. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Solve the conflict issue of mobile version with &lt;a href="https://thirdweb.com/" rel="noopener noreferrer"&gt;Third web&lt;/a&gt;. &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
    </item>
  </channel>
</rss>
