<?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: aviral srivastava</title>
    <description>The latest articles on DEV Community by aviral srivastava (@aviral_srivastava_2c4e212).</description>
    <link>https://dev.to/aviral_srivastava_2c4e212</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%2F2457790%2Fa6f82bc3-9d4c-406c-9027-c3464f387d5a.png</url>
      <title>DEV Community: aviral srivastava</title>
      <link>https://dev.to/aviral_srivastava_2c4e212</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aviral_srivastava_2c4e212"/>
    <language>en</language>
    <item>
      <title>Multi-Agent Subscription Intelligence Platform</title>
      <dc:creator>aviral srivastava</dc:creator>
      <pubDate>Wed, 18 Mar 2026 07:39:44 +0000</pubDate>
      <link>https://dev.to/aviral_srivastava_2c4e212/multi-agent-subscription-intelligence-platform-53a9</link>
      <guid>https://dev.to/aviral_srivastava_2c4e212/multi-agent-subscription-intelligence-platform-53a9</guid>
      <description>&lt;p&gt;👉 Read &amp;amp; review on AWS Builder Center&lt;br&gt;
🏗️ AWS Builder Center: **&lt;br&gt;


&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://builder.aws.com/content/3Al4q1y0EHqKXBeYIaSxB8VkTQ4/multi-agent-subscription-intelligence-platform" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fbuilder.aws.com%2Fassets%2Fog-hiXAX-on.png" height="auto" class="m-0"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://builder.aws.com/content/3Al4q1y0EHqKXBeYIaSxB8VkTQ4/multi-agent-subscription-intelligence-platform" rel="noopener noreferrer" class="c-link"&gt;
            AWS Builder Center
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Connect with builders who understand your journey. Share solutions, influence AWS product development, and access useful content that accelerates your growth. Your community starts here.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fbuilder.aws.com%2Fassets%2Fbuilder-favicon-sq0js-4n.svg"&gt;
          builder.aws.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;




</description>
    </item>
    <item>
      <title>Socratic Sentinel - AI-Powered Socratic Tutor for Deep Coding Mastery with GitHub Copilot CLI</title>
      <dc:creator>aviral srivastava</dc:creator>
      <pubDate>Sun, 15 Feb 2026 08:28:58 +0000</pubDate>
      <link>https://dev.to/aviral_srivastava_2c4e212/socratic-sentinel-ai-powered-socratic-tutor-for-deep-coding-mastery-with-github-copilot-cli-32gh</link>
      <guid>https://dev.to/aviral_srivastava_2c4e212/socratic-sentinel-ai-powered-socratic-tutor-for-deep-coding-mastery-with-github-copilot-cli-32gh</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;What if GitHub Copilot could teach you to code, not just code for you?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Socratic Sentinel transforms GitHub Copilot CLI into an AI learning coach that enforces deep understanding through Socratic questioning. Instead of handing you solutions, it guides you there — combating the "competence collapse" developers are discussing across Reddit, Hacker News, and X in 2026.&lt;/p&gt;

&lt;p&gt;It’s a &lt;strong&gt;custom Copilot agent&lt;/strong&gt; built with official &lt;strong&gt;Agent Client Protocol (ACP)&lt;/strong&gt; and &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt; that intercepts queries in real-time and responds with targeted questions (e.g., "What's the key invariant in binary search?") before ever showing code. Users can escape with &lt;code&gt;/hint&lt;/code&gt; or &lt;code&gt;/solution&lt;/code&gt; at any time.&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adaptive multi-turn Socratic dialogue powered by real Copilot AI&lt;/li&gt;
&lt;li&gt;Curriculum-aware guidance (ingests PDFs/Markdown syllabi)&lt;/li&gt;
&lt;li&gt;Progress tracking &amp;amp; rich dashboard (&lt;code&gt;/stats&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Gamification: points, badges, streaks for independent solutions&lt;/li&gt;
&lt;li&gt;AI-generated practice problems (&lt;code&gt;/practice &amp;lt;topic&amp;gt; &amp;lt;difficulty&amp;gt;&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Flexible modes: Learning (default), Productivity (direct code), Exam/Interview (timed, no hints)&lt;/li&gt;
&lt;li&gt;Exportable mastery proofs for resumes/interviews&lt;/li&gt;
&lt;li&gt;Zero extra API keys — uses your existing Copilot subscription&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To me, this project is personal: I want AI to amplify learning, not replace it. Socratic Sentinel turns a potential crutch into a catalyst for genuine mastery.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Repository&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/aviralSri23455/Socratic-Sentinel-AI-Powered-Socratic-Tutor.git" rel="noopener noreferrer"&gt;https://github.com/aviralSri23455/Socratic-Sentinel-AI-Powered-Socratic-Tutor.git&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Video Walkthrough&lt;/strong&gt; :&lt;br&gt;&lt;br&gt;
&lt;a href="https://www.loom.com/share/ee530be77a3f4b00919f7be8017b1bc2" rel="noopener noreferrer"&gt;https://www.loom.com/share/ee530be77a3f4b00919f7be8017b1bc2&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Screenshots Highlights&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj2t3sp17w361ozrq6iop.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%2Fj2t3sp17w361ozrq6iop.png" alt="Terminal screenshot showing Socratic Sentinel starting a learning session on binary SEARCH, asking the user about the key invariant and time complexity" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34zxizjqowx6moj19uf6.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%2F34zxizjqowx6moj19uf6.png" alt="Terminal screenshot of Socratic Sentinel prompting the user to explain the invariant, log n complexity, and algorithm approach for binary search" width="800" height="335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv0dm2c9ys5dy7p9wr1ok.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%2Fv0dm2c9ys5dy7p9wr1ok.png" alt="Terminal screenshot displaying the live learning session dashboard with session stats, points, and mastery progress" width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7vuo82iww4gjp7c6lr80.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%2F7vuo82iww4gjp7c6lr80.png" alt="Terminal screenshot of Socratic Sentinel awarding points and a badge after the user provides a strong independent explanation" width="800" height="294"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F99ubmzsts23o4ut8wrbe.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%2F99ubmzsts23o4ut8wrbe.png" alt="Terminal screenshot showing Socratic Sentinel generating a tailored medium-difficulty practice problem on binary search" width="800" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff6g3m1c7yfub0t51dyk5.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%2Ff6g3m1c7yfub0t51dyk5.png" alt="Terminal screenshot of Socratic Sentinel in productivity mode, providing direct code without questions" width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjjd9x26gpwfbvxsl9eiz.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%2Fjjd9x26gpwfbvxsl9eiz.png" alt="Terminal screenshot demonstrating exam mode with a timed, hint-free interview simulation" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhb9rtw9l6paifa0zvl3b.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%2Fhb9rtw9l6paifa0zvl3b.png" alt="Terminal screenshot of MCP server logs showing tool calls for progress tracking and session logging" width="800" height="312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjsb5lyft8wy9gxx4iq5y.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%2Fjsb5lyft8wy9gxx4iq5y.png" alt="Terminal screenshot of the full updated mastery stats dashboard after completing a session" width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical Architecture
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Core Stack:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent Client Protocol (ACP)&lt;/strong&gt;: Custom Copilot agent profile with strict Socratic instruction set&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt;: Fastify server exposing tools (track_progress, log_session, get_curriculum_context, generate_practice, award_badge, etc.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Neon PostgreSQL&lt;/strong&gt; (serverless): Prisma ORM for persistent progress, gamification, and syncable stats&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Copilot CLI&lt;/strong&gt;: Native integration via &lt;code&gt;copilot&lt;/code&gt; command + custom MCP server&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Implementation Details:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agent intercepts queries via MCP tool routing before default code generation&lt;/li&gt;
&lt;li&gt;Adaptive difficulty inspired by Bloom's Taxonomy + Ebbinghaus forgetting curve&lt;/li&gt;
&lt;li&gt;Gamification awards badges/points based on solution independence (no hints/solutions used)&lt;/li&gt;
&lt;li&gt;Curriculum PDFs parsed and embedded for contextual question generation&lt;/li&gt;
&lt;li&gt;All local-first fallback + graceful degradation when offline&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why This Matters (Competitive Edge)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Problem Validation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;73% of developers report skill degradation with heavy AI use (HN &amp;amp; Reddit threads, Jan 2025–2026)&lt;/li&gt;
&lt;li&gt;"Competence collapse" discussions surged 240% on r/programming and r/cscareerquestions in 2025&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Unique Value:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Only Copilot CLI agent enforcing active, reasoning-first learning at query time&lt;/li&gt;
&lt;li&gt;Zero external LLM APIs — fully leverages existing Copilot subscription&lt;/li&gt;
&lt;li&gt;Portable mastery proofs (PDF transcripts/badges) for interviews &amp;amp; portfolios&lt;/li&gt;
&lt;li&gt;Terminal-native, frictionless workflow for power users&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  My Journey with GitHub Copilot CLI
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Phase 1 – Rapid Prototyping (Days 1–2)&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
I used &lt;code&gt;copilot suggest&lt;/code&gt; to generate the initial Fastify MCP server, Prisma schema, and agent prompt templates. What would’ve taken 6–8 hours took ~90 minutes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 2 – Debugging &amp;amp; Iteration (Days 3–4)&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
When MCP tool calls returned malformed JSON or dialogue state broke, I pasted errors into &lt;code&gt;copilot explain&lt;/code&gt; — it instantly spotted schema mismatches and suggested fixes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 3 – Creative Enhancements (Days 5–6)&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
For gamification, I asked: "Suggest creative badge names for a Socratic learning tool" — got gems like "Aristotle's Apprentice" and "Recursion Breaker." Copilot even proposed integrating the Ebbinghaus forgetting curve for review scheduling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Irony (and Beauty)&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Using Copilot to build a tool that prevents Copilot overreliance felt meta and powerful. It proved AI can amplify learning when guided responsibly — exactly Socratic Sentinel’s thesis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Net Impact:&lt;/strong&gt; 4× faster development, zero context switching, pure terminal flow state.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Yourself
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
bash
# Clone the repo
git clone https://github.com/aviralSri23455/Socratic-Sentinel-AI-Powered-Socratic-Tutor.git
cd Socratic-Sentinel-AI-Powered-Socratic-Tutor

# Install dependencies
npm install

# (One-time) Set up Neon DB connection &amp;amp; run Prisma migrations
# (Make sure DATABASE_URL is set in .env or environment)
npx prisma migrate deploy

# Start the MCP server (exposes tools like progress tracking, logging, practice generation)
npm run server
# or directly:
# node server.js

# In a second terminal window: Launch Copilot interactive session
copilot

# Inside the Copilot chat, paste the Socratic Sentinel activation prompt (see README for full prompt)

# Test with a query, e.g.:
implement binary search in JavaScript****
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
    <item>
      <title>Project Phantom: The 6D Halloween Metaverse Experience</title>
      <dc:creator>aviral srivastava</dc:creator>
      <pubDate>Sun, 09 Nov 2025 08:16:57 +0000</pubDate>
      <link>https://dev.to/aviral_srivastava_2c4e212/project-phantom-the-6d-halloween-metaverse-experience-5ckg</link>
      <guid>https://dev.to/aviral_srivastava_2c4e212/project-phantom-the-6d-halloween-metaverse-experience-5ckg</guid>
      <description>&lt;h2&gt;
  
  
  &lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend-2025-10-15"&gt;Frontend Challenge - Halloween Edition, Perfect Landing&lt;/a&gt;&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;title: "Project Phantom: The 6D Halloween Metaverse Experience"&lt;br&gt;
published: true&lt;br&gt;
tags:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;frontendchallenge&lt;/li&gt;
&lt;li&gt;webgl&lt;/li&gt;
&lt;li&gt;threejs&lt;/li&gt;
&lt;li&gt;gsap&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;We created &lt;strong&gt;🕸️Project Phantom: The 6D Halloween Metaverse Experience&lt;/strong&gt; — an immersive, technologically advanced &lt;strong&gt;Halloween landing&lt;/strong&gt; that pushes the boundaries of web animation, interactivity, and performance.&lt;/p&gt;

&lt;h2&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%2Fmdix5jlul8w8v1t21w5q.png" alt="Haunted 3D Interface — WebGL Pumpkin Scene" width="800" height="403"&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  ⚙️ Key Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;🌀 WebGL Custom Shaders:&lt;/strong&gt; Real-time GPU-rendered swirling fog effects with animated gradients in the hero section
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🎃 Three.js 3D Scene:&lt;/strong&gt; Interactive 3D pumpkin with dynamic lighting and particle systems
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;📜 GSAP ScrollTrigger Animations:&lt;/strong&gt; Orchestrated parallax transitions with cinematic effects
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🖱️ Smart Cursor System:&lt;/strong&gt; Magnetic cursor with particle trails and adaptive colors
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🔊 Web Audio API Integration:&lt;/strong&gt; Eerie ambient soundscapes with spatial positioning
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🖼️ 3D Carousel Gallery:&lt;/strong&gt; Haunted 3D gallery with gestures and horror filters
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🌫️ Interactive Parallax:&lt;/strong&gt; Multi-layered depth controlled by scroll and mouse
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🌌 6D Metaverse Experience:&lt;/strong&gt; Dimensional world with portals and real-time physics
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🚪 Cinematic Door Transition:&lt;/strong&gt; 3D perspective door-opening animation for entry
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🔢 Spooky Stats Counter:&lt;/strong&gt; Intersection Observer–based animated counters
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;📈 Real-time FPS Monitor:&lt;/strong&gt; Live framerate tracking and optimization display
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;📱 Advanced Touch Gestures:&lt;/strong&gt; Swipe, pinch, and rotate via Hammer.js
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;⚡ Asset Preloading System:&lt;/strong&gt; Lazy loading with CDN optimization
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;♿ Full Accessibility:&lt;/strong&gt; WCAG 2.1 AA compliance with ARIA labels and reduced motion&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🎥 Live Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://aviralsri23455.github.io/Phantom-The-6D-Halloween-Metaverse-Experience-2025/" rel="noopener noreferrer"&gt;https://aviralsri23455.github.io/Phantom-The-6D-Halloween-Metaverse-Experience-2025/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💻 &lt;strong&gt;CodePen Preview:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
[&lt;a href="https://codepen.io/aviralSri23455/pen/ZYQgQBv" rel="noopener noreferrer"&gt;https://codepen.io/aviralSri23455/pen/ZYQgQBv&lt;/a&gt;]&lt;/p&gt;

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

&lt;p&gt;Building &lt;strong&gt;Halloween Legends 2025&lt;/strong&gt; was a thrilling mix of &lt;strong&gt;creativity and technology&lt;/strong&gt; — merging &lt;strong&gt;cutting-edge web tech&lt;/strong&gt; with &lt;strong&gt;spooky cinematic design&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  🧑‍💻 Technical Achievements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Custom &lt;strong&gt;WebGL fragment shaders&lt;/strong&gt; for real-time fog (with CSS fallback)&lt;/li&gt;
&lt;li&gt;Intelligent &lt;strong&gt;particle systems&lt;/strong&gt; mimicking organic motion&lt;/li&gt;
&lt;li&gt;Magnetic cursor reacting to &lt;strong&gt;proximity-based interactions&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Fully interactive &lt;strong&gt;6D metaverse&lt;/strong&gt; with portals and floating islands&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web Audio API&lt;/strong&gt; for reactive ambient soundscapes&lt;/li&gt;
&lt;li&gt;Real-time &lt;strong&gt;FPS monitor&lt;/strong&gt; that auto-adjusts visual fidelity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hammer.js&lt;/strong&gt;–powered gestures for touch-based interactions&lt;/li&gt;
&lt;li&gt;Intelligent &lt;strong&gt;asset manager&lt;/strong&gt; with prefetch and compression&lt;/li&gt;
&lt;li&gt;Optimized &lt;strong&gt;60 FPS animations&lt;/strong&gt; via &lt;code&gt;requestAnimationFrame&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;5-layer &lt;strong&gt;scroll + mouse parallax&lt;/strong&gt; with depth mapping&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🎨 Design &amp;amp; UX
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Halloween color palette: 🎃 &lt;strong&gt;#ff6b35&lt;/strong&gt;, 💜 &lt;strong&gt;#a855f7&lt;/strong&gt;, ❤️ &lt;strong&gt;#8b0000&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Cinematic &lt;strong&gt;3D door transition&lt;/strong&gt; for immersive entry&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Holographic hover effects&lt;/strong&gt; with mouse-tracking glows&lt;/li&gt;
&lt;li&gt;Interactive &lt;strong&gt;particle explosions&lt;/strong&gt; on user actions&lt;/li&gt;
&lt;li&gt;Footer &lt;strong&gt;network visualization&lt;/strong&gt; with connected particles&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  ♿ Accessibility
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;“Skip to content” navigation for screen readers&lt;/li&gt;
&lt;li&gt;Full &lt;strong&gt;ARIA labeling&lt;/strong&gt; and semantic HTML structure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reduced motion&lt;/strong&gt; mode support&lt;/li&gt;
&lt;li&gt;Keyboard accessibility with visible focus indicators&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  ⚡ Performance Highlights
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Built-in &lt;strong&gt;FPS monitor&lt;/strong&gt; for live performance metrics
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resource hints&lt;/strong&gt;: preload, prefetch, preconnect
&lt;/li&gt;
&lt;li&gt;Lazy loading below-the-fold content
&lt;/li&gt;
&lt;li&gt;Conditional rendering (mobile vs desktop)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPU-accelerated animations&lt;/strong&gt; and DOM caching
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧪 Advanced Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Web Audio API:&lt;/strong&gt; Oscillator-based ambient soundscapes
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic Theme Switching:&lt;/strong&gt; Real-time hue shifts
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Touch Gestures:&lt;/strong&gt; Swipe and pinch navigation
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fog Interactivity:&lt;/strong&gt; Fog parts dynamically as cursor moves
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;🧡 We’re proud of seamlessly merging &lt;strong&gt;WebGL shaders&lt;/strong&gt;, &lt;strong&gt;GSAP animations&lt;/strong&gt;, and &lt;strong&gt;Three.js 3D rendering&lt;/strong&gt;, achieving buttery-smooth performance across devices.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🚀 Next Steps
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Expand into &lt;strong&gt;interactive mini-games&lt;/strong&gt; with collectible rewards
&lt;/li&gt;
&lt;li&gt;Introduce &lt;strong&gt;multiplayer realms&lt;/strong&gt; and &lt;strong&gt;co-op modes&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Add &lt;strong&gt;dimensional physics layers&lt;/strong&gt; and environment variations
&lt;/li&gt;
&lt;li&gt;Implement &lt;strong&gt;user profiles&lt;/strong&gt; and &lt;strong&gt;XP-based progression system&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  👥 Team
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;👩‍💻 &lt;strong&gt;Shivangi Bhargava - &lt;a href="https://dev.to/shivangi_bhargava_a0f2368"&gt;https://dev.to/shivangi_bhargava_a0f2368&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;👨‍💻 &lt;strong&gt;Aviral Srivastava - &lt;a href="https://dev.to/aviral_srivastava_2c4e212"&gt;https://dev.to/aviral_srivastava_2c4e212&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;💀 &lt;em&gt;“Where technology meets terror — welcome to 🕸️ Project Phantom: The 6D Halloween Metaverse Experience 2025.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;💬 Let's Connect!&lt;/p&gt;

&lt;p&gt;I’d love to hear your thoughts, ideas, or spooky theories about this project! 👻&lt;br&gt;
If you have any questions, feel free to drop them in the comments below — I’ll be happy to answer.&lt;br&gt;
Your feedback helps me improve and inspire even more creative experiences like Project Phantom: The 6D Halloween Metaverse Experience! 🎃✨&lt;/p&gt;

</description>
      <category>frontendchallenge</category>
      <category>webgl</category>
      <category>threejs</category>
      <category>gsap</category>
    </item>
    <item>
      <title>"Melodic Airways Transforming Flight Routes Into Music"</title>
      <dc:creator>aviral srivastava</dc:creator>
      <pubDate>Wed, 05 Nov 2025 07:20:16 +0000</pubDate>
      <link>https://dev.to/aviral_srivastava_2c4e212/melodic-airways-transforming-flight-routes-into-music-4l72</link>
      <guid>https://dev.to/aviral_srivastava_2c4e212/melodic-airways-transforming-flight-routes-into-music-4l72</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqnj8rbkuo34pajiub1rg.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%2Fqnj8rbkuo34pajiub1rg.png" alt="3D Flight Path" width="800" height="398"&gt;&lt;/a&gt;&lt;br&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%2F2auoz0u2b10hh26j06hm.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%2F2auoz0u2b10hh26j06hm.png" alt="AI Genre Composer interface showing music generation options" width="800" height="396"&gt;&lt;/a&gt;&lt;br&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%2Fxm791krydm23dxrd1uj4.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%2Fxm791krydm23dxrd1uj4.png" alt="Backend Vector Emedding" width="800" height="314"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;Melodic Airways&lt;/strong&gt; - a web app that converts real flight routes into unique musical compositions using AI and graph algorithms.&lt;/p&gt;

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

&lt;p&gt;Pick any two airports (e.g., JFK to LAX), and it generates music based on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Direction&lt;/strong&gt; - Pitch range (eastward = higher notes)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Distance&lt;/strong&gt; - Tempo (longer flights = slower)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Route complexity&lt;/strong&gt; - Harmony (multi-stop = complex chords)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Path segments&lt;/strong&gt; - Chord progression length&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The system uses &lt;strong&gt;Dijkstra's algorithm&lt;/strong&gt; to find optimal routes through 67,000+ flight paths, then converts the journey into music.&lt;/p&gt;

&lt;h2&gt;
  
  
  The cool features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  AI Genre Composer
&lt;/h3&gt;

&lt;p&gt;Trained &lt;strong&gt;PyTorch LSTM models&lt;/strong&gt; to generate music in 8 genres (Classical, Jazz, Electronic, Lofi, etc.). The AI recommends genres based on your route characteristics.&lt;/p&gt;

&lt;h3&gt;
  
  
  VR Experiences
&lt;/h3&gt;

&lt;p&gt;Watch your flight in 3D with &lt;strong&gt;Three.js&lt;/strong&gt; and synchronized spatial audio. Export to Oculus, Unity, WebXR, or ARKit.&lt;/p&gt;

&lt;h3&gt;
  
  
  Smart Recommendations
&lt;/h3&gt;

&lt;p&gt;Uses &lt;strong&gt;vector embeddings&lt;/strong&gt; (7 types: 96D for routes, 128D for AI compositions) stored in DuckDB. Finds similar routes using cosine similarity - like Spotify's recommendation engine, but for flights.&lt;/p&gt;

&lt;h3&gt;
  
  
  Travel Logs
&lt;/h3&gt;

&lt;p&gt;Turn your entire vacation into a musical story. Add multiple waypoints and generate a composition for your whole journey.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Frontend:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React 18 + TypeScript + Three.js&lt;/li&gt;
&lt;li&gt;Tailwind CSS + shadcn/ui&lt;/li&gt;
&lt;li&gt;Vite&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Backend:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python FastAPI (async)&lt;/li&gt;
&lt;li&gt;PyTorch (LSTM neural networks)&lt;/li&gt;
&lt;li&gt;NetworkX (Dijkstra's pathfinding)&lt;/li&gt;
&lt;li&gt;Mido (MIDI generation)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Data and ML:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MariaDB (primary database)&lt;/li&gt;
&lt;li&gt;Redis Cloud (caching - sub-100ms responses)&lt;/li&gt;
&lt;li&gt;DuckDB (analytics + vector embeddings)&lt;/li&gt;
&lt;li&gt;FAISS (similarity search)&lt;/li&gt;
&lt;li&gt;Python ETL pipeline (loads OpenFlights data)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Data:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;3,000+ airports&lt;/li&gt;
&lt;li&gt;67,000+ routes from OpenFlights&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Key Technical Highlights
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Graph Pathfinding
&lt;/h3&gt;

&lt;p&gt;Uses NetworkX with Dijkstra's algorithm on a graph of 3,000 nodes (airports) and 67,000 edges (routes). Automatically finds multi-stop routes if no direct flight exists.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Music Generation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Direction affects pitch
&lt;/span&gt;&lt;span class="n"&gt;direction_factor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bearing_angle&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;360&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;base_pitch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;direction_factor&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Distance affects tempo
&lt;/span&gt;&lt;span class="n"&gt;distance_factor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;distance_km&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;adjusted_tempo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tempo&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;distance_factor&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Complexity affects harmony
&lt;/span&gt;&lt;span class="n"&gt;complexity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;segments&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;distance&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.05&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Vector Embeddings
&lt;/h3&gt;

&lt;p&gt;7 embedding types for different features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Home Routes (96D)&lt;/li&gt;
&lt;li&gt;AI Composer (128D)&lt;/li&gt;
&lt;li&gt;VR Experiences (80D)&lt;/li&gt;
&lt;li&gt;Travel Logs (32D)&lt;/li&gt;
&lt;li&gt;Wellness (48D)&lt;/li&gt;
&lt;li&gt;Education (64D)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enables similarity search and recommendations across all compositions.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Performance Optimization
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Redis caching reduced response time from 800ms to sub-100ms&lt;/li&gt;
&lt;li&gt;Async FastAPI for concurrent requests&lt;/li&gt;
&lt;li&gt;WebSocket + Redis Pub/Sub for real-time collaboration&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why I Built This
&lt;/h2&gt;

&lt;p&gt;I wanted to make geography education more engaging through &lt;strong&gt;data sonification&lt;/strong&gt; - turning abstract data into sensory experiences. Maps show where places are, but music helps you feel the journey.&lt;/p&gt;

&lt;p&gt;Also, musicians can use this as a creative tool for generating unique compositions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Yourself
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/aviralSri23455/Melodic-Airways-Transforming-Flight" rel="noopener noreferrer"&gt;https://github.com/aviralSri23455/Melodic-Airways-Transforming-Flight&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Setup (15-20 minutes):&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install Python 3.9-3.11, Node 16-20, MariaDB&lt;/li&gt;
&lt;li&gt;Create free Redis Cloud account (30MB tier)&lt;/li&gt;
&lt;li&gt;Clone repo, copy .env.example to .env&lt;/li&gt;
&lt;li&gt;Add your credentials&lt;/li&gt;
&lt;li&gt;Run setup script&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Works on Windows, Mac, and Linux.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Mobile apps with offline generation&lt;/li&gt;
&lt;li&gt;More AI genres (Hip-Hop, Country, Reggae)&lt;/li&gt;
&lt;li&gt;Live flight tracking integration&lt;/li&gt;
&lt;li&gt;High-res audio exports (WAV/FLAC)&lt;/li&gt;
&lt;li&gt;API access for developers&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Open Source
&lt;/h2&gt;

&lt;p&gt;Fully open source under Apache License. Great for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Portfolio projects&lt;/li&gt;
&lt;li&gt;Learning full-stack + AI/ML&lt;/li&gt;
&lt;li&gt;Data sonification experiments&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why I'm Sharing This
&lt;/h2&gt;

&lt;p&gt;I built this project to explore &lt;strong&gt;data sonification&lt;/strong&gt; - the idea that we can make abstract data more meaningful by turning it into sound. As a developer interested in AI/ML and creative applications, I wanted to show that machine learning isn't just for business problems - it can create beautiful, educational experiences too.&lt;/p&gt;

&lt;p&gt;If you're learning full-stack development, this project covers a lot of ground: React, Python, PyTorch, graph algorithms, vector embeddings, and real-time features. It's also fully open source, so you can learn from the code or use it as a portfolio project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Questions for You
&lt;/h2&gt;

&lt;p&gt;I'd love to hear your thoughts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What flight route would you want to hear as music?&lt;/strong&gt; (JFK to Tokyo? London to Sydney?)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What other datasets could be sonified?&lt;/strong&gt; (Weather patterns? Stock markets? Sports data?)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Have you built any creative AI projects?&lt;/strong&gt; Share your experiences!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Any questions about the implementation?&lt;/strong&gt; Happy to explain the tech in more detail.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Drop your questions and ideas in the comments - I'll respond to everyone!&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/aviralSri23455/Melodic-Airways-Transforming-Flight" rel="noopener noreferrer"&gt;Melodic Airways&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Every flight tells a story. We just help you hear it.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>react</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Crafting Seamless Payments in React 18 with Razor pay and Node.js: A Step-by-Step Blueprint</title>
      <dc:creator>aviral srivastava</dc:creator>
      <pubDate>Wed, 20 Nov 2024 10:18:51 +0000</pubDate>
      <link>https://dev.to/aviral_srivastava_2c4e212/integrating-razor-pay-api-in-a-react-18-app-with-nodejs-backend-a-complete-guide-5j3</link>
      <guid>https://dev.to/aviral_srivastava_2c4e212/integrating-razor-pay-api-in-a-react-18-app-with-nodejs-backend-a-complete-guide-5j3</guid>
      <description>&lt;h2&gt;
  
  
  Step 1: Set Up Your Razorpay Account
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;To use Razorpay, you’ll need to create an account and set up your business information.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  1.1. Create an Account
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Go to Razorpay Signup Page. &lt;a href="https://accounts.razorpay.com/auth/redirecturl=https%3A%2F%2Feasy.razorpay.com&amp;amp;auth_intent=signup" rel="noopener noreferrer"&gt;https://accounts.razorpay.com/auth/redirecturl=https%3A%2F%2Feasy.razorpay.com&amp;amp;auth_intent=signup&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Register with your email or phone number and verify your account.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Razor pay Account Verification OR KYC Verifications: Easy Steps for Developers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Setting up your Razorpay account is simple! Follow these steps to get verified:&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  1. Navigate to &lt;strong&gt;Account Verification&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Log in to your Razorpay dashboard.&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Settings&lt;/strong&gt; → &lt;strong&gt;Account Verification&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Enter Your Business Address
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Provide your complete business address.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. Select Your Business Category
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Choose the appropriate &lt;strong&gt;Business Category&lt;/strong&gt; (e.g., e-commerce, education, etc.).&lt;/li&gt;
&lt;li&gt;Select a &lt;strong&gt;Subcategory&lt;/strong&gt; and fill in any additional details.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Continue&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. Upload Your Business Policy
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Add your &lt;strong&gt;business policy details&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Review and edit if needed.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create policy pages&lt;/strong&gt; → &lt;strong&gt;Publish&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. Upload Identity Proof
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Upload documents like &lt;strong&gt;Aadhar Card&lt;/strong&gt;, &lt;strong&gt;Passport&lt;/strong&gt;, or &lt;strong&gt;Voter ID&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Ensure both &lt;strong&gt;front and back sides&lt;/strong&gt; are uploaded.&lt;/li&gt;
&lt;li&gt;Only JPG/PNG formats are allowed.&lt;/li&gt;
&lt;li&gt;Alternatively, use &lt;strong&gt;DigiLocker&lt;/strong&gt; to upload.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  6. Provide PAN and Aadhaar Details
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Upload your &lt;strong&gt;PAN&lt;/strong&gt;, &lt;strong&gt;Aadhar&lt;/strong&gt;, and &lt;strong&gt;Driving License&lt;/strong&gt; as required.&lt;/li&gt;
&lt;li&gt;Ensure both sides of documents are uploaded.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. Add Bank Details
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Enter your:

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Account Number&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IFSC Code&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;This account will be used for fund settlements.&lt;/li&gt;

&lt;li&gt;Click &lt;strong&gt;Done&lt;/strong&gt;.&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  8. Add GST Details (if applicable)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Your &lt;strong&gt;GSTIN&lt;/strong&gt; may auto-fill after PAN verification.&lt;/li&gt;
&lt;li&gt;If not, enter manually.&lt;/li&gt;
&lt;li&gt;If you don’t have a GSTIN, select the appropriate checkbox.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Done&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  9. Upload Business Documents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Provide any additional &lt;strong&gt;business documents&lt;/strong&gt; based on your business type.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  10. Submit KYC
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Double-check all details.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Submit KYC&lt;/strong&gt; to complete the process.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flpicus8sq1ja6tkyd811.jpg" 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%2Flpicus8sq1ja6tkyd811.jpg" alt="Complete Your KYC " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frwiyew34pi7zadwzv6qf.jpg" 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%2Frwiyew34pi7zadwzv6qf.jpg" alt="Add KYC" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting Up Razor pay: KYC Verification and Test Mode vs Live Mode Explained
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;If you’re setting up Razor pay for the first time, this guide will walk you through the KYC verification process and explain the differences between Test Mode and Live Mode.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;1. Log in to Razor pay&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Visit the Razor pay dashboard and log in using your account credentials.
If you don’t have an account, sign up for free.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;2.  KYC Verification&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;To enable Live Mode (for accepting real payments), you need to complete KYC verification. This involves verifying your business and banking details.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You’ll see a prompt to Get KYC Verified for ₹199. This is a one-time, non-refundable fee for manual verification of your business.&lt;/p&gt;
&lt;h3&gt;
  
  
  Why is KYC Verification Important?
&lt;/h3&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It enables you to start collecting payments in Live Mode.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You gain access to all Razor pay payment products like Payment Links, Subscriptions, etc.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Steps:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Click on the Get KYC Verified button.&lt;/li&gt;
&lt;li&gt;Complete the required steps and upload the necessary documents.&lt;/li&gt;
&lt;li&gt;Razor pay will notify you once your KYC is approved.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: If you’re not ready to pay ₹199 or want to explore Razor pay before committing, you can use Test Mode.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;3. Test Mode vs Live Mode&lt;/strong&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Test Mode&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Test Mode&lt;/strong&gt; is a sandbox environment where you can simulate payment flows without involving real money. It’s perfect for testing and debugging during development.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features of Test Mode:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No real transactions:&lt;/strong&gt; Payments made in Test Mode are simulated and don’t involve actual money.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free to use:&lt;/strong&gt; You don’t need to pay or complete KYC to access Test Mode.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test cards available:&lt;/strong&gt; Razor pay provides dummy card details, UPI, and wallets to simulate payments.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;When to Use Test Mode?&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;During development to verify your integration works correctly.&lt;/li&gt;
&lt;li&gt;For debugging payment flows and handling edge cases like payment failures or refunds.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;How to Access Test Mode?&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Log in to the Razor pay Dashboard.&lt;/li&gt;
&lt;li&gt;Switch to Test Mode using the toggle at the top of the dashboard.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Live Mode&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What is Live Mode?&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Live Mode is the production environment where real transactions are processed using actual customer payments.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Key Features of Live Mode:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real transactions:&lt;/strong&gt; Payments are processed with actual money from your customers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Requires KYC:&lt;/strong&gt; You must complete Razor pay's KYC process to enable Live Mode.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fees applied:&lt;/strong&gt; Razor pay charges a transaction fee for each payment processed (typically 2%–3% depending on the payment method).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;When to Use Live Mode?&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Once your integration is fully tested in Test Mode.&lt;/li&gt;
&lt;li&gt;For real-world transactions with actual customers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;How to Access Live Mode?&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Log in to the Razor pay Dashboard.&lt;/li&gt;
&lt;li&gt;Complete the KYC process to enable Live Mode.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Difference Between Test Mode and Live Mode
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Feature&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Test Mode&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Live Mode&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Purpose&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simulate and test transactions without real money.&lt;/td&gt;
&lt;td&gt;Accept real payments from customers.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;KYC Requirement&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No KYC required.&lt;/td&gt;
&lt;td&gt;KYC verification required (₹199 fee).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Payments&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Dummy transactions only.&lt;/td&gt;
&lt;td&gt;Real transactions with actual money.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;When to Use?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Use Test Mode when you’re building and testing your application to ensure everything works fine.&lt;/td&gt;
&lt;td&gt;Use Live Mode when your business is ready to go live and accept payments from customers.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How to Switch Between Test Mode and Live Mode
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Log in to your Razorpay Dashboard.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Locate the toggle option:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On the top-right corner, you’ll find an option to toggle between &lt;strong&gt;Test Mode&lt;/strong&gt; and &lt;strong&gt;Live Mode&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Using Test Mode:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In Test Mode, you can use Razor pay's dummy API keys to simulate transactions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Using Live Mode:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In Live Mode, you’ll use actual API keys to process real transactions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&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%2Firlx6z589feekc0cep3a.jpg" 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%2Firlx6z589feekc0cep3a.jpg" alt="KYC Verification for 199 RS" width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3xe3uqchkdhyfla0t34b.jpg" 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%2F3xe3uqchkdhyfla0t34b.jpg" alt="Go To Razor pay for test mode" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  For More Details Follow This Link
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://razorpay.com/docs/payments/create-account/#2-submit-kyc-details" rel="noopener noreferrer"&gt;https://razorpay.com/docs/payments/create-account/#2-submit-kyc-details&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Make sure you have the following tools installed:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Node.js (v22.11.0 or above)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;npm or yarn&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Razorpay API Key&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;React 18&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A basic understanding of React and Node.js&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Project Structure
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;razorpay-api/  
├── backend/  
│   ├── server.js  
│   ├── package.json  
│   ├── .env  
└── frontend/  
    ├── src/  
    │   ├── App.js  
    │   ├── Payment.js  
    │   └── server.js  
    ├── package.json  
    └── .env  

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Backend Implementation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Initialize the Backend
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir backend &amp;amp;&amp;amp; cd backend  
npm init -y
npm install express body-parser cors dotenv razorpay
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Create a server.js file in the backend folder:
&lt;/h3&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;express&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;express&lt;/span&gt;&lt;span class="dl"&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;Razorpay&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;razorpay&lt;/span&gt;&lt;span class="dl"&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;bodyParser&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;body-parser&lt;/span&gt;&lt;span class="dl"&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;cors&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;cors&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&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;dotenv&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;config&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;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bodyParser&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;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;cors&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="c1"&gt;// Razorpay instance&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;razorpay&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Razorpay&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;key_id&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;RAZORPAY_KEY_ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;key_secret&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;RAZORPAY_KEY_SECRET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&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;/create-order&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="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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;amount&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="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="k"&gt;try&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;order&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;razorpay&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;orders&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;amount&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="c1"&gt;// amount in paise&lt;/span&gt;
      &lt;span class="na"&gt;currency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;INR&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;receipt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`receipt_&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&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="p"&gt;});&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;orderId&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="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;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Server running on Your_Localhost&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);[&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Environment Variables (.env)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;RAZORPAY_KEY_ID=&amp;lt;your_test_key_id&amp;gt;
RAZORPAY_KEY_SECRET=&amp;lt;your_test_key_secret&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Frontend Setup (React)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.Initialize Frontend
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx create-react-app frontend
cd frontend
npm install axios dotenv

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Environment Variables (.env)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;REACT_APP_RAZORPAY_KEY=&amp;lt;your_test_key_id&amp;gt;
REACT_APP_BACKEND_URL=&amp;lt;your_localhost&amp;gt;

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Create a Payment.js file in the src folder:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;axios&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Payment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setAmount&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// State to track user-entered amount&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;paymentDetails&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setPaymentDetails&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// State to track payment response&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handlePayment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nf"&gt;isNaN&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;0&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Please enter a valid amount.&lt;/span&gt;&lt;span class="dl"&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="p"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;backendURL&lt;/span&gt; &lt;span class="o"&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;REACT_APP_BACKEND_URL&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="c1"&gt;// Step 1: Create an order on the backend&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="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="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;backendURL&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/create-order`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;amount&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

      &lt;span class="c1"&gt;// Step 2: Define Razorpay checkout options&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;key&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;REACT_APP_RAZORPAY_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Razorpay API Key&lt;/span&gt;
        &lt;span class="na"&gt;amount&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="c1"&gt;// Amount in paise&lt;/span&gt;
        &lt;span class="na"&gt;currency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;INR&lt;/span&gt;&lt;span class="dl"&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Test Company&lt;/span&gt;&lt;span class="dl"&gt;"&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Test Transaction&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;order_id&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;orderId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Order ID from backend&lt;/span&gt;
        &lt;span class="na"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="c1"&gt;// Step 3: Handle successful payment&lt;/span&gt;
          &lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Payment Successful&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
          &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Payment Response:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
          &lt;span class="nf"&gt;setPaymentDetails&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Update state with payment details&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="na"&gt;prefill&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Test User&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;testuser@example.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;contact&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;9999999999&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;theme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#3399cc&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="c1"&gt;// Step 4: Open Razorpay checkout&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;razor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Razorpay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nx"&gt;razor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;open&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;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Payment Failed:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Payment Failed. Please try again.&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="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;

      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;label&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Enter&lt;/span&gt; &lt;span class="nc"&gt;Amount &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;₹&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/label&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;
          &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;number&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
          &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
          &lt;span class="nx"&gt;onChange&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setAmount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
          &lt;span class="nx"&gt;placeholder&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Enter amount to pay&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
        &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handlePayment&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Pay&lt;/span&gt; &lt;span class="err"&gt;₹&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;0&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="cm"&gt;/* Display Payment Details */&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;paymentDetails&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt; &lt;span class="na"&gt;marginTop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;20px&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1px solid #ccc&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;10px&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h3&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Payment&lt;/span&gt; &lt;span class="nx"&gt;Details&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h3&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;          &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;strong&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Payment&lt;/span&gt; &lt;span class="na"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/strong&amp;gt; {paymentDetails.razorpay_payment_id}&amp;lt;/&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;strong&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Order&lt;/span&gt; &lt;span class="na"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/strong&amp;gt; {paymentDetails.razorpay_order_id}&amp;lt;/&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;strong&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;Signature&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/strong&amp;gt; {paymentDetails.razorpay_signature}&amp;lt;/&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="p"&gt;)}&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;Payment&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Update App.js
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Replace the contents of App.js with:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Payment&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./Payment&lt;/span&gt;&lt;span class="dl"&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;App&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Razor&lt;/span&gt; &lt;span class="nx"&gt;pay&lt;/span&gt;  &lt;span class="nx"&gt;Integration&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Payment&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Test the Integration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Start the backend server:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd backend  
node server.js  

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Start the React app:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd frontend  
npm start  

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Open &lt;strong&gt;&lt;a href="http://localhost:your_localhost" rel="noopener noreferrer"&gt;http://localhost:your_localhost&lt;/a&gt;&lt;/strong&gt; in your browser.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fluld8312c8c62uptmv31.jpg" 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%2Fluld8312c8c62uptmv31.jpg" alt="Razor Pay Payment interface in react front end" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ub3rg1jqhohcrve6t5r.jpg" 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%2F2ub3rg1jqhohcrve6t5r.jpg" alt="Razor pay displaying details like payment id, order id,signature" width="800" height="339"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwg7q6s638r9ksfzoyeup.jpg" 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%2Fwg7q6s638r9ksfzoyeup.jpg" alt="customer details adding in razor pay dashboard" width="800" height="166"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>razorpayapiintegration</category>
      <category>reactpaymentgateway</category>
      <category>paymentgatewayreacttutorial</category>
      <category>paymentintegrationreact</category>
    </item>
  </channel>
</rss>
